爱大鸟LoveShootBirds强联网移动SDK添加(
来源:互联网 发布:linux find当前目录 编辑:程序博客网 时间:2024/05/01 16:38
Java强联网代码
<1>添加包mmbilling1.2.1.jar和libcasdkjni.so、libidentifyapp.so两个文件
<2>loveshootBirdsAndroid.java
package com.qingxue.game;import mm.purchasesdk.OnPurchaseListener;import mm.purchasesdk.Purchase;import org.cocos2dx.lib.Cocos2dxActivity;import org.cocos2dx.lib.Cocos2dxGLSurfaceView;import android.app.ProgressDialog;import android.content.Context;import android.os.Bundle;import android.os.Handler;import android.os.Message;import android.util.Log;public class LoveShootBirdsAndroid extends Cocos2dxActivity{public final static int SHOW_STONE = 1;//单例 public static LoveShootBirdsAndroid instance = null; public Purchase purchase;private Context context;private ProgressDialog mProgressDialog;private IAPListener mListener;// 计费信息private static final String APPID = "300008073477";private static final String APPKEY = "ABF7F92E2A54F1AB";// 计费点信息private static final String LEASE_PAYCODE = "30000807347701"; private static native void getStone(); //购买石头,实现石头界面的刷新 protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);instance = this;mProgressDialog = new ProgressDialog(this);mProgressDialog.setIndeterminate(true);mProgressDialog.setMessage("请稍候...");context = this; IAPHandler iapHandler = new IAPHandler(this);/** * IAP组件初始化.包括下面3步。 *//** * step1.实例化PurchaseListener。实例化传入的参数与您实现PurchaseListener接口的对象有关。 * 例如,此Demo代码中使用IAPListener继承PurchaseListener,其构造函数需要Context实例。 */mListener = new IAPListener(this, iapHandler);/** * step2.获取Purchase实例。 */purchase = Purchase.getInstance();/** * step3.向Purhase传入应用信息。APPID,APPKEY。 需要传入参数APPID,APPKEY。 APPID,见开发者文档 * APPKEY,见开发者文档 */try {purchase.setAppInfo(APPID, APPKEY);} catch (Exception e1) {e1.printStackTrace();}/** * step4. IAP组件初始化开始, 参数PurchaseListener,初始化函数需传入step1时实例化的 * PurchaseListener。 */try {purchase.init(context, mListener);} catch (Exception e) {e.printStackTrace();}showProgressDialog();} public Cocos2dxGLSurfaceView onCreateView() { Cocos2dxGLSurfaceView glSurfaceView = new Cocos2dxGLSurfaceView(this); // LoveShootBirdsAndroid should create stencil buffer glSurfaceView.setEGLConfigChooser(5, 6, 5, 0, 16, 8); return glSurfaceView; } static { System.loadLibrary("cocos2dcpp"); } private void showProgressDialog() {if (mProgressDialog == null) {mProgressDialog = new ProgressDialog(LoveShootBirdsAndroid.this);mProgressDialog.setIndeterminate(true);mProgressDialog.setMessage("请稍候.....");}if (!mProgressDialog.isShowing()) {mProgressDialog.show();}}public void dismissProgressDialog() {if (mProgressDialog != null && mProgressDialog.isShowing()) {mProgressDialog.dismiss();}} //获取实例 public static Object getInstance() { Log.e("instance", "jobj create Already"); return instance; } private Handler mHandler = new Handler() { public void handleMessage(Message msg) { switch(msg.what) { case SHOW_STONE: buyStone(); break; } } }; public void buyStoneSend() { Log.e("buyStoneSend", "buyStoneSend"); Message msg = mHandler.obtainMessage(); msg.what = SHOW_STONE; msg.sendToTarget(); } public void buyStone(){Log.e("buyStone","buyStone");order(instance, LEASE_PAYCODE, mListener);}public void order(Context context, String mPaycode , OnPurchaseListener listener) {Log.e("order","order");try { purchase.order(context, mPaycode, mListener);} catch (Exception e) {e.printStackTrace();}} public void MMpaySuccess(String code) { if(code == null) return; Log.e("MMpaySuccess",code); if(code.equals(LEASE_PAYCODE)){Log.e("buyStoneSuccess","buyStoneSuccess");//在这实现Java调用C++代码,实现石头的界面刷新getStone(); } } public void MMpayFaild() { Log.e("faild","faild"); }}<3>IAPHandler.javapackage com.qingxue.game;import android.app.Activity;import android.app.AlertDialog;import android.content.DialogInterface;import android.os.Handler;import android.os.Message;import android.widget.Toast;public class IAPHandler extends Handler {public static final int INIT_FINISH = 10000;public static final int BILL_FINISH = 10001;public static final int QUERY_FINISH = 10002;public static final int UNSUB_FINISH = 10003;private LoveShootBirdsAndroid context;public IAPHandler(Activity context) {this.context = (LoveShootBirdsAndroid) context;}@Overridepublic void handleMessage(Message msg) {super.handleMessage(msg);int what = msg.what;switch (what) {case INIT_FINISH:initShow((String) msg.obj);context.dismissProgressDialog();break;default:break;}}private void initShow(String msg) {Toast.makeText(context, "初始化:" + msg, Toast.LENGTH_LONG).show();}public void showDialog(String title, String msg) {AlertDialog.Builder builder = new AlertDialog.Builder(context);builder.setTitle(title);builder.setIcon(context.getResources().getDrawable(R.drawable.icon));builder.setMessage((msg == null) ? "Undefined error" : msg);builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {public void onClick(DialogInterface dialog, int whichButton) {dialog.dismiss();}});builder.create().show();}}<4>IAPListener.javapackage com.qingxue.game;import java.util.HashMap;import mm.purchasesdk.OnPurchaseListener;import mm.purchasesdk.Purchase;import mm.purchasesdk.PurchaseCode;import android.content.Context;import android.os.Message;import android.util.Log;public class IAPListener implements OnPurchaseListener {private final String TAG = "IAPListener";private LoveShootBirdsAndroid context;private IAPHandler iapHandler;public IAPListener(Context context, IAPHandler iapHandler) {this.context = (LoveShootBirdsAndroid) context;this.iapHandler = iapHandler;}@Overridepublic void onInitFinish(int code){Log.d(TAG, "Init finish, status code = " + code);Message message = iapHandler.obtainMessage(IAPHandler.INIT_FINISH);String result = "初始化结果:" + Purchase.getReason(code);message.obj = result;message.sendToTarget();}@Overridepublic void onBillingFinish(int code, HashMap arg1){Log.e(TAG, "billing finish, status code = " + code);System.out.println("billing finish, status code = " + code);String result = "订购结果:订购成功";Message message = iapHandler.obtainMessage(IAPHandler.BILL_FINISH);// 商品信息String paycode = null;// 商品的交易 ID,用户可以根据这个交易ID,查询商品是否已经交易String tradeID = null;if (code == PurchaseCode.ORDER_OK ) {/** * 商品购买成功或者已经购买。 此时会返回商品的paycode,orderID,以及剩余时间(租赁类型商品) */if (arg1 != null) {paycode = (String) arg1.get(OnPurchaseListener.PAYCODE);if (paycode != null && paycode.trim().length() != 0) {result = result + ",Paycode:" + paycode;}tradeID = (String) arg1.get(OnPurchaseListener.TRADEID);if (tradeID != null && tradeID.trim().length() != 0) {result = result + ",tradeid:" + tradeID;}}//订购成功context.MMpaySuccess(paycode);} else {/** * 表示订购失败。 *///订购失败result = "订购结果:" + Purchase.getReason(code);}if(paycode == null) context.MMpayFaild();context.dismissProgressDialog();System.out.println(result);}@Overridepublic void onAfterApply() {// TODO Auto-generated method stub}@Overridepublic void onAfterDownload() {// TODO Auto-generated method stub}@Overridepublic void onBeforeApply() {// TODO Auto-generated method stub}@Overridepublic void onBeforeDownload() {// TODO Auto-generated method stub}@Overridepublic void onQueryFinish(int arg0, HashMap arg1) {// TODO Auto-generated method stub}@Overridepublic void onUnsubscribeFinish(int arg0) {// TODO Auto-generated method stub}}AndroidManifest.xml<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.qingxue.game" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="8" /> <application android:icon="@drawable/icon" android:label="@string/app_name" > <activity android:name=".LoveShootBirdsAndroid" android:configChanges="orientation" android:screenOrientation="landscape" android:theme="@android:style/Theme.NoTitleBar.Fullscreen" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <service android:name="mm.purchasesdk.iapservice.PurchaseService" android:exported="true" > <!-- android:process="mm.iapServices" > --> <intent-filter android:priority="230" > <action android:name="com.aspire.purchaseservice.BIND" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> <intent-filter android:priority="230" > <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.SAFIAP.COMPONENT" > </category> </intent-filter> </service> <!-- android:excludeFromRecents="true" --> <!-- android:launchMode="singleInstance" --> <activity android:name="mm.purchasesdk.iapservice.BillingLayoutActivity" android:configChanges="orientation|keyboardHidden" android:theme="@android:style/Theme.Translucent" > <intent-filter android:priority="230" > <action android:name="com.qingxue.game.com.mmiap.activity" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity> <!-- android:process="safiap.framework.safframeworkmanager" begin --> <service android:name="safiap.framework.SafFrameworkManager" android:exported="true" android:process="safiap.framework" > <intent-filter android:priority="600" > <!-- ID for services declared in AIDL --> <action android:name="safiap.framework.sdk.ISAFFramework" /> </intent-filter> <intent-filter android:priority="600" > <!-- ID for services declared in AIDL --> <action android:name="safiap.framework.ACTION_START_DOWNLOAD" /> </intent-filter> <intent-filter android:priority="600" > <!-- ID for services declared in AIDL --> <action android:name="safiap.framework.ACTION_CHECK_UPDATE" /> </intent-filter> </service> <!-- receivers --> <receiver android:name="safiap.framework.CheckUpdateReceiver" > <intent-filter> <action android:name="safiap.framework.ACTION_CANCEL_NOTIFICATION" /> </intent-filter> <intent-filter> <action android:name="safiap.GET_SHARED_DATA" /> </intent-filter> <intent-filter> <action android:name="safiap.framework.ACTION_SET_TIMER" /> </intent-filter> </receiver> <activity android:name="safiap.framework.ui.UpdateHintActivity" android:configChanges="orientation" android:excludeFromRecents="true" android:launchMode="singleInstance" android:theme="@android:style/Theme.Translucent.NoTitleBar" > <intent-filter> <action android:name="safiap.framework.ACTION_TO_INSTALL" /> </intent-filter> <intent-filter> <action android:name="safiap.framework.ACTION_TO_INSTALL_IAP" /> </intent-filter> <intent-filter> <action android:name="safiap.framework.ACTION_NETWORK_ERROR_IAP" /> </intent-filter> <intent-filter> <action android:name="safiap.framework.ACTION_NETWORK_ERROR_FRAMEWORK" /> </intent-filter> </activity> <service android:name="safiap.framework.logreport.monitor.handler.LogreportHandler" android:process=":remote" /> <!-- android:process="safiap.framework.safframeworkmanager" end --> </application> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.READ_PHONE_STATE" /> <uses-permission android:name="android.permission.SEND_SMS" /> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" /> <uses-permission android:name="android.permission.READ_SMS" /></manifest>C++部分<1>头文件#if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID) #include <jni.h> #include "platform/android/jni/JniHelper.h" #include <android/log.h> #endif <2>支付部分代码C++调Javavoid GameScene::buyStone(){if(! CCDirector::sharedDirector()->isPaused()){CCDirector::sharedDirector()->pause();} #if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID) //判断当前是否为Android平台 JniMethodInfo minfo; jobject jobj; if (JniHelper::getStaticMethodInfo(minfo, "com/qingxue/game/LoveShootBirdsAndroid", "getInstance", "()Ljava/lang/Object;")) { jobj = minfo.env->CallStaticObjectMethod(minfo.classID, minfo.methodID); if (JniHelper::getMethodInfo(minfo, "com/qingxue/game/LoveShootBirdsAndroid", "buyStoneSend", "()V")) { CCLog("jobj start");if(jobj == NULL) {return;}minfo.env->CallVoidMethod(jobj, minfo.methodID); if(CCDirector::sharedDirector()->isPaused()){const char* LeavedStoneNum = ((CCString*)_gameScene->chnStrings->objectForKey("leavedStoneNum"))->m_sString.c_str(); _gameScene->_panelLayer->leavedStoneLabel->setString(CCString::createWithFormat("%s: %d",LeavedStoneNum, _gameScene->_panelLayer->leavedStoneNum)->getCString()); CCDirector::sharedDirector()->resume();}CCLog("jobj end");} } #endif}Java调用C++//在C++中对Java文件的private static native void getStone();方法实现为:#if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID) //判断当前是否为Android平台 extern "C"{void Java_com_qingxue_game_GunStreet_getStone(JNIEnv* env, jobject thiz){CCLog("Java_com_qingxue_game_GunStreet_getStone");_gameScene->_panelLayer->leavedStoneNum += 15;const char* LeavedStoneNum = ((CCString*)_gameScene->chnStrings->objectForKey("leavedStoneNum"))->m_sString.c_str(); _gameScene->_panelLayer->leavedStoneLabel->setString(CCString::createWithFormat("%s: %d",LeavedStoneNum, _gameScene->_panelLayer->leavedStoneNum)->getCString());}}#endif
0 0
- 爱大鸟LoveShootBirds强联网移动SDK添加(
- 爱大鸟LoveShootBirds弱联网移动SDK添加(C++调Java)
- Unity3D接入移动MM支付SDK(强联网)
- Unity3D接入移动MM支付SDK(强联网)的问题
- 移动添加SDK注意事项
- GunStreet移动SDK支付(弱联网)
- 弱联网与强联网
- 移动呀,爱你
- flash air移动应用中添加百度移动广告联盟sdk挣钱方法
- 弱联网与强联网之间的区别
- 什么是强联网和弱联网以及区别
- 网络游戏——强联网游戏
- 添加强名称
- 爱在心中(强连通分量)
- Unity2d 5.1 弱联网游戏制作 (一)场景创建、添加组件、精灵移动、主摄像机跟随
- 爱享移动之指南针
- 移动应用SDK
- 移动广告sdk开发
- Emacs+LaTeX快速配置(附带个性设置)
- html5的结构标签有利于seo
- [IOS]UIButton 圆角/边框设置 相关
- 一个极好的适合新手的详细的Flask教程————《The Flask Mega Tutorial》
- 关于oracle
- 爱大鸟LoveShootBirds强联网移动SDK添加(
- 基于SVN的快速开发发布环境搭建
- laravel ubuntu 安装
- java多线程
- tshark命令小结
- re映射
- 魔方机器人思路
- ping不通问题的总结 OK6410 开发板的初学者 网络的总结
- (C语言版)链表(二)——实现单向循环链表创建、插入、删除、释放内存等简单操作