安卓网游SDK文档

快速接入文档(适用于4.2.2及以下版本)

 1.申请merchantId、appId、appKey、serverSeqNum

申请指南参考:创建账号

参数说明: 
1. merchantId: :游戏厂商唯一对应标示,厂商认证通过时生成,用于SDK接入配置;
2. appId:单个游戏单个平台唯一对应标示,游戏创建审核通过时生成,用于SDK接入配置;
3. appKey:单个游戏单个平台唯一对应,游戏创建审核通过时生成,用于SDK接入配置;
4. serverSeqNum:支付回调服务器序列号,登录CP后台后添加服务器,服务器序号为该参数,自定义参数,一般从1开始。如何添加服务器?
5. 其它参数说明


说明: 文档中使用的代码在demo工程中都能找到。

2.接入流程

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,195demoappid-->
       <!--<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的悬浮按钮。
// 正常使用悬浮按钮还需要实现两个函数,onResumeonPause
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();

3.混淆

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.**{}