爱大鸟LoveShootBirds弱联网移动SDK添加(C++调Java)
来源:互联网 发布:网络推销员 编辑:程序博客网 时间:2024/05/01 08:00
不管你程序来发的怎么样,我们是来赚钱的,因此应该加上购买道具时的支付功能。支付方法主要有弱联网和强联网两种方法。下面介绍核心代码。
Java弱联网代码
<1>添加包mmsmsbilling1.2.1.jar和libsmsiap.so两个文件
<2>LoveShootBirdsAndroid.java
package com.qingxue.game;import mm.sms.purchasesdk.OnSMSPurchaseListener;import mm.sms.purchasesdk.SMSPurchase;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 SMSPurchase purchase;private Context context;private ProgressDialog mProgressDialog;private IAPListener mListener;// 计费信息private static final String APPID = "300008159198";private static final String APPKEY = "BBDC2D84D7161EE3";// 计费点信息private static final String LEASE_PAYCODE = "30000815919805"; 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 = SMSPurchase.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.smsInit(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("showMoreGame","showMoreGame"); Message msg = mHandler.obtainMessage(); msg.what = instance.SHOW_STONE; msg.sendToTarget(); } public void buyStone(){Log.e("buyStone","buyStone");order(instance, "30000815919805", mListener);}public void order(Context context, String mPaycode , OnSMSPurchaseListener listener) {Log.e("order","order");try { purchase.smsOrder(context, mPaycode, mListener);} catch (Exception e) {e.printStackTrace();}} public void MMpaySuccess(String code) { if(code == null) return; Log.e("MMpaySuccess",code); if(code.equals("30000815919805")){Log.e("chenggonbg","success"); } } public void MMpayFaild() { Log.e("faild","faild"); }}
IAPListener.java
package com.qingxue.game;import java.util.HashMap;import mm.sms.purchasesdk.OnSMSPurchaseListener;import mm.sms.purchasesdk.PurchaseCode;import mm.sms.purchasesdk.SMSPurchase;import android.content.Context;import android.os.Message;import android.util.Log;public class IAPListener implements OnSMSPurchaseListener {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 = "初始化结果:" + SMSPurchase.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 || code == PurchaseCode.ORDER_OK_TIMEOUT) {/** * 商品购买成功或者已经购买。 此时会返回商品的paycode,orderID,以及剩余时间(租赁类型商品) */if (arg1 != null) {paycode = (String) arg1.get(OnSMSPurchaseListener.PAYCODE);if (paycode != null && paycode.trim().length() != 0) {result = result + ",Paycode:" + paycode;}tradeID = (String) arg1.get(OnSMSPurchaseListener.TRADEID);if (tradeID != null && tradeID.trim().length() != 0) {result = result + ",tradeid:" + tradeID;}}//订购成功context.MMpaySuccess(paycode);} else {/** * 表示订购失败。 *///订购失败result = "订购结果:" + SMSPurchase.getReason(code);}if(paycode == null) context.MMpayFaild();context.dismissProgressDialog();System.out.println(result);}}
IAPHandler.java
package 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();}}
C++部分
<1>头文件
#if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID) #include <jni.h> #include "platform/android/jni/JniHelper.h" #include <android/log.h> #endif
<2>支付部分代码
void PanelLayer::BuyStone(CCObject* sender){CCLog("buvtrgfctyfvyStone");GameScene* gameScene = (GameScene*)getParent();//调用gameScene中购买石头的代码#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); CCLog("jobj end");} else{CCLog("call buyStoneSend Failed!!!");}}else{CCLog("call buystone !!!");}#endifgameScene->_panelLayer->leavedStoneNum += 10;const char* LeavedStoneNum = ((CCString*)chnStrings->objectForKey("leavedStoneNum"))->m_sString.c_str(); leavedStoneLabel->setString(CCString::createWithFormat("%s: %d",LeavedStoneNum, leavedStoneNum)->getCString());}
0 0
- 爱大鸟LoveShootBirds弱联网移动SDK添加(C++调Java)
- 爱大鸟LoveShootBirds强联网移动SDK添加(
- GunStreet移动SDK支付(弱联网)
- Unity3D接入移动MM支付SDK(强联网)
- 移动添加SDK注意事项
- Unity2d 5.1 弱联网游戏制作 (一)场景创建、添加组件、精灵移动、主摄像机跟随
- Unity3D接入移动MM支付SDK(强联网)的问题
- 鼠标移动函数的添加(C#)
- Java学习从菜鸟变大鸟之二 输入输出流(IO)
- J2EE学习从菜鸟变大鸟之五 JDBC(Java Data Base Connectivity)
- J2EE学习从菜鸟变大鸟之六 EJB(Enterprise JavaBean)企业级Java组件
- [置顶] J2EE学习从菜鸟变大鸟之六 EJB(Enterprise JavaBean)企业级Java组件
- Java学习从菜鸟变大鸟之二 输入输出流(IO)
- 阿里物联网套件-设备端SDK学习实践(C版-Linux-MQTT)
- java android sdk manager 无法联网的解决办法
- Unity3D接入移动MMSDK支付的问题(弱联网篇)
- Android快速SDK(5)联网请求库QuickHttp
- 阿里物联网套件-服务端SDK学习实践(开篇)
- C# (WebKit初探)WebKit.net最简单使用方法
- 黑马程序员---UDP传输
- 整理IOS面试题
- JScharts快速入门
- Mysql日期和时间函数总结
- 爱大鸟LoveShootBirds弱联网移动SDK添加(C++调Java)
- java静态代理和动态代理
- Servlet、Filter、Listener、Interceptor
- 家居风水吉凶自测法
- B树索引(一、二)
- ThoughtWorks程序员读书雷达
- Java面向对象——集合框架(Map)
- 【BFS】-POJ-2386-Lake Counting
- 小米三怎么打开usb调试