爱大鸟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
原创粉丝点击