Browse Source

1、新增角色数据上报、退出接口
2、初始化权限处理优化
3、oppo渠道封装

fluty 5 years ago
parent
commit
d09f86e406
36 changed files with 889 additions and 562 deletions
  1. 66 53
      app/src/main/java/com/funcheer/channel/sdk/MainActivity.java
  2. 1 1
      fq_channel_mubao/src/main/java/com/fq/channel/sdk/SdkPluginDemo.java
  3. 1 1
      fq_channel_oppo/build.gradle
  4. BIN
      fq_channel_oppo/libs/gamesdk-20190910.jar
  5. 49 1
      fq_channel_oppo/src/main/AndroidManifest.xml
  6. BIN
      fq_channel_oppo/src/main/assets/nearme.apk
  7. BIN
      fq_channel_oppo/src/main/assets/nearme/oppo_game_service_202306.so
  8. BIN
      fq_channel_oppo/src/main/assets/opay_version
  9. 373 368
      fq_channel_oppo/src/main/java/com/fq/channel/sdk/SdkPluginOppo.java
  10. 0 3
      fq_channel_oppo/src/main/res/values/strings.xml
  11. 10 0
      fq_channel_oppo/src/main/res/values/styles.xml
  12. 2 1
      fq_plugin_api/src/main/assets/fqcfg
  13. 19 24
      fq_plugin_api/src/main/java/com/fq/channel/sdk/api/FqGame.java
  14. 48 56
      fq_plugin_api/src/main/java/com/fq/channel/sdk/api/FqGameHander.java
  15. 19 0
      fq_plugin_api/src/main/java/com/fq/channel/sdk/api/IExit.java
  16. 1 1
      fq_plugin_base/src/main/java/com/fq/channel/sdk/base/Constants/AppConfig.java
  17. 82 0
      fq_plugin_base/src/main/java/com/fq/channel/sdk/base/constants/ConstSet.java
  18. 1 1
      fq_plugin_base/src/main/java/com/fq/channel/sdk/base/Constants/FqCache.java
  19. 1 1
      fq_plugin_base/src/main/java/com/fq/channel/sdk/base/Constants/FqConfig.java
  20. 1 1
      fq_plugin_base/src/main/java/com/fq/channel/sdk/base/Constants/ResourceCfg.java
  21. 1 1
      fq_plugin_base/src/main/java/com/fq/channel/sdk/base/Exception/BaseException.java
  22. 1 1
      fq_plugin_base/src/main/java/com/fq/channel/sdk/base/Exception/NoSuchFunctionException.java
  23. 1 1
      fq_plugin_base/src/main/java/com/fq/channel/sdk/base/Exception/NullStringToEmptyAdapterFactory.java
  24. 1 1
      fq_plugin_base/src/main/java/com/fq/channel/sdk/base/Exception/StringNullAdapter.java
  25. 83 2
      fq_plugin_base/src/main/java/com/fq/channel/sdk/base/interfaces/FQPluginApi.java
  26. 11 0
      fq_plugin_base/src/main/java/com/fq/channel/sdk/base/interfaces/IPermissionRequestCallback.java
  27. 16 19
      fq_plugin_base/src/main/java/com/fq/channel/sdk/base/net/FqNetRequest.java
  28. 1 1
      fq_plugin_base/src/main/java/com/fq/channel/sdk/base/net/callback/BaseCallback.java
  29. 2 2
      fq_plugin_base/src/main/java/com/fq/channel/sdk/base/net/req/ParamsUtils.java
  30. 66 0
      fq_plugin_base/src/main/java/com/fq/channel/sdk/base/permission/PermissionManager.java
  31. 1 1
      fq_plugin_base/src/main/java/com/fq/channel/sdk/base/utils/AppInfoUtils.java
  32. 1 1
      fq_plugin_base/src/main/java/com/fq/channel/sdk/base/utils/FqLog.java
  33. 0 6
      fq_plugin_base/src/main/java/com/fq/channel/sdk/base/utils/Utils.java
  34. 5 1
      fq_plugin_core/src/main/java/com/fq/channel/sdk/core/JointManager.java
  35. 24 11
      fq_plugin_core/src/main/java/com/fq/channel/sdk/core/invoke/ApiPlugin.java
  36. 1 2
      fq_plugin_core/src/main/java/com/fq/channel/sdk/core/invoke/ApiReflectManager.java

+ 66 - 53
app/src/main/java/com/funcheer/channel/sdk/MainActivity.java

@@ -14,11 +14,14 @@ import android.widget.Toast;
 
 import com.example.fqchannelsdk.R;
 import com.fq.channel.sdk.api.FqGame;
+import com.fq.channel.sdk.api.IExit;
 import com.fq.channel.sdk.api.IResult;
 import com.fq.channel.sdk.api.bean.LoginInfo;
+import com.fq.channel.sdk.api.bean.PaymentInfo;
+import com.fq.channel.sdk.base.constants.ConstSet;
 import com.fq.channel.sdk.base.net.HttpManager;
 import com.fq.channel.sdk.base.net.callback.BaseCallback;
-import com.fq.channel.sdk.base.Exception.BaseException;
+import com.fq.channel.sdk.base.exception.BaseException;
 import com.fq.channel.sdk.base.utils.FqLog;
 
 import org.json.JSONException;
@@ -190,48 +193,58 @@ public class MainActivity extends Activity implements View.OnClickListener {
     public void charge() {
 
         //get price
-//        String priceString = ((EditText)findViewById(getResourceId("fq_charge_price",
-//                "id"))).getText().toString();
-//        if (TextUtils.isEmpty(priceString)){
-//            showResult("请先填入价格");
-//            return;
-//        }
-//
-//        float price = Float.parseFloat(priceString);
-//        Log.d(TAG,"price : "+price);
-//        PaymentInfo paymentInfo = new PaymentInfo();
-//        paymentInfo.setOrderAmount("1");            //订单金额           必须字段
-//        paymentInfo.setSubject("1元宝");              //商品名             必须字段
-//        paymentInfo.setRoleName("Hello");           //角色名             必须字段
-//        paymentInfo.setCpBillNo("cp_order001");    //CP订单号           必须字段
-////        paymentInfo.setUid(uid);                    //登录时成功拿到的UID  必须字段
-//        paymentInfo.setServerId("1");               //区服ID             必须字段
-//        paymentInfo.setExtraInfo("FqGameSdk");      //拓展信息            必须字段
-//        paymentInfo.setRemark("remark");            //订单备注            非必须字段
-//        paymentInfo.setRoleLevel("5");              //角色等级            非必须字段
-//        paymentInfo.setRoleId("Role_001");          //订单备注            非必须字段
-//        paymentInfo.setPartyName("帮派");            //帮派               非必须字段
-//        paymentInfo.setServerName("区服名");         //区服名              非必须字段
-//
-//
-//        FqGame.pay(MainActivity.this,paymentInfo, new FqGame.IResult<String>() {
-//            @Override
-//            public void onSuccess(String s) {
-//                Log.i(TAG,"pay success: "+s);
-//            }
-//
-//            @Override
-//            public void onFail(String failMsg) {
-//                Log.i(TAG,"pay fail:"+failMsg);
-//            }
-//        });
-    }
+        String priceString = ((EditText)findViewById(getResourceId("fq_charge_price",
+                "id"))).getText().toString();
+        if (TextUtils.isEmpty(priceString)){
+            showResult("请先填入价格");
+            return;
+        }
 
-    private void getChannelId() {
-    }
+        float price = Float.parseFloat(priceString);
+        Log.d(TAG,"price : "+price);
+        PaymentInfo paymentInfo = new PaymentInfo();
+        paymentInfo.setOrderAmount("1");            //订单金额           必须字段
+        paymentInfo.setSubject("1元宝");              //商品名             必须字段
+        paymentInfo.setRoleName("Hello");           //角色名             必须字段
+        paymentInfo.setCpBillNo("cp_order001");    //CP订单号           必须字段
+//        paymentInfo.setUid(uid);                    //登录时成功拿到的UID  必须字段
+        paymentInfo.setServerId("1");               //区服ID             必须字段
+        paymentInfo.setExtraInfo("FqGameSdk");      //拓展信息            必须字段
+        paymentInfo.setRemark("remark");            //订单备注            非必须字段
+        paymentInfo.setRoleLevel("5");              //角色等级            非必须字段
+        paymentInfo.setRoleId("Role_001");          //订单备注            非必须字段
+        paymentInfo.setPartyName("帮派");            //帮派               非必须字段
+        paymentInfo.setServerName("区服名");         //区服名              非必须字段
+
+
+        FqGame.pay(MainActivity.this,paymentInfo, new IResult<String>() {
+            @Override
+            public void onSuccess(String s) {
+                Log.i(TAG,"pay success: "+s);
+            }
 
+            @Override
+            public void onFail(String failMsg) {
+                Log.i(TAG,"pay fail:"+failMsg);
+            }
+        });
+    }
 
     private void exit() {// 退出接口
+        FqGame.exit(MainActivity.this, new IExit() {
+            @Override
+            public void onExit() {
+                //退出游戏
+                android.os.Process.killProcess(android.os.Process.myPid());
+                System.exit(0);
+            }
+
+            @Override
+            public void onNoConfirmDialogExit() {
+                //渠道不存在退出界面,此处游戏必须弹出自己的退出确认框。
+                showGameExitView();
+            }
+        });
     }
 
     private void showGameExitView() {
@@ -292,20 +305,20 @@ public class MainActivity extends Activity implements View.OnClickListener {
          * 8、退出游戏,data type为7;
          =======================================================*/
         Bundle staticsData = new Bundle();
-//        staticsData.putString(ConstSet.DATA_KEY_ROLE_ID, "111");
-//        staticsData.putString(ConstSet.DATA_KEY_ROLE_NAME, "战士");
-//        staticsData.putString(ConstSet.DATA_KEY_ROLE_LEVEL, "65");
-//        staticsData.putString(ConstSet.DATA_KEY_SERVER_ID, "11");
-//        staticsData.putString(ConstSet.DATA_KEY_SERVER_NAME, "服务器");
-//        staticsData.putString(ConstSet.DATA_KEY_BALANCE, "102");
-//        staticsData.putString(ConstSet.DATA_KEY_VIP_LEVEL, "2");
-//        staticsData.putString(ConstSet.DATA_KEY_PARTY_NAME, "水果派");
-//        staticsData.putLong(ConstSet.DATA_KEY_ROLE_CREATE_TIME, System.currentTimeMillis() / 1000);
-//        staticsData.putLong(ConstSet.DATA_KEY_ROLE_LEVEL_TIME, System.currentTimeMillis() / 1000);
-//        staticsData.putString(ConstSet.DATA_KEY_ZONE_ID, "1");
-//        staticsData.putString(ConstSet.DATA_KEY_ZONE_NAME, "阿狸一区");
-//        staticsData.putInt(ConstSet.DATA_KEY_DATA_TYPE, dataReportType);
-
+        staticsData.putString(ConstSet.DATA_KEY_ROLE_ID, "111");
+        staticsData.putString(ConstSet.DATA_KEY_ROLE_NAME, "战士");
+        staticsData.putString(ConstSet.DATA_KEY_ROLE_LEVEL, "65");
+        staticsData.putString(ConstSet.DATA_KEY_SERVER_ID, "11");
+        staticsData.putString(ConstSet.DATA_KEY_SERVER_NAME, "服务器");
+        staticsData.putString(ConstSet.DATA_KEY_BALANCE, "102");
+        staticsData.putString(ConstSet.DATA_KEY_VIP_LEVEL, "2");
+        staticsData.putString(ConstSet.DATA_KEY_PARTY_NAME, "水果派");
+        staticsData.putLong(ConstSet.DATA_KEY_ROLE_CREATE_TIME, System.currentTimeMillis() / 1000);
+        staticsData.putLong(ConstSet.DATA_KEY_ROLE_LEVEL_TIME, System.currentTimeMillis() / 1000);
+        staticsData.putString(ConstSet.DATA_KEY_ZONE_ID, "1");
+        staticsData.putString(ConstSet.DATA_KEY_ZONE_NAME, "阿狸一区");
+        staticsData.putInt(ConstSet.DATA_KEY_DATA_TYPE, dataReportType);
+        FqGame.setRoleInfo(staticsData);
 //        Idsfq.setExtraBundle(staticsData);
     }
 

+ 1 - 1
fq_channel_mubao/src/main/java/com/fq/channel/sdk/SdkPluginDemo.java

@@ -247,7 +247,7 @@ public class SdkPluginDemo extends FQPluginApi {
      *
      * @param data
      */
-    public void setExtraBundle(Bundle data) {
+    public void setRoleInfo(Bundle data) {
         if (null == data) {
             data = new Bundle();
         }

+ 1 - 1
fq_channel_oppo/build.gradle

@@ -24,7 +24,7 @@ android {
 }
 
 dependencies {
-    implementation fileTree(dir: 'libs', include: ['*.jar'])
+    implementation fileTree(include: ['*.jar'], dir: 'libs')
 
     api project(':fq_plugin_base')
 }

BIN
fq_channel_oppo/libs/gamesdk-20190910.jar


+ 49 - 1
fq_channel_oppo/src/main/AndroidManifest.xml

@@ -1,2 +1,50 @@
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.fq.channel.sdk" />
+    package="com.fq.channel.sdk" >
+
+    <uses-permission android:name="android.permission.INTERNET" />
+    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
+    <uses-permission android:name="android.permission.CHANGE_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.READ_EXTERNAL_STORAGE" />
+    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
+    <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
+    <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
+    <uses-permission android:name="android.permission.GET_TASKS" />
+    <uses-permission android:name="android.permission.GET_ACCOUNTS" />
+    <uses-permission android:name="android.permission.USE_CREDENTIALS" />
+    <uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />
+
+    <application>
+        <!-- nearme game sdk config goes here -->
+        <meta-data android:name="debug_mode" android:value="true" />    <!-- 日志开关,发布时候设置为false -->
+        <meta-data android:name="is_offline_game" android:value="false" />  <!-- true:单机游戏   false:网游 -->
+        <meta-data android:name="app_key" android:value="71880d6376c347de88674f485f6ea446" />  <!--appKey,游戏上线时请务必替换成游戏自身的appkey-->
+
+        <activity
+            android:name="com.nearme.game.sdk.component.proxy.ProxyActivity"
+            android:configChanges="keyboardHidden|orientation|screenSize"
+            android:theme="@style/Theme_Dialog_Custom"
+            android:process=":gcsdk">
+        </activity>
+        <service
+            android:name="com.nearme.game.sdk.component.proxy.ProxyApiService"
+            android:process=":gcsdk"
+            android:priority="1000">
+        </service>
+        <receiver
+            android:name="com.nearme.game.sdk.component.proxy.ProxyUserCenterOperateReceiver"
+            android:exported="true"
+            android:process=":gcsdk" >
+            <intent-filter>
+                <action android:name="com.oppo.usercenter.account_login" />
+                <action android:name="com.oppo.usercenter.account_logout" />
+                <action android:name="com.oppo.usercenter.modify_name" />
+                <action android:name="com.usercenter.action.receiver.account_login" />
+                <action android:name="com.heytap.usercenter.account_logout" />
+            </intent-filter>
+        </receiver>
+        <!-- nearme game sdk config end -->
+    </application>
+
+</manifest>

BIN
fq_channel_oppo/src/main/assets/nearme.apk


BIN
fq_channel_oppo/src/main/assets/nearme/oppo_game_service_202306.so


BIN
fq_channel_oppo/src/main/assets/opay_version


+ 373 - 368
fq_channel_oppo/src/main/java/com/fq/channel/sdk/SdkPluginOppo.java

@@ -13,397 +13,402 @@ import android.util.Log;
 import android.view.KeyEvent;
 import android.widget.Toast;
 
+import com.fq.channel.sdk.base.constants.FqConfig;
 import com.fq.channel.sdk.base.interfaces.FQPluginApi;
 import com.fq.channel.sdk.base.interfaces.PluginResult;
 import com.fq.channel.sdk.base.interfaces.PluginResultHandler;
 import com.fq.channel.sdk.base.utils.FqLog;
+import com.nearme.game.sdk.GameCenterSDK;
+import com.nearme.game.sdk.callback.ApiCallback;
+import com.nearme.game.sdk.callback.GameExitCallback;
+import com.nearme.game.sdk.common.model.biz.PayInfo;
+import com.nearme.game.sdk.common.model.biz.ReportUserGameInfoParam;
+import com.nearme.platform.opensdk.pay.PayResponse;
 
+import org.json.JSONException;
+import org.json.JSONObject;
+
+import java.util.HashMap;
 import java.util.Map;
 
 public class SdkPluginOppo extends FQPluginApi {
 
-	private static final String TAG = "FQSDK_LOGSdkPluginOppo";
-
-	/**
-	 * 数据统计
-	 */
-	private int dataType;
-	private String roleId,roleName,roleLevel,zoneId,zoneName,serverId,serverName,balance,vipLevel,partyName;
-
-	/**
-	 * 初始化
-	 */
-	@Override
-	public void init(Context activity,final PluginResultHandler handler) {
-		FqLog.i(TAG, "init");
-		handler.onHandlePluginResult(new PluginResult(
-				PluginResult.Status.OK));
-	}
-
-	/**
-	 * 登录
-	 */
-	@Override
-	public void login(final Context activity, final PluginResultHandler handler) {
-		FqLog.i(TAG, "login ");
-
-		Builder builder = new Builder(activity);
-        builder.setTitle("登录");
-        builder.setMessage("请选择登录操作");
-        builder.setCancelable(false);
-        builder.setPositiveButton("确认", new DialogInterface.OnClickListener() {
-            public void onClick(DialogInterface dialog, int which) {
-
-//            	//登陆乐逗服务器:
-//        		String path = "sns/ChannelLogin?channel_id=" + IdsLingdoCache.get().getChannelId()  //渠道ID
-//        				+ "&channel_en_name="+ "test"   //测试参数【必须】
-//        				+ "&channel_version="+ "1.0"   //测试参数【必须】
-//        				+ "&sign="+ "6d5c4bdc86f7d8cf"   //测试参数【必须】
-//        				+ "&imei="+ "862845022982883"   // 移动设备的电子串号
-//        				+ "&udid=" + "00000000-3dc7-ef39-331c-0c2b0033c587"  //设备标识
-//        				+ "&uid=" + "34536434645645"
-//        				+ "&token=" + "7f34536434645645";
-//
-//        		HashMap<String, String> loginAuthData = new HashMap<String, String>(1);
-//        		loginAuthData.put(ApiPluginConstants.PARAMS_LOGIN_OAUTH_URL, path);
-				handler.onHandlePluginResult(new PluginResult(
-						PluginResult.Status.OK,"登录成功"));
-        		dialog.dismiss();
-            }
-        });
-        builder.setNeutralButton("失败", new DialogInterface.OnClickListener() {
-            public void onClick(DialogInterface dialog, int which) {
-				handler.onHandlePluginResult(new PluginResult(
-						PluginResult.Status.ERROR,"登录失败"));
-            	dialog.dismiss();
+    private static final String TAG = "SdkPluginOppo";
+
+    /**
+     * 数据统计
+     */
+    private int dataType;
+    private String roleId, roleName, roleLevel, zoneId, zoneName, serverId, serverName, balance, vipLevel, partyName;
+
+    /**
+     * 初始化
+     */
+    @Override
+    public void init(Context activity, final PluginResultHandler handler) {
+        FqLog.i(TAG, "init");
+        String secret = (String) FqConfig.get().get("oppo_gameSecret");
+        if (null != handler && secret != null) {
+            GameCenterSDK.init(secret, activity);
+            initFqSdkSuccess(handler);
+        }
+    }
+
+    /**
+     * 登录
+     */
+    @Override
+    public void login(final Context activity, final PluginResultHandler handler) {
+        FqLog.i(TAG, "login ");
+
+        GameCenterSDK.getInstance().doLogin(activity, new ApiCallback() {
+            @Override
+            public void onSuccess(String content) {
+                FqLog.i(TAG, "login success: " + content);
+                GameCenterSDK.getInstance().doGetTokenAndSsoid(new ApiCallback() {
+
+                    @Override
+                    public void onSuccess(String resultMsg) {
+                        FqLog.i(TAG, "doGetTokenAndSsoid->onSuccess: " + resultMsg);
+                        try {
+                            JSONObject json = new JSONObject(resultMsg);
+                            String token = json.getString("token");
+                            String ssoid = json.getString("ssoid");
+                            String url = null;
+//                            HashMap<String, String> loginAuthData = new HashMap<String, String>(
+//                                    1);
+//                            String udid = ContextUtil.getUUID(context);
+//                            String nudid = UDIDUtil.getUdid(context);
+//                            String channelId = IdsLingdoCache.get().getChannelId();
+//                            String imei = ContextUtil.getIMEI(context);
+//                            if(IdsLingdoCache.get().getIsUnify()){
+//                                loginAuthData.put("token", URLEncoder.encode(token));
+//                                loginAuthData.put("ssoid", ssoid);
+//                                loginAuthData.put("ssoi", ssoid);
+//                                loginAuthData.put("udid", udid);
+//                                loginAuthData.put("nudid", nudid);
+//                                loginAuthData.put("channel_id", channelId);
+//                                loginAuthData.put("imei", imei);
+//                                loginAuthData.put("type", "5");// 渠道登录
+//                                loginAuthData.put("login_type", "2"); // 游客登陆传1, 渠道登陆传2
+//                                loginAuthData.put("loginInterface", "channel_login/OppoLogin");
+//                            }else {
+
+                        } catch (JSONException e) {
+                            loginFqSdkError(handler, e.getMessage());
+                        }
+                    }
+
+                    @Override
+                    public void onFailure(String content, int resultCode) {
+                        loginFqSdkError(handler, content);
+                    }
+                });
             }
-        });
-        builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {
-            public void onClick(DialogInterface dialog, int which) {
-				handler.onHandlePluginResult(new PluginResult(
-						PluginResult.Status.CANCEL));
-            	dialog.dismiss();
+
+            @Override
+            public void onFailure(String resultMsg, int resultCode) {
+                loginFqSdkError(handler, resultMsg);
             }
         });
-        builder.setOnKeyListener(new OnKeyListener() {
-
-			@Override
-			public boolean onKey(DialogInterface dialog, int keyCode, KeyEvent event) {
-				if (keyCode == KeyEvent.KEYCODE_BACK) {
-					handler.onHandlePluginResult(new PluginResult(
-							PluginResult.Status.CANCEL));
-	            	dialog.dismiss();
-	            	return true;
-		        }
-            	return false;
-			}
-		});
-        builder.create().show();
-	}
-
-	@Override
-	public void pay(final Context activity, final Map<String, Object> map,
-			final PluginResultHandler handler) {
-		FqLog.i(TAG, "pay map:"+ (map != null?map.toString():""));
-
-		Builder builder = new Builder(activity);
-        builder.setTitle("支付");
-        builder.setMessage("请选择支付操作");
-        builder.setCancelable(false);
-        builder.setPositiveButton("确认", new DialogInterface.OnClickListener() {
-            public void onClick(DialogInterface dialog, int which) {
-				handler.onHandlePluginResult(new PluginResult(
-						PluginResult.Status.OK));
-        		dialog.dismiss();
+    }
+
+    @Override
+    public void pay(final Context context, final Map<String, Object> map,
+                    final PluginResultHandler handler) {
+        FqLog.i(TAG, "pay map:" + (map != null ? map.toString() : ""));
+
+//        final PayInfo payInfo = new PayInfo(
+//                orderId + "",
+//                orderId + "__" + game_id + "__" + paramType, price * 100); //分为单位,转换成为元
+//        payInfo.setProductDesc(productDes);
+//        payInfo.setProductName(productName);
+//        payInfo.setCallbackUrl("");
+//        GameCenterSDK.getInstance().doPay(context, payInfo, new ApiCallback() {
+//
+//            @Override
+//            public void onSuccess(String resultMsg) {
+//                FqLog.i(TAG, "onSuccess");
+//                if (handler != null) {
+//                    payFqSdkSuccess(handler);
+//                }
+//            }
+//
+//            @Override
+//            public void onFailure(String resultMsg, int resultCode) {
+//                FqLog.i(TAG, "onFailure:"+resultMsg);
+//                if (PayResponse.CODE_CANCEL != resultCode) {
+//                    payFqSdkError(handler);
+//                } else {
+//                    // 取消支付处理
+//                    payFqSdkCancel(handler);
+//                }
+//            }
+//        });
+    }
+
+    /**
+     * 退出
+     *
+     * @param context
+     * @param prh
+     */
+    public void exit(Context context,final PluginResultHandler prh) {
+        FqLog.i(TAG, "exit");
+        GameCenterSDK.getInstance().onExit((Activity) context, new GameExitCallback() {
+
+            @Override
+            public void exitGame() {
+                FqLog.i(TAG, "exitGame");
+                if (null != prh) {
+                    prh.onHandlePluginResult(new PluginResult(
+                            PluginResult.Status.OK));
+                }
             }
         });
-        builder.setNeutralButton("失败", new DialogInterface.OnClickListener() {
+    }
+
+    /**
+     * 注销
+     */
+    public void logout(final Context context, final PluginResultHandler cb) {
+        Log.d(TAG, "logout");
+
+        Builder builder = new Builder(context);
+        builder.setTitle("注销");
+        builder.setMessage("是否注销?");
+        builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
+
+            @Override
             public void onClick(DialogInterface dialog, int which) {
-				handler.onHandlePluginResult(new PluginResult(
-						PluginResult.Status.ERROR));
-            	dialog.dismiss();
+                Log.d(TAG, "注销成功");
+                cb.onHandlePluginResult(new PluginResult(
+                        PluginResult.Status.OK));
             }
         });
         builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {
+
+            @Override
             public void onClick(DialogInterface dialog, int which) {
-				handler.onHandlePluginResult(new PluginResult(
-						PluginResult.Status.CANCEL));
-            	dialog.dismiss();
+                Log.d(TAG, "注销失败");
+                cb.onHandlePluginResult(new PluginResult(
+                        PluginResult.Status.ERROR));
             }
         });
-        builder.setOnKeyListener(new OnKeyListener() {
-
-			@Override
-			public boolean onKey(DialogInterface dialog, int keyCode, KeyEvent event) {
-				if (keyCode == KeyEvent.KEYCODE_BACK) {
-					handler.onHandlePluginResult(new PluginResult(
-							PluginResult.Status.CANCEL));
-	            	dialog.dismiss();
-	            	return true;
-		        }
-            	return false;
-			}
-		});
-        builder.create().show();
-	}
-
-	/**
-	 * 退出
-	 * @param context
-	 * @param prh
-	 */
-	public void exit(Context context,PluginResultHandler prh){
-		Log.d(TAG, "exit");
-
-		prh.onHandlePluginResult(new PluginResult(
-				PluginResult.Status.CANCEL));
-	}
-
-	/**
-	 * 注销
-	 */
-	public void logout(final Context context,final PluginResultHandler cb){
-		Log.d(TAG, "logout");
-
-		Builder builder = new Builder(context);
-		builder.setTitle("注销");
-		builder.setMessage("是否注销?");
-		builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
-
-			@Override
-			public void onClick(DialogInterface dialog, int which) {
-				Log.d(TAG, "注销成功");
-				cb.onHandlePluginResult(new PluginResult(
-						PluginResult.Status.OK));
-			}
-		});
-		builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {
-
-			@Override
-			public void onClick(DialogInterface dialog, int which) {
-				Log.d(TAG, "注销失败");
-				cb.onHandlePluginResult(new PluginResult(
-						PluginResult.Status.ERROR));
-			}
-		});
-		builder.show();
-	}
-
-	@Override
-	public void changeAccount(Activity activity, final PluginResultHandler prh) {
-		Log.d(TAG, " changeAccount ");
-
-		Builder builder = new Builder(activity);
-		builder.setTitle("切换账号");
-		builder.setMessage("请选择切换账号操作");
-		builder.setCancelable(false);
-		builder.setPositiveButton("确认", new DialogInterface.OnClickListener() {
-			public void onClick(DialogInterface dialog, int which) {
-
-				dialog.dismiss();
-			}
-		});
-		builder.setNeutralButton("失败", new DialogInterface.OnClickListener() {
-			public void onClick(DialogInterface dialog, int which) {
-				dialog.dismiss();
-			}
-		});
-		builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {
-			public void onClick(DialogInterface dialog, int which) {
-				dialog.dismiss();
-			}
-		});
-		builder.setOnKeyListener(new OnKeyListener() {
-
-			@Override
-			public boolean onKey(DialogInterface dialog, int keyCode, KeyEvent event) {
-				if (keyCode == KeyEvent.KEYCODE_BACK) {
-					dialog.dismiss();
-					return true;
-				}
-				return false;
-			}
-		});
-
-
-		builder.create().show();
-	}
-
-
-	private void showTips(final String message){
-		Handler handler = new Handler(Looper.getMainLooper());
-		handler.post(new Runnable() {
-
-			@Override
-			public void run() {
+        builder.show();
+    }
+
+    @Override
+    public void changeAccount(Activity activity, final PluginResultHandler prh) {
+        FqLog.i(TAG, " changeAccount ");
+    }
+
+
+    private void showTips(final String message) {
+        Handler handler = new Handler(Looper.getMainLooper());
+        handler.post(new Runnable() {
+
+            @Override
+            public void run() {
 //				Activity activity = IdsLingdoCache.get().getCurrentActivity();
 //				if (null != activity){
 //					Toast.makeText(activity, message, Toast.LENGTH_SHORT).show();
 //				}
-			}
-		});
-	}
-
-	/**
-	 * 游戏角色信息
-	 * @param data
-	 */
-	public void setExtraBundle(Bundle data){
-		if(null == data){
-			data = new Bundle();
-		}
-		Log.i(TAG, "setExtraBundle data:"+data.toString());
-
-		roleName =  data.getString("roleName") ;// 角色名称
-		roleLevel =  data.getString("roleLevel") ;//当前登录的玩家角色等级
-		roleId =  data.getString("roleId") ;// 角色名称
-		serverId = data.getString("serverId"); //当前登录的游戏区服ID
-		serverName =  data.getString("serverName") ;//当前登录的游戏区服名称
-		balance =  data.getString("balance") ;//当前用户游戏币余额
-		vipLevel =  data.getString("vipLevel") ;//当前用户VIP等级
-		partyName =  data.getString("partyName") ;//当前用户所属帮派
-		zoneId  = data.getString("zoneId") ;//角色所在区域唯一标示
-		zoneName  = data.getString("zoneName") ;//角色所在区域名称
-		dataType  = data.getInt("dataType") ;//统计判断类型
-
-		StringBuffer reportData = new StringBuffer();
-		reportData.append("[");
-		reportData.append(" roleName:"+roleName);
-		reportData.append(" roleLevel:"+roleLevel);
-		reportData.append(" roleId:"+roleId);
-		reportData.append(" serverId:"+serverId);
-		reportData.append(" serverName:"+serverName);
-		reportData.append(" balance:"+balance);
-		reportData.append(" vipLevel:"+vipLevel);
-		reportData.append(" partyName:"+zoneId);
-		reportData.append(" zoneName:"+zoneName);
-		reportData.append(" dataType:"+dataType);
-		reportData.append("]");
-
-		switch(dataType){
-			case 0 ://创建角色
-				showTips("数据上报:创建角色 ");
-				Log.i(TAG, "reportData"+reportData);
-				break;
-
-			case 1 ://角色升级
-				showTips("数据上报:角色升级");
-				Log.i(TAG, "reportData"+reportData);
-				break;
-
-			case 2 :// 上传区服信息
-				showTips("数据上报:上传区服信息");
-				Log.i(TAG, "reportData"+reportData);
-				break;
-
-			case 3 ://登录
-				showTips("数据上报:登录");
-				Log.i(TAG, "reportData"+reportData);
-				break;
-
-			case 4 ://支付
-				showTips("数据上报:进入游戏");
-				Log.i(TAG, "reportData"+reportData);
-				break;
-
-			case 5 :// 选择服务器
-				showTips("数据上报:支付");
-				Log.i(TAG, "reportData"+reportData);
-				break;
-
-			case 6 ://退出游戏
-				showTips("数据上报:退出游戏");
-				Log.i(TAG, "reportData"+reportData);
-				break;
-
-			case 7 :// 备注(预留参数)
-				showTips("数据上报:退出游戏");
-				Log.i(TAG, "reportData"+reportData);
-				break;
-
-			default:
-				break;
-		}
-	}
-
-	@Override
-	public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
-
-	}
-
-
-	/**
-	 * 释放资源时调用,当用户退出界面或者游戏的时候,
-	 * 调用此接口,释放资源才允许退出!
-	 * @param context
-	 */
-	public void releaseSdkResource(Context context){
-		Log.i(TAG, "releaseSdkResource");
-
-		Toast.makeText(context, "释放SDK资源", Toast.LENGTH_SHORT).show();
-
-		try {
-			/**渠道存在退出界面,此处游戏必须调用,begin*/
-		    Intent startMain = new Intent(Intent.ACTION_MAIN);
-		    startMain.addCategory(Intent.CATEGORY_HOME);
-		    startMain.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
-		    context.startActivity(startMain);
-		    /**渠道存在退出界面,此处游戏必须调用,end*/
-		} catch (Exception e) {
-			Log.e(TAG, "releaseSdkResource 抛出异常!") ;
-		}
-	}
-
-	/**
-	 * 复写生命周期方法,里面调用
-	 */
-	public void onStart(Context context){
-		Log.i(TAG, "onStart");
-	}
-
-	public void onCreate(Context context, Bundle handler){
-		Log.i(TAG, "onCreate");
-	}
-
-	public void onRestart(Context context){
-		Log.i(TAG, "onRestart");
-	}
-
-	public void onResume(Context context){
-		Log.i(TAG, "onResume");
-	}
-
-	public void onPause(Context context){
-		Log.i(TAG, "onPause");
-	}
-
-	public void onStop(Context context){
-		Log.i(TAG, "onStop");
-	}
-
-	public void onDestroy(Context context){
-		Log.i(TAG, "onDestroy");
-	}
-
-	public void onActivityResult(int requestCode, int resultCode, Intent data){
-		Log.i(TAG, "onActivityResult requestCode:"+requestCode+" resultCode:"+resultCode+" data:"+data);
-	}
-
-	public void onNewIntent(Intent intent){
-		Log.i(TAG, "onNewIntent");
-	}
-
-	@Override
-	public void attachBaseContext(Context context) {
-
-	}
-
-	@Override
-	public void onApplicationCreate(Context context) {
-
-	}
-
-	public void onSaveInstanceState(Context context, Bundle outState){
-		Log.i(TAG, "onSaveInstanceState");
-	}
+            }
+        });
+    }
+
+    /**
+     * 游戏角色信息
+     *
+     * @param data
+     */
+    public void setRoleInfo(Bundle data) {
+        if (null == data) {
+            data = new Bundle();
+        }
+        Log.i(TAG, "setExtraBundle data:" + data.toString());
+
+        roleName = data.getString("roleName");// 角色名称
+        roleLevel = data.getString("roleLevel");//当前登录的玩家角色等级
+        roleId = data.getString("roleId");// 角色名称
+        serverId = data.getString("serverId"); //当前登录的游戏区服ID
+        serverName = data.getString("serverName");//当前登录的游戏区服名称
+        balance = data.getString("balance");//当前用户游戏币余额
+        vipLevel = data.getString("vipLevel");//当前用户VIP等级
+        partyName = data.getString("partyName");//当前用户所属帮派
+        zoneId = data.getString("zoneId");//角色所在区域唯一标示
+        zoneName = data.getString("zoneName");//角色所在区域名称
+        dataType = data.getInt("dataType");//统计判断类型
+
+        StringBuffer reportData = new StringBuffer();
+        reportData.append("[");
+        reportData.append(" roleName:" + roleName);
+        reportData.append(" roleLevel:" + roleLevel);
+        reportData.append(" roleId:" + roleId);
+        reportData.append(" serverId:" + serverId);
+        reportData.append(" serverName:" + serverName);
+        reportData.append(" balance:" + balance);
+        reportData.append(" vipLevel:" + vipLevel);
+        reportData.append(" partyName:" + zoneId);
+        reportData.append(" zoneName:" + zoneName);
+        reportData.append(" dataType:" + dataType);
+        reportData.append("]");
+
+        switch (dataType) {
+            case 0://创建角色
+                showTips("数据上报:创建角色 ");
+                Log.i(TAG, "reportData" + reportData);
+                break;
+
+            case 1://角色升级
+                showTips("数据上报:角色升级");
+                Log.i(TAG, "reportData" + reportData);
+                break;
+
+            case 2:// 上传区服信息
+                showTips("数据上报:上传区服信息");
+                Log.i(TAG, "reportData" + reportData);
+                break;
+
+            case 3://登录
+                showTips("数据上报:登录");
+                Log.i(TAG, "reportData" + reportData);
+                break;
+
+            case 4://支付
+                showTips("数据上报:进入游戏");
+                Log.i(TAG, "reportData" + reportData);
+                break;
+
+            case 5:// 选择服务器
+                showTips("数据上报:支付");
+                Log.i(TAG, "reportData" + reportData);
+                break;
+
+            case 6://退出游戏
+                showTips("数据上报:退出游戏");
+                Log.i(TAG, "reportData" + reportData);
+                break;
+
+            case 7:// 备注(预留参数)
+                showTips("数据上报:退出游戏");
+                FqLog.i(TAG, "reportData" + reportData);
+                break;
+            default:
+                break;
+        }
+
+        String roleId = data.getString("roleId");// 角色id
+        String roleName = data.getString("roleName");
+        String roleLevel = data.getString("roleLevel");// 角色等级
+        String zoneId = data.getString("zoneId");
+        String zoneName = data.getString("zoneName");
+        String serverId = data.getString("serverId");
+        String serverName = data.getString("serverName");
+        int dataType = data.getInt("dataType");
+        switch (dataType) {
+            //这个在登入的时候调用
+            case 3:
+                FqLog.i(TAG, "setExtraBundle: roleId:"+roleId+",roleName:"+roleName+",roleLevel:"+roleLevel+",serverId:"+serverId+",serverName:"+serverName+",chapter:Idreamsky");
+                GameCenterSDK.getInstance().doReportUserGameInfoData(new ReportUserGameInfoParam(roleId,roleName,Integer.valueOf(roleLevel),serverId,serverName,"Idreamsky",new HashMap<String, Number>()), new ApiCallback() {
+
+                    @Override
+                    public void onSuccess(String resultMsg) {
+                        FqLog.i(TAG, "数据上报成功!");
+                    }
+
+                    @Override
+                    public void onFailure(String resultMsg, int resultCode) {
+                        FqLog.i(TAG, "数据上报失败!");
+                    }
+                });
+                break;
+
+            default:
+                break;
+        }
+    }
+
+    @Override
+    public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
+
+    }
+
+
+    /**
+     * 释放资源时调用,当用户退出界面或者游戏的时候,
+     * 调用此接口,释放资源才允许退出!
+     *
+     * @param context
+     */
+    public void releaseSdkResource(Context context) {
+        Log.i(TAG, "releaseSdkResource");
+
+        Toast.makeText(context, "释放SDK资源", Toast.LENGTH_SHORT).show();
+
+        try {
+            /**渠道存在退出界面,此处游戏必须调用,begin*/
+            Intent startMain = new Intent(Intent.ACTION_MAIN);
+            startMain.addCategory(Intent.CATEGORY_HOME);
+            startMain.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+            context.startActivity(startMain);
+            /**渠道存在退出界面,此处游戏必须调用,end*/
+        } catch (Exception e) {
+            Log.e(TAG, "releaseSdkResource 抛出异常!");
+        }
+    }
+
+    /**
+     * 复写生命周期方法,里面调用
+     */
+    public void onStart(Context context) {
+        Log.i(TAG, "onStart");
+    }
+
+    public void onCreate(Context context, Bundle handler) {
+        Log.i(TAG, "onCreate");
+    }
+
+    public void onRestart(Context context) {
+        Log.i(TAG, "onRestart");
+    }
+
+    public void onResume(Context context) {
+        Log.i(TAG, "onResume");
+    }
+
+    public void onPause(Context context) {
+        Log.i(TAG, "onPause");
+    }
+
+    public void onStop(Context context) {
+        Log.i(TAG, "onStop");
+    }
+
+    public void onDestroy(Context context) {
+        Log.i(TAG, "onDestroy");
+    }
+
+    public void onActivityResult(int requestCode, int resultCode, Intent data) {
+        Log.i(TAG, "onActivityResult requestCode:" + requestCode + " resultCode:" + resultCode + " data:" + data);
+    }
+
+    public void onNewIntent(Intent intent) {
+        Log.i(TAG, "onNewIntent");
+    }
+
+    @Override
+    public void attachBaseContext(Context context) {
+
+    }
+
+    @Override
+    public void onApplicationCreate(Context context) {
+
+    }
+
+    public void onSaveInstanceState(Context context, Bundle outState) {
+        Log.i(TAG, "onSaveInstanceState");
+    }
 }

+ 0 - 3
fq_channel_oppo/src/main/res/values/strings.xml

@@ -1,3 +0,0 @@
-<resources>
-    <string name="app_name">fq_channel_oppo</string>
-</resources>

+ 10 - 0
fq_channel_oppo/src/main/res/values/styles.xml

@@ -0,0 +1,10 @@
+<resources>
+	<style name="Theme_Dialog_Custom" parent="@android:style/Theme.Dialog">
+        <item name="android:windowFrame">@null</item>
+        <item name="android:windowFullscreen">true</item>
+        <item name="android:windowNoTitle">true</item>
+        <item name="android:windowBackground">@android:color/transparent</item>
+        <item name="android:windowIsFloating">true</item>
+        <item name="android:windowContentOverlay">@null</item>
+    </style>
+</resources>

+ 2 - 1
fq_plugin_api/src/main/assets/fqcfg

@@ -2,5 +2,6 @@
 "appId": "20213",
 "channelId": "1110",
 "adId": "844922",
-"adFlag": "sglsbw_oppo_0001"
+"adFlag": "sglsbw_oppo_0001",
+"oppo_gameSecret": "f953537dbffa425d8ce693ecd483559e"
 }

+ 19 - 24
fq_plugin_api/src/main/java/com/fq/channel/sdk/api/FqGame.java

@@ -1,38 +1,14 @@
 package com.fq.channel.sdk.api;
 
-import android.Manifest;
 import android.app.Activity;
 import android.content.Intent;
-import android.content.pm.PackageManager;
 import android.os.Bundle;
 import android.support.annotation.NonNull;
-import android.support.v4.app.ActivityCompat;
-import android.support.v4.content.ContextCompat;
-import android.text.TextUtils;
-import android.util.Log;
 
 import com.fq.channel.sdk.api.bean.LoginInfo;
 import com.fq.channel.sdk.api.bean.PaymentInfo;
-import com.fq.channel.sdk.base.Constants.AppConfig;
-import com.fq.channel.sdk.base.Constants.FqConfig;
-import com.fq.channel.sdk.base.Exception.BaseException;
-import com.fq.channel.sdk.base.interfaces.PluginResult.Status;
-import com.fq.channel.sdk.base.interfaces.PluginResult;
-import com.fq.channel.sdk.base.interfaces.PluginResultHandler;
-import com.fq.channel.sdk.base.net.FqNetRequest;
-import com.fq.channel.sdk.base.net.HttpManager;
-import com.fq.channel.sdk.base.net.callback.BaseCallback;
-import com.fq.channel.sdk.base.utils.DeviceUtils;
 import com.fq.channel.sdk.base.utils.FqLog;
-import com.fq.channel.sdk.base.utils.Utils;
-import com.fq.channel.sdk.core.JointManager;
 import com.fq.channel.sdk.core.invoke.ApiPlugin;
-import com.fq.threelib.okhttp3.internal.Util;
-
-import org.json.JSONException;
-import org.json.JSONObject;
-
-import java.util.Map;
 
 /**
  * @Description: 提供给CP访问的接口类
@@ -76,6 +52,25 @@ public class FqGame {
         FqGameHander.pay(activity, paymentInfo, resultPay);
     }
 
+    /**
+     * 提供给CP调用角色信息上报的接口
+     *
+     * @param activity
+     * @param result
+     */
+    public static void exit(Activity activity,IExit result){
+        FqGameHander.exit(activity,result);
+    }
+
+    /**
+     * 提供给CP调用角色信息上报的接口
+     *
+     * @param mBundle
+     */
+    public static void setRoleInfo(Bundle mBundle){
+        ApiPlugin.getInstace().setRoleInfo(mBundle);
+    }
+
     /**
      * onRequestPermissionsResult
      *

+ 48 - 56
fq_plugin_api/src/main/java/com/fq/channel/sdk/api/FqGameHander.java

@@ -1,26 +1,18 @@
 package com.fq.channel.sdk.api;
 
-import android.Manifest;
 import android.app.Activity;
-import android.content.pm.PackageManager;
 import android.support.annotation.NonNull;
-import android.support.v4.app.ActivityCompat;
-import android.support.v4.content.ContextCompat;
 import android.text.TextUtils;
-import android.util.Log;
 
 import com.fq.channel.sdk.api.bean.LoginInfo;
 import com.fq.channel.sdk.api.bean.PaymentInfo;
-import com.fq.channel.sdk.base.Constants.AppConfig;
-import com.fq.channel.sdk.base.Constants.FqConfig;
-import com.fq.channel.sdk.base.Exception.BaseException;
+import com.fq.channel.sdk.base.constants.AppConfig;
+import com.fq.channel.sdk.base.constants.FqConfig;
+import com.fq.channel.sdk.base.interfaces.IPermissionRequestCallback;
 import com.fq.channel.sdk.base.interfaces.PluginResult;
 import com.fq.channel.sdk.base.interfaces.PluginResultHandler;
-import com.fq.channel.sdk.base.net.FqNetRequest;
 import com.fq.channel.sdk.base.net.HttpManager;
-import com.fq.channel.sdk.base.net.callback.BaseCallback;
-import com.fq.channel.sdk.base.net.req.ResultContent;
-import com.fq.channel.sdk.base.net.req.ResultInitBody;
+import com.fq.channel.sdk.base.permission.PermissionManager;
 import com.fq.channel.sdk.base.utils.DeviceUtils;
 import com.fq.channel.sdk.base.utils.FqLog;
 import com.fq.channel.sdk.base.utils.Utils;
@@ -32,7 +24,7 @@ import org.json.JSONObject;
 import java.util.Map;
 
 /**
- * @Description: 描述
+ * @Description: api逻辑处理
  * @Author: FLuty
  * @CreateDate: 2020/4/3 15:59
  */
@@ -40,45 +32,41 @@ public class FqGameHander {
 
     private static final String TAG = "FqGameHander";
 
-    //READ_PHONE_STATE 权限请求码
-    public static final int REQUEST_CODE_READ_PHONE_STATE = 1;
-
     private static IResult<String> resultInit;
 
     public static void init(Activity activity, IResult<String> result) {
         resultInit = result;
         //初始化配置
         initSDKConfig(activity);
-        if (ContextCompat.checkSelfPermission(activity, Manifest.permission.READ_PHONE_STATE)
-                != PackageManager.PERMISSION_GRANTED) {
-            //如果没有读取权限的则进行权限的申请
-            ActivityCompat.requestPermissions(activity,
-                    new String[]{Manifest.permission.READ_PHONE_STATE}, REQUEST_CODE_READ_PHONE_STATE);
-        } else {
-            //有权限的情况 直接读取imei并进行网络请求
-            String imei = DeviceUtils.getIMEI();
-            AppConfig.sImei = TextUtils.isEmpty(imei) ? "" : imei;
-            initSDKNet();
-        }
+        PermissionManager.getInstance().applyPermission(activity, new IPermissionRequestCallback() {
+            @Override
+            public void onDone() {
+                //处理获取到读取IMEI权限的
+                String imei = DeviceUtils.getIMEI();
+                AppConfig.sImei = TextUtils.isEmpty(imei) ? "" : imei;
+                initSDKNet();
+            }
+        });
     }
 
     /**
      * 网络初始化
      */
     private static void initSDKNet() {
-        FqNetRequest.init(new BaseCallback<ResultInitBody>() {
-            @Override
-            public void onFailure(BaseException msg) {
-                FqLog.e(TAG, "initSDKNet onFailure :"+msg.getMsg());
-                resultInit.onFail(msg.getMsg());
-            }
-
-            @Override
-            public void onSuccess(int code, String msg, ResultInitBody data) {
-                FqLog.i(TAG, "initSDKNet onSuccess :" + data.toString());
-                initChannel(resultInit);
-            }
-        });
+        //TODO
+//        FqNetRequest.init(new BaseCallback<ResultInitBody>() {
+//            @Override
+//            public void onFailure(BaseException msg) {
+//                FqLog.e(TAG, "initSDKNet onFailure :"+msg.getMsg());
+//                resultInit.onFail(msg.getMsg());
+//            }
+//
+//            @Override
+//            public void onSuccess(int code, String msg, ResultInitBody data) {
+//                FqLog.i(TAG, "initSDKNet onSuccess :" + data.toString());
+        initChannel(resultInit);
+//            }
+//        });
     }
 
     /**
@@ -101,7 +89,7 @@ public class FqGameHander {
             @Override
             public void onHandlePluginResult(PluginResult result) {
                 PluginResult.Status mStatus = result.getStatus();
-                Log.i(TAG, "init mStatus :" + mStatus);
+                FqLog.i(TAG, "init mStatus :" + mStatus);
                 if (PluginResult.Status.OK == mStatus) {
                     resultInit.onSuccess(result.getMessage());
                 } else if (PluginResult.Status.CANCEL == mStatus) {
@@ -118,7 +106,7 @@ public class FqGameHander {
             @Override
             public void onHandlePluginResult(PluginResult result) {
                 PluginResult.Status mStatus = result.getStatus();
-                Log.i(TAG, "login mStatus :" + mStatus);
+                FqLog.i(TAG, "login mStatus :" + mStatus);
 
                 if (PluginResult.Status.OK == mStatus) {
                     Object res_msg = result.getRawMessage();
@@ -141,7 +129,7 @@ public class FqGameHander {
     public static void pay(@NonNull Activity activity, @NonNull final PaymentInfo paymentInfo, final IResult<String> resultPay) {
         try {
             Map map = Utils.getObjectToMap(paymentInfo);
-            if (map == null){
+            if (map == null) {
                 resultPay.onFail("params is null");
                 return;
             }
@@ -149,7 +137,7 @@ public class FqGameHander {
                 @Override
                 public void onHandlePluginResult(PluginResult result) {
                     PluginResult.Status mStatus = result.getStatus();
-                    Log.i(TAG, "pay mStatus :" + mStatus);
+                    FqLog.i(TAG, "pay mStatus :" + mStatus);
                     if (PluginResult.Status.OK == mStatus) {
                         resultPay.onSuccess(result.getMessage());
                     } else if (PluginResult.Status.CANCEL == mStatus) {
@@ -165,20 +153,24 @@ public class FqGameHander {
         }
     }
 
+    public static void exit(Activity activity, final IExit exit) {
+        JointManager.getInstance().exit(activity, new PluginResultHandler() {
+            @Override
+            public void onHandlePluginResult(PluginResult result) {
+                PluginResult.Status mStatus = result.getStatus();
+                FqLog.i(TAG, "exit mStatus :" + mStatus);
+                if (PluginResult.Status.OK == mStatus) {
+                    exit.onExit();
+                } else if (PluginResult.Status.CANCEL == mStatus) {
+                    exit.onNoConfirmDialogExit();
+                }
+            }
+        });
+    }
+
     protected static void onRequestPermissionsResult(int requestCode,
                                                      String[] permissions, int[] grantResults) {
-        if (REQUEST_CODE_READ_PHONE_STATE == requestCode
-                && grantResults.length > 0
-                && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
-            //处理获取到读取IMEI权限的
-            String imei = DeviceUtils.getIMEI();
-            AppConfig.sImei = TextUtils.isEmpty(imei) ? "" : imei;
-        } else {
-            //获取不到读取IMEI权限
-            AppConfig.sImei = "";
-        }
-        //无论是否获得IMEI读取权限都要进行初始化接口的调用
-        initSDKNet();
+        PermissionManager.getInstance().onRequestPermissionsResult(requestCode, permissions, grantResults);
     }
 
 }

+ 19 - 0
fq_plugin_api/src/main/java/com/fq/channel/sdk/api/IExit.java

@@ -0,0 +1,19 @@
+package com.fq.channel.sdk.api;
+
+/**
+ * @Description: 退出回调
+ * @Author: FLuty
+ * @CreateDate: 2020/4/7 15:35
+ */
+public interface IExit {
+    /**
+     * 确认退出
+     */
+   void onExit();
+
+    /**
+     * 无退出界面。
+     * 渠道不存在退出界面,此处游戏必须弹出自己的退出确认框。
+     */
+   void onNoConfirmDialogExit();
+}

+ 1 - 1
fq_plugin_base/src/main/java/com/fq/channel/sdk/base/Constants/AppConfig.java

@@ -1,4 +1,4 @@
-package com.fq.channel.sdk.base.Constants;
+package com.fq.channel.sdk.base.constants;
 
 
 import com.fq.channel.sdk.base.utils.AppInfoUtils;

+ 82 - 0
fq_plugin_base/src/main/java/com/fq/channel/sdk/base/constants/ConstSet.java

@@ -0,0 +1,82 @@
+package com.fq.channel.sdk.base.constants;
+
+/**
+ * @Description: 对外公共常量
+ * @Author: FLuty
+ * @CreateDate: 2020/4/3 14:44
+ */
+public class ConstSet {
+
+    /*支付常量集合*/
+    public static final String PAY_ORDER_ID = "orderId" ;
+    public static final String PAY_PAYMENT_STATE = "paymentstate" ;
+    public static final String PAY_PAYMETHOD = "paymethod" ;
+    public static final String PAY_SUBMIT_TIME = "submitTime" ;
+    /**
+     * SDK的商品ID.
+     */
+    public static final String PAY_PRODUCT_ID = "product_id" ;
+    /**
+     * 商品价格。
+     */
+    public static final String PAY_PRICE = "wapMoney" ;
+    public static final String PAY_PRODUCT_NAME = "productName" ;
+    public static final String PAY_SERVER_ID = "serverId" ;
+    public static final String PAY_EXTRAL_INFO = "extral_info" ;
+    /**
+     * 商品描述
+     */
+    public static final String PAY_PRODUCT_DES = "product_des" ;
+    /**
+     * 商品数量。
+     */
+    public static final String PAY_AMOUNT = "amount" ;
+    /**
+     * 商品量词,例:一张/一个
+     */
+    public static final String PAY_QUANTIFIER = "quantifier" ;
+    /**
+     * 兑换比例。
+     */
+    public static final String PAY_RATE = "rate" ;
+    public static final String PAY_NOTIFYURl = "notifyurl" ;
+    /**
+     * 商品单位,例如金币,钻石。
+     */
+    public static final String PAY_MONETARYUNIT = "monetaryunit" ;
+    /**
+     * 角色ID int类型字符串
+     */
+    public static final String PAY_SERVER_UID = "server_uid" ;
+    /**
+     * 渠道支付额外参数 例如 回调地址(NotifyUrl)、支付签名(Sign)等  由服务端返回
+     */
+    public static final String PAY_CHANNEL_ORDERINFO = "Channel_Orderinfo" ;
+    /**
+     * 商品ID。
+     */
+    public static final String PAY_GOODS_ID = "goods_id" ;
+    /**
+     * 计费ID
+     */
+    public static final String PAY_CHARGE_ID = "charge_id" ;
+
+    /*数据上报常量集合*/
+    public static final String DATA_KEY_ROLE_NAME = "roleName" ;
+    public static final String DATA_KEY_ROLE_LEVEL = "roleLevel" ;
+    public static final String DATA_KEY_ROLE_ID = "roleId" ;
+    public static final String DATA_KEY_ROLE_TYPE = "roleType" ;
+    public static final String DATA_KEY_SERVER_ID = "serverId" ;
+    public static final String DATA_KEY_SERVER_NAME = "serverName" ;
+    public static final String DATA_KEY_BALANCE = "balance" ;
+    public static final String DATA_KEY_VIP_LEVEL = "vipLevel" ;
+    public static final String DATA_KEY_PARTY_NAME = "partyName" ;
+    public static final String DATA_KEY_ROLE_CREATE_TIME = "roleCTime" ;
+    public static final String DATA_KEY_ROLE_LEVEL_TIME = "roleLevelMTime" ;
+    public static final String DATA_KEY_ZONE_ID = "zoneId" ;
+    public static final String DATA_KEY_ZONE_NAME = "zoneName" ;
+    public static final String DATA_KEY_DATA_TYPE = "dataType" ;
+    public static final String DATA_KEY_DATA_MONEY = "money" ;
+    public static final String DATA_KEY_DATA_PARTY_NAME = "partyName" ;
+
+}

+ 1 - 1
fq_plugin_base/src/main/java/com/fq/channel/sdk/base/Constants/FqCache.java

@@ -1,4 +1,4 @@
-package com.fq.channel.sdk.base.Constants;
+package com.fq.channel.sdk.base.constants;
 
 /**
  * @Description: 描述

+ 1 - 1
fq_plugin_base/src/main/java/com/fq/channel/sdk/base/Constants/FqConfig.java

@@ -1,4 +1,4 @@
-package com.fq.channel.sdk.base.Constants;
+package com.fq.channel.sdk.base.constants;
 
 import android.app.Activity;
 import android.content.Context;

+ 1 - 1
fq_plugin_base/src/main/java/com/fq/channel/sdk/base/Constants/ResourceCfg.java

@@ -1,4 +1,4 @@
-package com.fq.channel.sdk.base.Constants;
+package com.fq.channel.sdk.base.constants;
 
 import android.content.Context;
 

+ 1 - 1
fq_plugin_base/src/main/java/com/fq/channel/sdk/base/Exception/BaseException.java

@@ -1,4 +1,4 @@
-package com.fq.channel.sdk.base.Exception;
+package com.fq.channel.sdk.base.exception;
 
 /**
  * @Description: okhttp 网络异常

+ 1 - 1
fq_plugin_base/src/main/java/com/fq/channel/sdk/base/Exception/NoSuchFunctionException.java

@@ -1,4 +1,4 @@
-package com.fq.channel.sdk.base.Exception;
+package com.fq.channel.sdk.base.exception;
 
 /**
  * @Description: 异常类

+ 1 - 1
fq_plugin_base/src/main/java/com/fq/channel/sdk/base/Exception/NullStringToEmptyAdapterFactory.java

@@ -1,4 +1,4 @@
-package com.fq.channel.sdk.base.Exception;
+package com.fq.channel.sdk.base.exception;
 
 import com.fq.threelib.gson.Gson;
 import com.fq.threelib.gson.TypeAdapter;

+ 1 - 1
fq_plugin_base/src/main/java/com/fq/channel/sdk/base/Exception/StringNullAdapter.java

@@ -1,4 +1,4 @@
-package com.fq.channel.sdk.base.Exception;
+package com.fq.channel.sdk.base.exception;
 
 
 import com.fq.threelib.gson.TypeAdapter;

+ 83 - 2
fq_plugin_base/src/main/java/com/fq/channel/sdk/base/interfaces/FQPluginApi.java

@@ -5,6 +5,7 @@ import android.content.Context;
 import android.content.Intent;
 import android.os.Bundle;
 
+import java.util.HashMap;
 import java.util.Map;
 
 /**
@@ -52,10 +53,10 @@ public abstract class FQPluginApi {
      */
     public abstract void exit(Context context, final PluginResultHandler cb);
     /**
-     * 数据上报
+     * 游戏角色数据上报
      * @param data
      */
-    public abstract void setExtraBundle(Bundle data);
+    public abstract void setRoleInfo(Bundle data);
 
     /**
      * 获取权限结果
@@ -80,4 +81,84 @@ public abstract class FQPluginApi {
     public abstract void onApplicationCreate(Context context);
     public abstract void onActivityResult(int requestCode, int resultCode, Intent data);
     public abstract void onDestroy(Context context);
+
+    /** 通用回调方法(初始化、登录、支付)*/
+    public void initFqSdkSuccess(PluginResultHandler cb) {
+        if (cb != null) {
+            cb.onHandlePluginResult(new PluginResult(
+                    PluginResult.Status.OK));
+        }
+    }
+
+    public void initFqSdkError(PluginResultHandler cb) {
+        if (cb != null) {
+            cb.onHandlePluginResult(new PluginResult(
+                    PluginResult.Status.ERROR));
+        }
+    }
+
+    public void loginFqSdkSuccess(PluginResultHandler cb, HashMap<String, String> loginAuthData) {
+        if (cb != null) {
+            cb.onHandlePluginResult(new PluginResult(
+                    PluginResult.Status.OK, loginAuthData));
+        }
+    }
+
+    public void loginFqSdkError(PluginResultHandler cb, String errorMessage) {
+        if (cb != null) {
+
+            if(null == errorMessage) {
+                cb.onHandlePluginResult(new PluginResult(
+                        PluginResult.Status.ERROR));
+            } else {
+                cb.onHandlePluginResult(new PluginResult(
+                        PluginResult.Status.ERROR, errorMessage));
+            }
+
+
+        }
+    }
+
+    public void loginFqSdkCancle(PluginResultHandler cb) {
+        if (cb != null) {
+            cb.onHandlePluginResult(new PluginResult(
+                    PluginResult.Status.CANCEL));
+        }
+    }
+
+    public void payFqSdkSuccess(PluginResultHandler cb) {
+        if (cb != null) {
+            cb.onHandlePluginResult(new PluginResult(
+                    PluginResult.Status.OK));
+        }
+    }
+
+    public void payFqSdkError(PluginResultHandler cb) {
+        if (cb != null) {
+            cb.onHandlePluginResult(new PluginResult(
+                    PluginResult.Status.CANCEL));
+        }
+    }
+
+    public void payFqSdkCancel(PluginResultHandler cb) {
+        if (cb != null) {
+            cb.onHandlePluginResult(new PluginResult(
+                    PluginResult.Status.CANCEL));
+        }
+    }
+
+    public void exitFqSdkNoConfirmDialog(PluginResultHandler cb) {
+        if (cb != null) {
+            cb.onHandlePluginResult(new PluginResult(PluginResult.Status.CANCEL));
+        }
+    }
+
+    public void exitFqSdk(PluginResultHandler cb) {
+        if (cb != null) {
+            cb.onHandlePluginResult(new PluginResult(
+                    PluginResult.Status.OK));
+        }
+    }
+
+
 }

+ 11 - 0
fq_plugin_base/src/main/java/com/fq/channel/sdk/base/interfaces/IPermissionRequestCallback.java

@@ -0,0 +1,11 @@
+package com.fq.channel.sdk.base.interfaces;
+
+/**
+ * @Description: 权限回调
+ * @Author: FLuty
+ * @CreateDate: 2020/4/7 16:12
+ */
+public interface IPermissionRequestCallback {
+
+    void onDone();//完成
+}

+ 16 - 19
fq_plugin_base/src/main/java/com/fq/channel/sdk/base/net/FqNetRequest.java

@@ -1,16 +1,9 @@
 package com.fq.channel.sdk.base.net;
 
-import com.fq.channel.sdk.base.Constants.AppConfig;
-import com.fq.channel.sdk.base.Constants.FqConfig;
-import com.fq.channel.sdk.base.Exception.NullStringToEmptyAdapterFactory;
+import com.fq.channel.sdk.base.constants.FqConfig;
 import com.fq.channel.sdk.base.net.callback.BaseCallback;
 import com.fq.channel.sdk.base.net.req.ParamsUtils;
-import com.fq.channel.sdk.base.net.req.ReqContent;
-import com.fq.channel.sdk.base.net.req.ReqHeader;
-import com.fq.channel.sdk.base.net.req.ReqInitBody;
 import com.fq.channel.sdk.base.utils.Utils;
-import com.fq.threelib.gson.Gson;
-import com.fq.threelib.gson.GsonBuilder;
 
 import java.io.UnsupportedEncodingException;
 import java.net.URLEncoder;
@@ -23,7 +16,7 @@ import java.net.URLEncoder;
 public class FqNetRequest {
 
     /**
-     * 初始化请求
+     * 初始化
      *
      * @param callback
      */
@@ -33,17 +26,21 @@ public class FqNetRequest {
     }
 
     /**
-     * 对Json字符串进行URLEncoder
+     * 登录
      *
-     * @param requestJson Json字符串
-     * @return
+     * @param callback
+     */
+    public static void login(BaseCallback callback) {
+
+    }
+
+    /**
+     * 创建订单
+     *
+     * @param callback
      */
-    private String encoderJson(String requestJson) {
-        try {
-            return URLEncoder.encode(requestJson, "UTF-8");
-        } catch (UnsupportedEncodingException e) {
-            e.printStackTrace();
-        }
-        return "";
+    public static void createOrder(BaseCallback callback) {
+
     }
+
 }

+ 1 - 1
fq_plugin_base/src/main/java/com/fq/channel/sdk/base/net/callback/BaseCallback.java

@@ -2,7 +2,7 @@ package com.fq.channel.sdk.base.net.callback;
 
 import android.text.TextUtils;
 
-import com.fq.channel.sdk.base.Exception.BaseException;
+import com.fq.channel.sdk.base.exception.BaseException;
 import com.fq.channel.sdk.base.net.HttpConstant;
 import com.fq.channel.sdk.base.net.req.ResultHeader;
 import com.fq.channel.sdk.base.utils.FqLog;

+ 2 - 2
fq_plugin_base/src/main/java/com/fq/channel/sdk/base/net/req/ParamsUtils.java

@@ -1,7 +1,7 @@
 package com.fq.channel.sdk.base.net.req;
 
-import com.fq.channel.sdk.base.Constants.AppConfig;
-import com.fq.channel.sdk.base.Exception.NullStringToEmptyAdapterFactory;
+import com.fq.channel.sdk.base.constants.AppConfig;
+import com.fq.channel.sdk.base.exception.NullStringToEmptyAdapterFactory;
 import com.fq.channel.sdk.base.utils.DES;
 import com.fq.channel.sdk.base.utils.DeviceUtils;
 import com.fq.channel.sdk.base.utils.EncryptUtils;

+ 66 - 0
fq_plugin_base/src/main/java/com/fq/channel/sdk/base/permission/PermissionManager.java

@@ -0,0 +1,66 @@
+package com.fq.channel.sdk.base.permission;
+
+import android.Manifest;
+import android.app.Activity;
+import android.content.Context;
+import android.content.pm.PackageManager;
+import android.os.Build;
+import android.support.v4.app.ActivityCompat;
+import android.support.v4.content.ContextCompat;
+
+import com.fq.channel.sdk.base.interfaces.IPermissionRequestCallback;
+
+
+/**
+ * @Description: 权限处理
+ * @Author: FLuty
+ * @CreateDate: 2020/4/7 16:09
+ */
+
+public class PermissionManager {
+
+    private static PermissionManager mPermissionInitManager;
+    //权限授权申请提醒
+    public static final int REQUEST_CODE = 101268;
+
+    private IPermissionRequestCallback callback;
+    private String[] permissions = new String[]{Manifest.permission.READ_PHONE_STATE};
+
+    public static PermissionManager getInstance() {
+        synchronized (PermissionManager.class) {
+            if (null == mPermissionInitManager) {
+                mPermissionInitManager = new PermissionManager();
+            }
+            return mPermissionInitManager;
+        }
+    }
+
+    public void applyPermission(Context context, IPermissionRequestCallback callback) {
+        this.callback = callback;
+        if (Build.VERSION.SDK_INT < 23) {
+            callback.onDone();
+            return;
+        }
+        requestPermission(context);
+
+    }
+
+    private void requestPermission(Context context) {
+        if (ContextCompat.checkSelfPermission(context, Manifest.permission.READ_PHONE_STATE)
+                != PackageManager.PERMISSION_GRANTED) {
+            ActivityCompat.requestPermissions((Activity) context, permissions, REQUEST_CODE);
+        } else {
+            callback.onDone();
+        }
+    }
+
+    public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
+        if (REQUEST_CODE == requestCode
+                && grantResults.length > 0
+                && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
+            callback.onDone();
+        } else {
+            callback.onDone();
+        }
+    }
+}

+ 1 - 1
fq_plugin_base/src/main/java/com/fq/channel/sdk/base/utils/AppInfoUtils.java

@@ -3,7 +3,7 @@ package com.fq.channel.sdk.base.utils;
 import android.content.pm.PackageInfo;
 import android.content.pm.PackageManager;
 
-import com.fq.channel.sdk.base.Constants.FqConfig;
+import com.fq.channel.sdk.base.constants.FqConfig;
 
 /**
  * Created by Ethan on 2017/9/2.

+ 1 - 1
fq_plugin_base/src/main/java/com/fq/channel/sdk/base/utils/FqLog.java

@@ -2,7 +2,7 @@ package com.fq.channel.sdk.base.utils;
 
 import android.util.Log;
 
-import com.fq.channel.sdk.base.Constants.FqConfig;
+import com.fq.channel.sdk.base.constants.FqConfig;
 
 /**
  * @Description: 日志工具类

+ 0 - 6
fq_plugin_base/src/main/java/com/fq/channel/sdk/base/utils/Utils.java

@@ -16,11 +16,6 @@ import android.support.annotation.StringRes;
 import android.support.v4.content.ContextCompat;
 import android.text.TextUtils;
 
-import com.fq.channel.sdk.base.Exception.NullStringToEmptyAdapterFactory;
-import com.fq.channel.sdk.base.net.req.ReqContent;
-import com.fq.threelib.gson.Gson;
-import com.fq.threelib.gson.GsonBuilder;
-
 import java.io.ByteArrayOutputStream;
 import java.io.FileNotFoundException;
 import java.io.IOException;
@@ -34,7 +29,6 @@ import java.net.SocketException;
 import java.net.URLDecoder;
 import java.net.URLEncoder;
 import java.util.Enumeration;
-import java.util.HashMap;
 import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;

+ 5 - 1
fq_plugin_core/src/main/java/com/fq/channel/sdk/core/JointManager.java

@@ -3,7 +3,7 @@ package com.fq.channel.sdk.core;
 import android.content.Context;
 
 import com.fq.channel.sdk.base.interfaces.PluginResultHandler;
-import com.fq.channel.sdk.base.Constants.ResourceCfg;
+import com.fq.channel.sdk.base.constants.ResourceCfg;
 import com.fq.channel.sdk.core.invoke.ApiPlugin;
 
 import java.util.Map;
@@ -55,6 +55,10 @@ public class JointManager {
         ApiPlugin.getInstace().pay(context, paymentInfo, cb);
     }
 
+    public void exit(Context context,PluginResultHandler cb){
+        ApiPlugin.getInstace().exit(context, cb);
+    }
+
     public String getPluginSdkClassName() {
         return mCfg.getString("plugin_sdk_class_name");
     }

+ 24 - 11
fq_plugin_core/src/main/java/com/fq/channel/sdk/core/invoke/ApiPlugin.java

@@ -7,8 +7,7 @@ import android.os.Handler;
 import android.os.Looper;
 import android.util.Log;
 
-import com.fq.channel.sdk.base.Constants.FqConfig;
-import com.fq.channel.sdk.base.Exception.NoSuchFunctionException;
+import com.fq.channel.sdk.base.exception.NoSuchFunctionException;
 import com.fq.channel.sdk.base.interfaces.PluginResult;
 import com.fq.channel.sdk.base.interfaces.PluginResultHandler;
 import com.fq.channel.sdk.base.utils.FqLog;
@@ -45,7 +44,7 @@ public class ApiPlugin extends ApiReflectManager {
 
     public void init(Context context, PluginResultHandler cb) {
         if (cb == null) {
-            Log.e(TAG, "====initialize====的回调函数为null,请初始化");
+            FqLog.e(TAG, "====initialize====的回调函数为null,请初始化");
             return;
         }
 
@@ -53,7 +52,7 @@ public class ApiPlugin extends ApiReflectManager {
             invoke(getDeclaredMethod("init", Context.class, PluginResultHandler.class),
                     context, cb);
         } catch (NoSuchFunctionException e) {
-            Log.e(TAG, "initialize NoSuchFunctionException");
+            FqLog.e(TAG, "initialize NoSuchFunctionException");
             e.printStackTrace();
             cb.onHandlePluginResult(new PluginResult(PluginResult.Status.ERROR));
         }
@@ -63,14 +62,14 @@ public class ApiPlugin extends ApiReflectManager {
     public void login(Context context, PluginResultHandler cb) {
 
         if (cb == null) {
-            Log.e(TAG, "====login====的回调函数为null,请初始化");
+            FqLog.e(TAG, "====login====的回调函数为null,请初始化");
             return;
         }
         try {
             invoke(getDeclaredMethod("login", Context.class, PluginResultHandler.class),
                     context, cb);
         } catch (NoSuchFunctionException e) {
-            Log.e(TAG, "login NoSuchFunctionException");
+            FqLog.e(TAG, "login NoSuchFunctionException");
             e.printStackTrace();
             cb.onHandlePluginResult(new PluginResult(PluginResult.Status.ERROR));
         }
@@ -80,25 +79,39 @@ public class ApiPlugin extends ApiReflectManager {
     public void pay(Context context, Map map, PluginResultHandler cb) {
 
         if (cb == null) {
-            Log.e(TAG, "====pay====的回调函数为null,请初始化");
+            FqLog.e(TAG, "====pay====的回调函数为null,请初始化");
             return;
         }
         try {
             invoke(getDeclaredMethod("pay", Context.class, Map.class, PluginResultHandler.class),
                     context, map, cb);
         } catch (NoSuchFunctionException e) {
-            Log.e(TAG, "login NoSuchFunctionException");
+            FqLog.e(TAG, "login NoSuchFunctionException");
             e.printStackTrace();
             cb.onHandlePluginResult(new PluginResult(PluginResult.Status.ERROR));
         }
 
     }
 
-    public void setExtraBundle(Bundle data) {
+    public void exit(Context context, final PluginResultHandler cb) {
+        if(cb == null) {
+            FqLog.e(TAG, "====exit====的回调函数为null,请初始化");
+            return;
+        }
+        try {
+            invoke(getDeclaredMethod("exit", Context.class, PluginResultHandler.class),
+                    context, cb);
+        } catch (NoSuchFunctionException e) {
+            FqLog.printStackTrace(e);
+            cb.onHandlePluginResult(new PluginResult(PluginResult.Status.CANCEL));
+        }
+    }
+
+    public void setRoleInfo(Bundle data) {
         try {
-            invoke(getDeclaredMethod("setExtraBundle", Bundle.class), data);
+            invoke(getDeclaredMethod("setRoleInfo", Bundle.class), data);
         } catch (NoSuchFunctionException e) {
-            FqLog.e(TAG, "====setExtraBundle====没有实现该函数");
+            FqLog.e(TAG, "====setRoleInfo====没有实现该函数");
         }
     }
 

+ 1 - 2
fq_plugin_core/src/main/java/com/fq/channel/sdk/core/invoke/ApiReflectManager.java

@@ -1,9 +1,8 @@
 package com.fq.channel.sdk.core.invoke;
 
-import android.content.Context;
 import android.util.Log;
 
-import com.fq.channel.sdk.base.Exception.NoSuchFunctionException;
+import com.fq.channel.sdk.base.exception.NoSuchFunctionException;
 import com.fq.channel.sdk.core.JointManager;
 
 import java.lang.reflect.Method;