申请指南参考:创建账号
参数说明:
1. merchantId: :游戏厂商唯一对应标示,厂商认证通过时生成,用于SDK接入配置;
2. appId:单个游戏单个平台唯一对应标示,游戏创建审核通过时生成,用于SDK接入配置;
3. appKey:单个游戏单个平台唯一对应,游戏创建审核通过时生成,用于SDK接入配置;
4. serverSeqNum:支付回调服务器序列号,登录CP后台后添加服务器,服务器序号为该参数,自定义参数,一般从1开始。如何添加服务器?
5. 其它参数说明
说明: 文档中使用的代码在demo工程中都能找到。
2.1 拷贝资源
拷贝Demo工程中的assets中的nfc_std.bin、data.bin到游戏工程中的assets目录下,此步骤很重要,不拷贝文件会造成nfc支付界面透明、银联支付闪退等问题。
2.2 导入SDK(2种方式)
2.2.1 引用library方式
第一步:让你的工程和Sdk_Project在同一个目录下,并导入eclipse;
第二步:让你的工程引用Sdk_Project工程,即完成sdk的导入。
第三步:选择Android的编译版本要在14以上。2.2.2 拷贝libs和res到游戏工程内的方法
第一步:将Sdk_Project目录下libs, res目录内的文件拷贝到你工程的对应目录;
第二步:选择Android的编译版本要在14以上,并确保jar都已导入,如图:
2.3 配置工程manifest
2.3.1 配置权限
<uses-permission android:name="android.permission.INTERNET" ></uses-permission>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.READ_SMS" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.WRITE_SETTINGS" />
<uses-permission android:name="android.permission.READ_SETTINGS" />
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
<uses-permission android:name="android.permission.GET_TASKS" />
<uses-permission android:name="android.permission.READ_LOGS" />
<!-- 打电话权限 -->
<uses-permission android:name="android.permission.CALL_PHONE" />
<!-- nfc权限 -->
<uses-permission android:name="android.permission.NFC" />
<!-- 手机震动 -->
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.webkit.permission.PLUGIN" />
2.3.2 配置activity和Service
<!-- SdkActivity 和 PayActivity 横竖屏设置与游戏保持一致 -->
<activity
android:name="com.downjoy.activity.SdkActivity"
android:configChanges="orientation|keyboardHidden|screenSize"
android:screenOrientation="behind"
android:theme="@style/dcn_dialog_activity"
android:windowSoftInputMode="stateHidden|adjustResize" >
<!--V4.2.2 添加-->
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT"/>
<category android:name="android.intent.category.BROWSABLE"/>
<!--需要替换成自己的appid,195是demo的appid-->
<!--<data android:scheme="dcnngsdk195"></data>-->
<data android:scheme="dcnngsdk替换成自己的appId"></data>
</intent-filter>
</activity>
<!-- UPPay sdk begin -->
<activity
android:name="com.unionpay.uppay.PayActivity"
android:configChanges="orientation|keyboardHidden|screenSize"
android:excludeFromRecents="true"
android:label="@string/app_name"
android:screenOrientation="portrait"
android:windowSoftInputMode="adjustResize" />
<!-- UPPay sdk end -->
<!-- alipay sdk begin -->
<activity
android:name="com.alipay.sdk.app.H5PayActivity"
android:configChanges="orientation|keyboardHidden|navigation"
android:exported="false"
android:screenOrientation="behind" >
</activity>
<activity
android:name="com.alipay.sdk.auth.AuthActivity"
android:configChanges="orientation|keyboardHidden|navigation"
android:exported="false"
android:screenOrientation="behind" >
</activity>
<!-- alipay sdk end -->
<!-- QQ sdk end -->
<activity
android:name="com.tencent.connect.common.AssistActivity"
android:screenOrientation="portrait"
android:theme="@android:style/Theme.Translucent.NoTitleBar" />
<activity
android:name="com.tencent.tauth.AuthActivity"
android:launchMode="singleTask"
android:noHistory="true">
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="tencent100772260" />
</intent-filter>
</activity>
<!-- nfc -->
<activity
android:name="com.wepayplugin.nfc.ui.PayStartActivity"
android:configChanges="keyboardHidden|orientation|screenSize"
android:screenOrientation="behind"></activity>
<activity
android:name="com.wepayplugin.nfc.ui.SwiperCardActivity"
android:configChanges="keyboardHidden|orientation|screenSize"
android:screenOrientation="behind"></activity>
<activity
android:name="com.wepayplugin.nfc.ui.PayResultActivity"
android:configChanges="keyboardHidden|orientation|screenSize"
android:screenOrientation="behind"></activity>
<!--wechat-->
<activity
android:name="com.ipaynow.plugin.inner_plugin.wechat_plugin.activity.WeChatNotifyActivity"
android:configChanges="keyboardHidden|orientation|screenSize"
android:screenOrientation="behind"
android:theme="@android:style/Theme.NoDisplay" />
<!-- Polling Service -->
<service android:name="com.downjoy.service.PollingService">
<intent-filter>
<action android:name="action.downjoy.polling.service" />
</intent-filter>
</service>2.3.3 初始化SDK
2.3.3.1 获取参数
登录CP后台,获取初始化参数(如何查看参数?),其中初始化参数中的serverSeqNum为支付回调服务器序列号,该参数需要CP自定义,具体步骤详见配置服务器, 其中填入的服务器序列号即为serverSeqNum参数。
2.3.3.2 调用初始化接口
初始化Downjoy,获取实例,该方法必须在UI线程中初始化,不然会抛出异常,代码如下:
downjoy = Downjoy.getInstance(DemoActivity.this, MERCHANT_ID, APP_ID,
SERVER_SEQ_NUM, APP_KEY,new InitListener() {
@Override
public void onInitComplete() {
//此处CP请根据自己的逻辑判断是否调用登陆
//注意:登录方法只能在收到初始化回调后调用,否则会造成参数错误等问题
downjoyLogin();
}
});
// 设置登录成功后属否显示当乐SDK的悬浮按钮
// 注意:
// 此处应在调用登录接口之前设置,默认值是true,即登录成功后自动显示当乐SDK的悬浮按钮。
// 如果此处设置为false,登录成功后,不显示当乐SDK的悬浮按钮。
// 正常使用悬浮按钮还需要实现两个函数,onResume、onPause
downjoy.showDownjoyIconAfterLogined(true);
//设置悬浮窗显示位置
downjoy.setInitLocation(Downjoy.LOCATION_RIGHT_CENTER_VERTICAL);
//设置全局注销监听器,浮标中的注销也能接收到回调
downjoy.setLogoutListener(mLogoutListener);2.3.4 登录接口
说明:登录接口需要收到初始化成功回调之后才能调用,而不是初始化之后就调用,否则会出现登录出现参数错误的情况。
该方法需要在UI线程中调用
.openLoginDialog(DemoActivity., CallbackListener<LoginInfo>() { (status, LoginInfo data) { (status == CallbackStatus.&& data != ) { String umid = data.getUmid(); String username = data.getUserName(); String nickname = data.getNickName(); String token = data.getToken(); String checkTokenUrl = data.getCheckTokenUrl(); Util.(DemoActivity., + data.toString()); } (status == CallbackStatus.&& data != ) { Util.(DemoActivity., + data.getMsg()); } (status == CallbackStatus.&& data != ) { Util.(DemoActivity., + data.getMsg()); } } });2.3.5 接入悬浮窗
2.3.5.1 确认manifest中的权限拷贝
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />2.3.5.2 设置登录后显示悬浮窗
downjoy.showDownjoyIconAfterLogined(true);初始化时有设置此行代码,请阅读相关注释
2.3.5.3 接入生命周期
() { .onResume(); (!= ) { .resume(DemoActivity.); } } () { .onPause(); (!= ) { .pause(); } } () { .onDestroy(); (!= ) { .destroy(); = ; } }2.3.5.4 接入个人中心
如果游戏不愿意接入悬浮窗,可以接入个人中心,代码如下:
downjoy.openMemberCenterDialog(DemoActivity.this);
2.3.6 支付接口
(money) { (== ) ; String productName = ; String body = (); String transNo = (); String serverName = ; String playerName = ; .openPaymentDialog(, money, productName, body, transNo, serverName, playerName, CallbackListener<String>() { (status, String data) { (status == CallbackStatus.) { Util.(DemoActivity., + data); } (status == CallbackStatus.) { Util.(DemoActivity., + data); } (status == CallbackStatus.) { Util.(DemoActivity., + data); } } }); }2.3.7 注销接口
downjoy.logout(DemoActivity.this);2.3.8 游戏退出
重写Activity的onKeyDown方法
(keyCode, KeyEvent event) { (keyCode == KeyEvent.) { downjoyExit(); } .onKeyDown(keyCode, event); }
() { (== ) ; .openExitDialog(, CallbackListener<String>() { (status, String data) { (CallbackStatus.== status) { finish(); } (CallbackStatus.== status) { Util.(getBaseContext(), + data); } } }); ; }2.3.9 屏幕方向改变接入
如果游戏的屏幕方向可以横竖屏切换,需要接入onConfigurationChanged方法,示例代码如下:
(Configuration newConfig) { .onConfigurationChanged(newConfig); (!= ) { .onConfigurationChanged(newConfig); } }2.3.10 切换服务器序列号
.setServerSeqNum();
Signature *Annotation* InnerClasses,SourceFile,LineNumberTable EnclosingMethod com.tencent.** class com.tencent.**{} com.alipay.** com.ut.** com.ta.** org.json.alipay.** class com.alipay.**{} class com.ut.**{} class com.ta.**{} class org.json.alipay.**{} com.UCMobile.** com.unionpay.** cn.gov.pbc.** class com.UCMobile.PayPlugin.**{} class com.unionpay.**{} class cn.gov.pbc.**{} com.wepayplugin.** class com.wepayplugin.nfc.**{} class com.wepayplugin.nfcstd.**{} com.downjoy.** class com.downjoy.**{} com.google.** class com.google.**{} android.support.** class android.support.**{} com.xqt.now.paysdk.** com.ipaynow.plugin.** class com.xqt.now.paysdk.**{} class com.ipaynow.plugin.**{}