cocos2dx安卓客户端接入移动MM付费SDK

C++和java的调用需要使用JNI,这里使用cocos2dx提供的JniHelper就可以满足要求。

以游戏中购买炸弹道具为例

流程图:

先按照文档进行配置;

在Java工程中新建一个包"IAP",作为C++与mmsdk交互的中间层;

Handler和Listener可以使用Demo自带的两个类,将Demo2.4.2中的IAPHandler.java和IAPListener.java复制到IAP中;

在package IAP下新建类IAPJni

 1 package IAP;
 2
 3 import com.test.iap.testiap;
 4
 5 import android.content.Context;
 6 import mm.purchasesdk.OnPurchaseListener;
 7 import mm.purchasesdk.Purchase;
 8
 9 public class IAPJni
10 {
11     private static final String APPID = "11111111";
12     private static final String APPKEY = "111111111";
13
14
15
16     public static Purchase purchase;
17     private static String mPaycode;
18     private static IAPListener mListener;
19     private static Context mcontext;
20     private static testiap mactivity;
21     public IAPJni(testiap activity)
22     {
23         mcontext=activity;
24
25         mactivity=activity;
26
27         IAPHandler iapHandler = new IAPHandler(mactivity);
28         mListener = new IAPListener(mactivity, iapHandler);
29         purchase=Purchase.getInstance();
30         try {
31             purchase.setAppInfo(APPID, APPKEY);
32
33         } catch (Exception e1) {
34             e1.printStackTrace();
35         }
36
37
38
39     }
40     public static void orderBomb() {
41
42
43             mPaycode="111111111111111";
44             purchase.order(mactivity,mPaycode,1,false,mListener);\\MMSDK
45
46     }
47
48
49
50     public native static void orderBombSuccess();\\调用C++
51
52     public native static void orderFaild();\\调用C++
53 }

修改IAPListener.java

 1 @Override
 2     public void onBillingFinish(int code, HashMap arg1) {
 3         Log.d(TAG, "billing finish, status code = " + code);
 4         String result = "订购结果:订购成功";
 5         Message message = iapHandler.obtainMessage(IAPHandler.BILL_FINISH);
 6         // 此次订购的orderID
 7         String orderID = null;
 8         // 商品的paycode
 9         String paycode = null;
10         // 商品的有效期(仅租赁类型商品有??
11         String leftday = null;
12         // 商品的交??ID,用户可以根据这个交易ID,查询商品是否已经交??
13         String tradeID = null;
14
15         String ordertype = null;
16         if (code == PurchaseCode.ORDER_OK || (code == PurchaseCode.AUTH_OK)) {
17             /**
18              * 商品购买成功或??已经购买??此时会返回商品的paycode,orderID,以及剩余时间(租赁类型商品)
19              */
20
21
22             if (arg1 != null) {
23                 leftday = (String) arg1.get(OnPurchaseListener.LEFTDAY);
24                 if (leftday != null && leftday.trim().length() != 0) {
25                     result = result + ",剩余时间 ??" + leftday;
26                 }
27                 orderID = (String) arg1.get(OnPurchaseListener.ORDERID);
28                 if (orderID != null && orderID.trim().length() != 0) {
29                     result = result + ",OrderID ??" + orderID;
30                 }
31                 paycode = (String) arg1.get(OnPurchaseListener.PAYCODE);
32                 if (paycode != null && paycode.trim().length() != 0) {
33                     result = result + ",Paycode:" + paycode;
34                 }
35                 tradeID = (String) arg1.get(OnPurchaseListener.TRADEID);
36                 if (tradeID != null && tradeID.trim().length() != 0) {
37                     result = result + ",tradeID:" + tradeID;
38                 }
39                 ordertype = (String) arg1.get(OnPurchaseListener.ORDERTYPE);
40                 if (tradeID != null && tradeID.trim().length() != 0) {
41                     result = result + ",ORDERTYPE:" + ordertype;
42                 }
43 //_________修改___________________________
44                 if(paycode.equals(ORDERBOMB))
45                 {
46                 IAPJni.orderBombSuccess();//返回结果调用
47                 }
48
49
50             }
51         } else {
52             /**
53              * 表示订购失败??
54              */
55             IAPJni.orderFaild();
56             result = "订购结果" + Purchase.getReason(code);
57         }
58     //    context.dismissProgressDialog();
59         System.out.println(result);
60
61     }

C++端:

  购买入口:

  

void Sample::buyBomb()
{
    JniMethodInfo jmi;
                    if(JniHelper::getStaticMethodInfo(jmi ,"IAP/IAPJni" ,"orderBomb" ,"()V"))
                    {
                        jmi.env->CallStaticVoidMethod(jmi.classID , jmi.methodID );
                    }
}

  购买结果回调:

  

 1 #include "platform\android\jni\JniHelper.h"
 2
 3 extern "C"
 4 {
 5     void Java_IAP_IAPJni_orderBombSuccess(JNIEnv *env,jobject thiz)
 6     {
 7         BombNum++;
 8     }
 9
10     void Java_IAP_IAPJni_orderFaild()
11     {
12
13         }
14
15
16 }

配置时需要注意的问题:

将libidentifyApp.so和libmmSDKjni.so复制到proj.android\jni\hellocpp下

在Android.mk中加入:

include $(CLEAR_VARS)
LOCAL_MODULE := libidentifyapp
LOCAL_SRC_FILES := hellocpp/libidentifyapp.so

include $(PREBUILT_SHARED_LIBRARY)

include $(CLEAR_VARS)
LOCAL_MODULE := libcasdkjni
LOCAL_SRC_FILES := hellocpp/libcasdkjni.so
include $(PREBUILT_SHARED_LIBRARY)

LOCAL_SHARED_LIBRARIES := libidentifyapp
LOCAL_SHARED_LIBRARIES := libcasdkjni
include $(BUILD_SHARED_LIBRARY)

在主Activity中加载sdk的库

  static {
         System.loadLibrary("identifyapp");
         System.loadLibrary("casdkjni");

    }  

本例使用的移动MM付费SDK为2.4.2版。

cocos2dx安卓客户端接入移动MM付费SDK,布布扣,bubuko.com

时间: 2024-10-07 21:08:08

cocos2dx安卓客户端接入移动MM付费SDK的相关文章

Unity3d 接入 移动MM支付SDK(2.3) 全攻略

原地址:http://blog.csdn.net/dingxiaowei2013/article/details/26842177 先将例程运行起来 下载例程(csdn积分不够上传不了,只能用百度网盘):http://pan.baidu.com/s/1gd7PrxD 打开unity工程mm_pay_unity build apk包至工程目录\Assets\plugin_pay_mm\Tools\AndroidMultitool\Program_Files\app_temp.apk  (注意apk

Unity3D接入移动MM支付SDK(强联网)的问题

原地址:http://blog.csdn.net/lihandsome/article/details/11919113 因为移动MM支付的SDK只提供android版本的,要自己写过一个android项目再打包重新生成一个jar来供Unity3d引擎使用,这一部分我就不写了,网上也提供很多的教程,主要是已经成功调用之后,会发生以下的错误: 1.failed to find resource file(mmiap.xml} 06-28 05:14:09.746: E/d(4709): faile

unity 引用 移动mm 支付sdk

原地址:http://blog.csdn.net/u012085988/article/details/17531005 资源下载:http://download.csdn.net/detail/u012085988/6770625 (最近csdn貌似出了问题,超链接不能用了,博客写好发布后发现被截短了,这是什么情况) 点击下载资源.这里包含有unity引入移动mmsdk所需要的文件,以及一个编译好的android测试程序.若不想写代码,不想建eclipse可以下载资源包,跳过eclipse部分

cocos2dx工程中接入支付宝sdk

1. 首先去支付宝官网下载开发者文档 2. 然后按着开发者文档将支付宝的sdk导入到你的工程中,并关联到工程中,步骤入下图: (1)将从支付宝官方网站获得的支付宝的sdk的jar包拷贝到工程中的libs目录下,如图 (2)右键工程选择Properties,弹出如下窗口,首先选择1,其次选中2,最后点击3将拷到工程中的三个支付宝的jar包一一关联到工程中 3.  最后修改工程的AndroidManifest.xml文件,添加新的权限和支付宝的Activity,代码如下: 新权限: <uses-pe

Unity 3D 接入 移动MM (3.1.3)计费SDK

首先很想吐槽移动MM的SDK,简直就是给Unity开发人员找事做.我是一个Unity 小白,完全是为了帮同事接这个SDK,所以一切按照小白的规则来写,希望没有遗漏. 示例代码:http://download.csdn.net/detail/oulong999/8628673 1. Android 库文件 新建一个Android工程,标记为库文件工程. 参照计费SDK 的帮助文档导入SDK . 1> 将mmbilling.3.1.3.jar文件拷贝到应用工程的libs目录下,如没有该目录,可新建

Untiy 接入 移动MM 详解

原地址:http://www.cnblogs.com/alongu3d/p/3627936.html 第一次接到师傅的任务(小龙),准备着手写untiy接入第三方SDK的文章(android 方向),第一次写故而写的不好的地方不要吐槽.如有兴趣可加63438968(untiy 开发群)进行探讨. 本文主要已 unity 和android工程为基础进行解析分析.其次因目前各地sdk平台与unity程序有不兼容问题,故而导致了在发布后会缺少文件.本文也提供了一个解决方案供大家参考. 具体工程可加群6

WebSocket安卓客户端实现详解(一)–连接建立与重连

http://blog.csdn.net/zly921112/article/details/72973054 前言 这里特别说明下因为WebSocket服务端是公司线上项目所以这里url和具体协议我全部抹去了,但我会尽力给大家讲明白并且demo我都是测试过,还望各位看官见谅 我们先粗犷的讲下流程,掌握个大概的方向,然后在深入讲解细节的实现.这里先解答一个疑惑,为啥我们这要用WebSocket而不是Socket呢,因为WebSocket是一个应用层协议很多东西都规定好了我们直接按他的规定来用就好

Unity接入移动MM支付(Android)

移动没有用于Unity3D的移动MM支付SDK的接入,所以-- 这样一来,你需要去官网下载IAP-SDK做成jar包供Unity调用:http://dev.10086.cn/iap/?action=down&areaid=1354082900 1.先要明确一点的是在Unity的Assets目录中你得有个Plugins/Android的目录,并且必须在Assets目录,否则无法将资源打包到PAK.此时,你可以尝试打一个apk的包,用压缩文件打开的目录结构是这样的: 为什么就这样了呢?我也想知道!这

开源中国安卓客户端源码学习(一) 渐变启动界面

开源中国安卓客户端源码学习(一) 准备学习安卓开发, 看到网上有人推荐开源中国安卓客户端的源码, 说里面包含了大部分技术, 于是准备好好研究研究. 特开通此系列博客来记录学习过程. 由于是在学习, 经验不足, 里面肯定有很多不对的地方, 望大家指正. 到这里下载源码包,开发环境为Linux下Eclipse,导入源码后有可能会出现android.webkit.CacheManager找不到的错误, 原因是这个类在4.0以上版本的SDK被删除了, 只要下载4.0版本的SDK使用即可. 由于googl