MMSDK312开发文档.docx

上传人:b****6 文档编号:3856435 上传时间:2022-11-25 格式:DOCX 页数:25 大小:670.64KB
下载 相关 举报
MMSDK312开发文档.docx_第1页
第1页 / 共25页
MMSDK312开发文档.docx_第2页
第2页 / 共25页
MMSDK312开发文档.docx_第3页
第3页 / 共25页
MMSDK312开发文档.docx_第4页
第4页 / 共25页
MMSDK312开发文档.docx_第5页
第5页 / 共25页
点击查看更多>>
下载资源
资源描述

MMSDK312开发文档.docx

《MMSDK312开发文档.docx》由会员分享,可在线阅读,更多相关《MMSDK312开发文档.docx(25页珍藏版)》请在冰豆网上搜索。

MMSDK312开发文档.docx

MMSDK312开发文档

 

中国移动应用商场

 

应用内计费

 

开发指南

V3.1.2

2015-01

本文档主要描述了中国移动应用商场(MM)的应用内计费基本机制,以及指导开发者如何在应用中使用应用内计费功能。

文档中提供了开发者需要做哪些准备、如何获取所需资源及如何使用SDK等的指引,同时也提供了相关的范例供开发者学习使用。

目录

1.1开发应用3

1.1.1准备开发环境3

1.1.2下载和导入SDK3

1.2开发者开发应用注意事项5

2应用内计费SDK使用手册6

2.1SDK组成和接口说明6

2.1.1PurchaseAPI说明6

2.1.2OnPurchaseListener8

2.1.3OnPurchaseListener中返回数据说明9

2.1.4AndroidManifest设置(开发者必须要注意的地方)10

2.2SDK调用时序14

2.2.1构造及初始化14

2.2.2查询15

2.2.3订购15

2.3示例代码16

2.3.1SDK初始化18

2.3.2SDK订购,查询,退订接口的调用20

2.3.3获取渠道ID21

2.4应用混淆23

 

1.1开发应用

1.1.1准备开发环境

在使用应用内计费接口之前,请确认Eclipse、JDK、AndroidSDK已经安装,并正常使用。

如果尚未安装,请参考以下资源,安装过程不再赘述。

Eclipse:

http:

//www.eclipse.org/downloads/

JDK:

AndroidSDK:

1.1.2下载和导入SDK

SDK以jar文件的形式提供给开发者在程序中使用,同时提供HTML格式的API文档供查阅相关类、方法、常量等说明。

以下内容将说明如何在Eclipse中,将jar文件加入到应用工程中去。

1.将mmbilling.3.1.2.jar文件拷贝到应用工程的libs目录下,如没有该目录,可新建;

2.在ProjectExplorer中右击鼠标,从弹出的菜单中,选中“Properties”;

3.在Properties窗口的左侧菜单项中,点击“JavaBuildPath”,并在右侧选中“Libraries”;

4.点击“AddJARs…”按钮,在弹出窗口中,选中jar文件,如下图1所示。

*SDK可以在创建应用页面进行下载

图表1添加jar文件

最后,检查ReferencedLibraries中是否可以看到jar文件,如下图2所示。

如果可以,则表示配置成功,否则,请检查上述步骤是否执行成功。

图表2检查

5.*将libidentifyApp.so,libcasdkjni.so,libcmcc_haze.so和libcmcc_rusteze.so复制到libs\armeabi目录下

 

1.2开发者开发应用注意事项

1)为保证自身敏感数据(APPID、APPKEY、PAYCODE)的安全性,请尽量采用加密等手段保存,避免以常量字符串形式出现于源码。

2)为保护自身数据和付费点,开发完成后,建议对APK做混淆处理。

3)应用中不能同时发起两起或者以上的订购操作,比如不能同时启动两个查询订单的线程。

4)包月和单次计费的业务,可以缓存授权结果在本地,以避免过多网络的交互。

但缓存的授权可能会有不同步的情况,应用可根据实际业务情况决定是否启用本地缓存授权。

也可以在运行过程中,清除缓存授权(clearCache())。

5)可批量购买的计费点,在两次订购之间,目前有时间限制(目前定义30秒钟)

6)可批量购买的计费点,一次订购数量不能超过10个。

7)应用升级,开发如果需要升级目前已投入商用的APP,需要重新上传后,用户通过MM商城或者其他与移动有关渠道升级。

如果采用自升级,可能会因为APP数据与移动服务器中数据不一致,导致APP中无法正常发起交易业务。

8)中国移动部分省份已经开始销售147号段的SIM卡,该号段同样可以使用IAP进行计费。

请应用开发者注意判断此号段的SIM卡,以免造成不必要的麻烦。

9)如果应用中同时有armeabi和armeabi-v7a等多个文件夹,请将计费需要的so库(libidentifyApp.so,libcasdkjni.so,libcmcc_haze.so和libcmcc_rusteze.so)同时添加到这两个文件夹中。

如果存在x86文件夹,操作方式同上。

10)升级SDK时,是否能仅升级jar?

不行,sdk包括jar和so,在使用新版本时,请同事替换这4个so库。

 

2应用内计费SDK使用手册

2.1SDK组成和接口说明

SDK公开的接口包括:

2.1.1PurchaseAPI说明

Purchase对象是SDK提供给开发者发起订购,查询的接口。

开发者在实例化该对象后,调用其中的函数可以处理相应的业务。

1)构造实例:

Purchase对象的创建使用了单例模式,不需要重复创建:

purchase=Purchase.getInstance();

2)各参数设置:

purchase.setAppInfo(appid,appkey);//设置计费应用ID和Key(必须)

purchase.setAppInfo(appid,appkey,PurchaseSkin.SKIN_SYSTEM_ONE);

//此接口仅支持弱联网。

PurchaseSkin.SKIN_SYSTEM_ONE,PurchaseSkin.SKIN_SYSTEM_TWO,

PurchaseSkin.SKIN_SYSTEM_THREE,

共有3套皮肤,默认第3套皮肤,ap可根据apk风格进行选择,此参数设置只对弱联网有效。

purchase.setTimeout(10000,10000);//设置超时时间(可选),可不设置,缺省都是10s

3)初始化:

Init(),初始化函数。

此函数主要实现用户身份数字证书申请。

建议开发者在APP初始化中调用,这样可减少用户在订购,查询业务中的等待时间。

purchase.init(context,listener);//初始化,传入监听器

调用后,请等待onInitFinish()完成后,再发起其他业务请求,否则其他业务不会处理。

4)订购:

调用Purchase对象中的order函数,一共有4种,传入相应的参数:

●payCode,计费点

●orderCount,订购数量。

(包月、约定租期和不可重复订购计费点只能传入1,可重复订购计费点可以传入10以下数值)

●nextCycle,对于租赁类业务,可以预订下一期租赁周期。

●Listener,本参数是开发实现OnPurchaseListener对象的实例,主要用于监听各个业务的结果。

●data,本参数是可透传到开发者服务器的自定义数据,长度:

弱联网计费点16位以内,强联网计费点64位以内。

必须数字和字母。

//订购一个商品

Stringtradeid=purchase.order(context,paycode,listener);

//订购5个商品

Stringtradeid=purchase.order(context,paycode,5,listener);

//租赁当前周期

Stringtradeid=purchase.order(context,MONTH_PAYCODE,1,false[true],listener);

//调用购买接口并传入自定义数据

Stringtradeid=purchase.order(context,paycode,1,data,true,listener);

订购返回的tradeid代表当次交易ID,可以在查询接口中传入该交易ID查询交易有无成功

订购具体的结果在OnPurchaseListener中的onBillingFinish()中获得。

如果未能初始化成功,或者之前未调用init(),那么第一次订购,会申请用户身份数字证书,导致第一次订购时间略长。

5)查询:

调用Purchase对象中的query函数,传入相应参数:

●payCode,计费点

●TradeID,调用order()接口返回的交易ID,用于查询交易是否成功

●Listener,本参数是开发实现OnPurchaseListener对象的实例,主要用于监听各个业务的结果。

//查询单次或者租赁类商品是否订购成功

purchase.query(context,paycode,listener);

//带交易ID查询重复类商品是否交易成功

purchase.query(context,paycode,tradeid,listener);

6)退订:

调用Purchase对象中的unsubscribe函数,传入相应参数:

●payCode,计费点

●Listener,本参数是开发实现OnPurchaseListener对象的实例,主要用于监听各个业务的结果。

//退订包月业务

purchase.unsubscribe(context,Paycode,Listener);

注意:

目前只有包月业务允许退订。

其他类型业务均不允许退订。

2.1.2OnPurchaseListener

应用内计费各种操作(查询,订购)监听器。

开发者通过实现该接口中各个接口来监听各种业务操作的状态:

//初始化返回接口

voidonInitFinish(finalintreturnCode)

//查询返回接口

voidonQueryFinish(finalintreturnCode,finalHashMapreturnObject)

//订购返回接口:

voidonBillingFinish(finalintreturnCode,finalHashMapreturnObject) 

//退订返回接口:

publicvoidonUnsubscribeFinish(finalintreturnCode)

Returncode的定义在PurchaseCode类中,具体含义可以通过getDescription()获取。

2.1.3OnPurchaseListener中返回数据说明

正如前面所描述的一样,初始化,查询,订购接口的返回值在OnPurchaseListenr中得到。

returnObject中定义的数据主要有几种:

//订单号

publicfinalstaticStringORDERID="OrderId";

//计费点代码

publicfinalstaticStringPAYCODE="Paycode";

//租赁剩余时间

publicfinalstaticStringLEFTDAY="LeftDay";

//交易ID

publicfinalstaticStringTRADEID="TradeID";

//订购类型

publicfinalstaticStringORDERTYPE="OrderType";

上面这些值包含在onXXFinish中参数Hashmap中。

各个接口返回的数据不一样。

上面这些值所代表的意义如下:

OrderId,表示此次订单,mm平台形成的订单流水号

Paycode,表示此次交易的商品id

LeftDay,表示此次交易商品的有效期。

TradeID,表示此次交易的交易ID,供查询用。

OrderType,表示此次交易的类型。

如果返回0,则表示是生成测试订单;如果返回1,则表示生成正式订单。

1)初始化接口

初始化接口不返回任何数据。

2)订购接口

订购接口在订购成功后,会返回上面5个值。

如果订购失败,则不返回上面任何值。

3)查询接口

查询接口在查询成功后,返回上面的OrderId,Paycode,LeftDay这三个值。

失败则不返回任何值。

2.1.4AndroidManifest设置(开发者必须要注意的地方)

此版本需要开发者在AndroidManifest.xml中增加iap声明。

1)打开应用的AndroidManifest.xml文件,增加权限和内部Service与Activity声明

android:

name="mm.purchasesdk.iapservice.PurchaseService"

android:

exported="true">

--android:

process="mm.iapServices">-->

priority="312">

name="com.aspire.purchaseservice.BIND"/>

name="android.intent.category.DEFAULT"/>

priority="312">

name="你程序的包名.purchaseservice.BIND"/>

name="android.intent.category.DEFAULT"/>

priority="312">

name="android.intent.action.MAIN"/>

name="android.intent.category.SAFIAP.COMPONENT">

--android:

excludeFromRecents="true"-->

--android:

launchMode="singleInstance"-->

android:

name="mm.purchasesdk.iapservice.BillingLayoutActivity"

android:

configChanges="orientation|keyboardHidden"

android:

theme="@android:

style/Theme.Translucent">

priority="312">

name="您程序的包名.com.mmiap.activity"/>

name="android.intent.category.DEFAULT"/>

--android:

process="safiap.framework.safframeworkmanager"begin-->

android:

name="safiap.framework.SafFrameworkManager"

android:

exported="true"

android:

process="safiap.framework">

priority="632">

--IDforservicesdeclaredinAIDL-->

name="safiap.framework.sdk.ISAFFramework"/>

priority="632">

--IDforservicesdeclaredinAIDL-->

name="safiap.framework.ACTION_START_DOWNLOAD"/>

priority="632">

--IDforservicesdeclaredinAIDL-->

name="safiap.framework.ACTION_CHECK_UPDATE"/>

--receivers-->

name="safiap.framework.CheckUpdateReceiver">

name="safiap.framework.ACTION_CANCEL_NOTIFICATION"/>

name="safiap.GET_SHARED_DATA"/>

name="safiap.framework.ACTION_SET_TIMER"/>

android:

name="safiap.framework.ui.UpdateHintActivity"

android:

launchMode="singleInstance"

android:

excludeFromRecents="true"

android:

configChanges="orientation"

android:

theme="@android:

style/Theme.Translucent.NoTitleBar">

name="safiap.framework.ACTION_TO_INSTALL"/>

name="safiap.framework.ACTION_TO_INSTALL_IAP"/>

name="safiap.framework.ACTION_NETWORK_ERROR_IAP"/>

name="safiap.framework.ACTION_NETWORK_ERROR_FRAMEWORK"/>

name="safiap.framework.logreport.monitor.handler.LogreportHandler"android:

process=":

remote"/>

--android:

process="safiap.framework.safframeworkmanager"end-->

2)Action声明(重点)

在上述声明中,需要注意声明BillingLayoutActivity中的Action

name="mm.purchasesdk.iapservice.BillingLayoutActivity"

android:

configChanges="orientation|keyboardHidden"

android:

theme="@android:

style/Theme.Translucent">

priority="312">

name="你程序的包名.com.mmiap.activity"/>

name="android.intent.category.DEFAULT"/>

请将action声明为您程序的包名.com.mmiap.activity

在上述声明中,需要注意声明PurchaseService中的Action

其中一个intent-filter是:

priority="312">

name="你程序的包名.purchaseservice.BIND"/>

name="android.intent.category.DEFAULT"/>

请将action声明为您程序的包名.purchaseservice.BIND

3)增加权限声明

name="android.permission.ACCESS_NETWORK_STATE"/>

name="android.permission.READ_PHONE_STATE"/>

name="android.permission.SEND_SMS"/>

name="android.permission.INTERNET"/>

name="android.permission.ACCESS_WIFI_STATE"/>

name="android.permission.WRITE_EXTERNAL_STORAGE"/>

name="android.permission.MOUNT_UNMOUNT

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高中教育 > 语文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1