[TOC]
开发环境需求
目前只支持Android Studio Demo
配置权限,默认权限已经包含
```xml
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
<uses-permission android:name="android.permission.SEND_SMS" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_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.WRITE_SETTINGS" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.GET_TASKS" />
<uses-permission android:name="android.permission.READ_SMS" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
```
        如果需要额外权限,请在module app的AndroidManifest.xml 中添加
```xml
allprojects { repositories { maven { url "https://github.com/KuaiFaMaster/kfsdk/raw/master" } jcenter() } }
java
        dependencies {
        compile 'com.kf.framework:kfsdk:latest.integration@aar'
        compile 'com.kf.framework:kf-utils:latest.integration@aar'
        compile 'com.kf.framework:volleyplus:latest.integration@aar'
        compile 'net.gameworks.gameplatform:kuaifa-sdk-login-pay-KFZS:latest.integration@aar'
    
} ```
请在module app的AndroidManifest.xml 中按如下配置
```xml <application android:name="com.kf.framework.KFApplication" android:allowBackup="true">
```
如果有自定义Application请在自定义的Application继承KFApplication
```java @Override public void onCreate() { super.onCreate();
@Override public void attachBaseContext(Context base) { super.attachBaseContext(base);
@Override public void onConfigurationChanged(Configuration config) { super.onConfigurationChanged(config); } ```
添加meta-data 文件
    <meta-data
        android:name="HJR_CHANNEL"
        android:value="\ 0103" />
    <meta-data
        android:name="KF_GAMEKEY"
        android:value="xxxxxxx" />
注:KF_GAMEKEY 的值 需要向快发官方申请参数
[static]
HJR_GAMEKEY = c39697dd79df766cbf0834e1471cc1ae [dynamic]
debugMode = 0 //#日志开关 0:打开日志 1:关闭日志
channel = matrix
PluginUser= UserKF
PluginIAP= PayKF
PluginStatistic= StatisticKF****
screen_oriention = 1 //0:横屏 1:竖屏
PluginIsKF=1 //0 开启快发官方SDK 1 关闭开发官方SDK 测试支付时 可以设置为1
```java**** @Override protected void onResume() { SDKPluginWrapper.onResume(); super.onResume(); }
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    SDKPluginWrapper.onActivityResult(requestCode, resultCode, data);
    super.onActivityResult(requestCode, resultCode, data);
}
@Override
protected void onPause() {
    SDKPluginWrapper.onPause();
    super.onPause();
}
@Override
protected void onRestart() {
    SDKPluginWrapper.onRestart();
    super.onRestart();
}
@Override
public void onBackPressed() {
    SDKPluginWrapper.onRestart();
    super.onBackPressed();
}
@Override
protected void onNewIntent(Intent intent) {
    SDKPluginWrapper.onNewIntent(intent);
    super.onNewIntent(intent);
}
@Override
protected void onStop() {
    SDKPluginWrapper.onStop();
    super.onStop();
}
@Override
protected void onDestroy() {
    SDKPluginWrapper.onDestroy();
    super.onDestroy();
}
@Override
protected void onConfigurationChanged(Configuration newConfig){
    SDKPluginWrapper.onConfigurationChanged(newConfig);
    super.onConfigurationChanged(newConfig);
}
```
初始化都在 Activity 的方法 onCreate中
java
            KFSDK.getInstance().init(this);
init() 要求传入上下文是Activity的上下文
java
            KFSDKUser.getInstance().login();
java
            KFSDKUser.getInstance().logout();
java
            KFSDKUser.getInstance().exit();
java
            KFSDKUser.getInstance().changeAccout();
java
            KFSDKUser.getInstance().getRealnameStatus();
java
            KFSDKUser.getInstance().authRealName();
java
            KFSDKUser.getInstance().setListener(new KFSDKListener() {
            @Override
            public void onCallBack(int code, String msg) {
            //这里响应用户模块的回调
            }
            }
            );
用户模块回调参数表
|参数|描述|
        |:--|:--|
        |UserWrapper.ACTION_RET_INIT_SUCCESS|渠道SDK初始化成功|
            |UserWrapper.ACTION_RET_INIT_FAIL|渠道SDK初始化失败|
        |UserWrapper.ACTION_RET_LOGIN_SUCCESS|登录成功|
            |UserWrapper.ACTION_RET_LOGIN_FAIL|登录失败|
                |UserWrapper.ACTION_RET_LOGOUT_SUCCESS|登出成功|
            |UserWrapper.ACTION_RET_LOGOUT_FAIL|登出失败|
        |UserWrapper.ACTION_RET_CHANGE_ACCOUNT_SUCCESS|切换帐户成功|
                |UserWrapper.ACTION_RET_CHANGE_ACCOUNT_FAIL|切换帐户失败|
        |UserWrapper.ACTION_RET_EXIT_SUCCESS|退出成功|
            |UserWrapper.ACTION_RET_EXIT_FAIL|退出失败|
            |UserWrapper.ACTION_RET_AUTH_REALNAME_FAIL|实名失败|
            |UserWrapper.ACTION_RET_AUTH_REALNAME_SUCCESS|获取实名信息成功(status:0未实名,1未成年,2成年; id_number:身份证号; real_name:姓名)|
```java
        HashMap<String, Object> params = new HashMap<String, Object>();
        params.put(Params.Pay.KEY_AMOUNT, "1");//购买商品金额
            params.put(Params.Pay.KEY_ORDER_NO, "");//订单号
            params.put(Params.Pay.KEY_SERVER_ID, "1");//服务器ID
            params.put(Params.Pay.KEY_PRODUCT_ID, "1");//购买商品的商品ID
            params.put(Params.Pay.KEY_PRODUCT_NUM, "1");//购买商品的数量
            params.put(Params.Pay.KEY_GAMEEXTEND, "");//额外参数,没有传""
                params.put(Params.Pay.KEY_NOTIFY_URL, "");//应用方提供的支付结果通知uri,没有先传任意测试字符串
                params.put(Params.Pay.KEY_CONIN_NAME, "金币");
                params.put(Params.Pay.KEY_RATE, "10");
            params.put(Params.Pay.KEY_ROLE_ID, "1");
            params.put(Params.Pay.KEY_ROLE_NAME, "11");
            params.put(Params.Pay.KEY_ROLE_LEVEL, "1");
            params.put(Params.Pay.KEY_PRODUCT_NAME, "商品名字");
            params.put(Params.Pay.KEY_SERVER_NAME, "dd");//服务器ID
    KFSDKPay.getInstance().pay(params);
```
java
            String orderId = "1610139300002000";
            HashMap<String, Object> params = new HashMap<String, Object>();
            params.put(Params.Pay.KEY_PAY_ORDER_ID, orderId);
            KFSDKPay.getInstance().getOrderInfo(params);
java
            KFSDKPay.getInstance().setListener(new KFSDKListener() {
            @Override
            public void onCallBack(int code, String msg) {
            //这里响应支付的结果
            }
            }
            );
支付模块参数回调表
|参数|描述|
        |:--|:--|
        |PayWrapper.PAYRESULT_SUCCESS|支付成功|
            |PayWrapper.PAYRESULT_FAIL|支付失败|
        |PayWrapper.PAYRESULT_CANCEL|支付取消|
        |PayWrapper.PAYRESULT_NETWORK_ERROR|支付网络错误|
模块数据是一个个响应式变量,具体参照对应的对象表格
|变量|类型|描述|
        |:--|:--|:--|
        |KFSDKUser.getInstance().getOpenId();|String|OpenId|
        |KFSDKUser.getInstance().getUserId();|String|UserId|
        |KFSDKUser.getInstance().getCid();|String|cId|
        |KFSDKUser.getInstance().getToken();|String|Token|
        |KFSDKUser.getInstance().getUserName();|String|UserName|
|变量|类型|描述|
        |:--|:--|:--|
        |KFSDKPay.getInstance().getOrderNo();|String|订单号|
        |KFSDKPay.getInstance().getOrderStatus();|int|支付状态 0为成功,其他为失败|
        |KFSDKPay.getInstance().getOrderStatusMessage();|String|支付消息|
注:所有调用统计接口的参数都不能直接传中文,如是中文则需要base64encode处理一次
java
            
HashMap<String, String> params = new HashMap<>();
            
//用户标识:只用添加用户ID即可
            
params.put(Params.Statistic.KEY_ROLE_USERMARK, KFSDKUser.getInstance().userId + "@" + KFSDKUser.getInstance().getChannel());
            
params.put(Params.Statistic.KEY_ROLE_ID, testRoleID);
            
params.put(Params.Statistic.KEY_ROLE_SERVER_ID, testServerID);
            
params.put(Params.Statistic.KEY_ROLE_NAME, testRoleName);
            
// 服务器名称
            
params.put(Params.Statistic.KEY_ROLE_SERVER_NAME, testServerName);
            
// 角色等级
            
params.put(Params.Statistic.KEY_ROLE_LEVEL, testRoleLevel);
            
//角色等级
            
params.put(Params.Statistic.KEY_ROLE_GRADE, testRoleLevel);
            
KFSDKUser.getInstance().enterGame(params);
java
            
HashMap<String, String> params = new HashMap<String, String>();
            
params.put(Params.Statistic.KEY_ROLE_USERMARK, KFSDKUser.getInstance().getUserId() + "@"+KFSDKUser.getInstance().getChannel());
            
params.put(Params.Statistic.KEY_ROLE_ID, "1");
            
//角色账号
            
params.put(Params.Statistic.KEY_ROLE_USERID, "lewan10086");
            
// 角色等级
            
params.put(Params.Statistic.KEY_ROLE_LEVEL, "15");
            
// 服务器ID
            
params.put(Params.Statistic.KEY_ROLE_SERVER_ID, "2");
            
// 角色昵称
            
params.put(Params.Statistic.KEY_ROLE_NAME, "lewan10086");
            
//角色等级
            
params.put(Params.Statistic.KEY_ROLE_GRADE, "10");
            
// 服务器名称
            
params.put(Params.Statistic.KEY_ROLE_SERVER_NAME, "服务器名称");
            
KFSDKStatistic.getInstance().recordRoleUp(params);
java
            
HashMap<String, String> params = new HashMap<String, String>();
            
params.put(Params.Statistic.KEY_ROLE_USERMARK, KFSDKUser.getInstance().getUserId() + "@"+KFSDKUser.getInstance().getChannel());
            
//角色id
            
params.put(Params.Statistic.KEY_ROLE_ID, "1222");
            
// 角色账号
            
params.put(Params.Statistic.KEY_ROLE_USERID, "lewan10086");
            
// 角色等级
            
params.put(Params.Statistic.KEY_ROLE_LEVEL, "15");
            
// 角色昵称
            
params.put(Params.Statistic.KEY_ROLE_NAME, "角色昵称");
            
// 服务器id
            
params.put(Params.Statistic.KEY_ROLE_SERVER_ID, "2");
            
// 服务器名称
            
params.put(Params.Statistic.KEY_ROLE_SERVER_NAME, "服务器名称");
            
KFSDKStatistic.getInstance().recordRoleCreate(params);