Browse Source

v3.0.0开发:渠道sdk中间层开发

#Suyghur 3 years ago
parent
commit
abb8180c83
30 changed files with 1243 additions and 20 deletions
  1. 19 0
      demo/src/main/java/com/yyxx/commsdk/demo/DemoActivity.kt
  2. 4 4
      library_base/build.gradle
  3. 57 0
      library_base/src/main/java/cn/yyxx/commsdk/base/SdkBridgeManager.java
  4. 419 1
      library_base/src/main/java/cn/yyxx/commsdk/base/YYXXCommSdk.java
  5. 37 0
      library_base/src/main/java/cn/yyxx/commsdk/base/entity/Function.java
  6. 10 0
      library_base/src/main/java/cn/yyxx/commsdk/base/entity/ResultInfo.java
  7. 8 0
      library_base/src/main/java/cn/yyxx/commsdk/base/entity/SdkChargeInfo.java
  8. 8 0
      library_base/src/main/java/cn/yyxx/commsdk/base/entity/SdkRoleInfo.java
  9. 14 0
      library_base/src/main/java/cn/yyxx/commsdk/base/internal/ICallback.java
  10. 10 0
      library_base/src/main/java/cn/yyxx/commsdk/base/internal/IInitialize.java
  11. 11 0
      library_base/src/main/java/cn/yyxx/commsdk/base/internal/IRequestCallback.java
  12. 15 0
      library_base/src/main/java/cn/yyxx/commsdk/base/internal/feature/IApplication.java
  13. 33 0
      library_base/src/main/java/cn/yyxx/commsdk/base/internal/feature/IFeature.java
  14. 25 0
      library_base/src/main/java/cn/yyxx/commsdk/base/internal/feature/ILifeCycle.java
  15. 23 0
      library_base/src/main/java/cn/yyxx/commsdk/base/internal/feature/IOrder.java
  16. 19 0
      library_base/src/main/java/cn/yyxx/commsdk/base/internal/feature/IRoleData.java
  17. 87 0
      library_base/src/main/java/cn/yyxx/commsdk/base/utils/Logger.java
  18. 2 6
      library_channel/build.gradle
  19. 0 8
      library_channel/src/main/java/cn/yyxx/commsdk/impl/ChannelBridge.java
  20. 25 0
      library_channel/src/main/java/cn/yyxx/commsdk/impl/ChannelSdkGenerator.java
  21. 138 0
      library_channel/src/main/java/cn/yyxx/commsdk/impl/ChannelSdkImpl.java
  22. 63 0
      library_channel/src/main/java/cn/yyxx/commsdk/impl/channel/ChannelSdkYYXX.java
  23. 11 0
      library_channel/src/main/java/cn/yyxx/commsdk/impl/entity/ChannelId.java
  24. 1 0
      library_core/build.gradle
  25. 111 1
      library_core/src/main/java/cn/yyxx/commsdk/core/SdkBridge.java
  26. 93 0
      library_core/src/main/java/cn/yyxx/commsdk/core/impl/SdkBridgeImpl.java
  27. BIN
      libs/dolin_zap_1.0.0.jar
  28. BIN
      libs/mmkv-static-1.2.8.jar
  29. BIN
      libs/oaid_sdk_1.0.25.jar
  30. BIN
      libs/yyxx_support_1.0.2.jar

+ 19 - 0
demo/src/main/java/com/yyxx/commsdk/demo/DemoActivity.kt

@@ -0,0 +1,19 @@
+package com.yyxx.commsdk.demo
+
+import android.app.Activity
+import android.content.Intent
+
+/**
+ * @author #Suyghur.
+ * Created on 2021/12/26
+ */
+class DemoActivity : Activity() {
+
+    override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
+        super.onActivityResult(requestCode, resultCode, data)
+    }
+
+    override fun onNewIntent(intent: Intent?) {
+        super.onNewIntent(intent)
+    }
+}

+ 4 - 4
library_base/build.gradle

@@ -32,10 +32,10 @@ android {
 }
 
 dependencies {
-//    api files('../libs/oaid_sdk_1.0.25.jar')
-//    api files('../libs/mmkv-static-1.2.8.jar')
-//    api files('../libs/dolin_zap_1.0.0.jar')
-//    api files('../libs/yyxx_support_1.0.2.jar')
+    api files('../libs/oaid_sdk_1.0.25.jar')
+    api files('../libs/mmkv-static-1.2.8.jar')
+    api files('../libs/dolin_zap_1.0.0.jar')
+    api files('../libs/yyxx_support_1.0.2.jar')
 //    api files('../libs/ali_authsdk_2.12.1.jar')
 //    api files('../libs/android-support-v4.jar')
 }

+ 57 - 0
library_base/src/main/java/cn/yyxx/commsdk/base/SdkBridgeManager.java

@@ -0,0 +1,57 @@
+package cn.yyxx.commsdk.base;
+
+import android.content.Context;
+
+import java.lang.reflect.Constructor;
+import java.lang.reflect.Method;
+
+/**
+ * @author #Suyghur.
+ * Created on 2021/12/25
+ */
+final class SdkBridgeManager {
+    static Object sdkBridge = null;
+    static Class<?> clzBridge = null;
+
+    public static Object initSdkBridgeManager(Context context) {
+        if (sdkBridge != null) {
+            return sdkBridge;
+        }
+
+        try {
+            clzBridge = Class.forName("cn.yyxx.commsdk.core.SdkBridge");
+            //获取构造函数的构造器
+            Constructor<?> constructor = clzBridge.getDeclaredConstructor(Context.class);
+            sdkBridge = constructor.newInstance(context);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        return sdkBridge;
+    }
+
+    public static void call(String methodName, Class<?>[] types, Object[] values) {
+        if (sdkBridge == null) {
+            return;
+        }
+        try {
+            Method method = clzBridge.getMethod(methodName, types);
+            method.invoke(sdkBridge, values);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+
+    public static Object callback(String methodName, Class<?>[] types, Object[] values) {
+        if (sdkBridge == null) {
+            return null;
+        }
+        try {
+            Method method = clzBridge.getMethod(methodName, types);
+            return method.invoke(sdkBridge, values);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return null;
+    }
+}

+ 419 - 1
library_base/src/main/java/cn/yyxx/commsdk/base/YYXXCommSdk.java

@@ -1,10 +1,38 @@
 package cn.yyxx.commsdk.base;
 
+import android.app.Activity;
+import android.app.Application;
+import android.content.Context;
+import android.content.Intent;
+import android.os.Build;
+import android.text.TextUtils;
+import android.webkit.WebView;
+
+import java.util.List;
+
+import cn.yyxx.commsdk.Version;
+import cn.yyxx.commsdk.base.entity.Function;
+import cn.yyxx.commsdk.base.entity.SdkChargeInfo;
+import cn.yyxx.commsdk.base.entity.SdkRoleInfo;
+import cn.yyxx.commsdk.base.internal.ICallback;
+import cn.yyxx.commsdk.base.internal.IInitialize;
+import cn.yyxx.commsdk.base.utils.Logger;
+import cn.yyxx.support.AppUtils;
+
 /**
  * @author #Suyghur.
  * Created on 2021/12/25
  */
-public class YYXXCommSdk {
+public final class YYXXCommSdk {
+
+    private static final long CLICK_INTERVAL = 1500L;
+    private Object mSdkBridge = null;
+    private long clickLoginTime = 0L;
+    private long clickLogoutTime = 0L;
+    private long clickChargeTime = 0L;
+
+    private String processName = "";
+    private boolean doSdkInit = false;
 
     private YYXXCommSdk() {
 
@@ -25,4 +53,394 @@ public class YYXXCommSdk {
             return INSTANCE;
         }
     }
+
+    private Object getSdkBridgeManager(Context context) {
+        if (null == mSdkBridge) {
+            mSdkBridge = SdkBridgeManager.initSdkBridgeManager(context);
+        }
+        return mSdkBridge;
+    }
+
+    /**
+     * 同步Application中的attachBaseContext
+     *
+     * @param application Application上下文对象
+     * @param context     Context上下文对象
+     */
+    public void attachBaseContext(Application application, Context context) {
+        if (TextUtils.isEmpty(processName)) {
+            processName = AppUtils.getProcessName(context);
+        }
+        if (TextUtils.isEmpty(processName) || !processName.equals(context.getPackageName())) {
+            return;
+        }
+        if (mSdkBridge == null) {
+            mSdkBridge = getSdkBridgeManager(context);
+        }
+        SdkBridgeManager.call(Function.ATTACH_BASE_CONTEXT, new Class[]{Application.class, Context.class}, new Object[]{application, context});
+    }
+
+    /**
+     * 同步Application中的onCreate
+     *
+     * @param application Application上下文对象
+     */
+    public void initApplication(Application application) {
+        if (TextUtils.isEmpty(processName)) {
+            processName = AppUtils.getProcessName(application);
+        }
+        if (TextUtils.isEmpty(processName) || !processName.equals(application.getPackageName())) {
+            return;
+        }
+        //适配Android P WebView
+        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
+            try {
+                if (!application.getPackageName().equals(processName)) {
+                    Logger.d("Android P 设置webView不同的目录");
+                    WebView.setDataDirectorySuffix(processName);
+                }
+            } catch (Exception e) {
+                e.printStackTrace();
+            }
+        }
+
+        if (mSdkBridge == null) {
+            mSdkBridge = getSdkBridgeManager(application);
+        }
+        SdkBridgeManager.call(Function.INIT_APPLICATION, new Class[]{Application.class}, new Object[]{application});
+    }
+
+    /**
+     * SDK初始化
+     *
+     * @param activity    Activity上下文
+     * @param isLandscape 是否横屏
+     * @param callback    SDK初始化回调
+     */
+    public void initialize(Activity activity, Boolean isLandscape, final ICallback callback) {
+        if (checkSdkBridgeNull(Function.INITIALIZE, callback)) {
+            return;
+        }
+
+        //有些CP自己请求了权限,导致回调权限2次,执行2次initFuseSdk,这里拦截一下
+        if (doSdkInit) {
+            Logger.e("QSGameSdk initialize 已经执行,拦截此次调用");
+            return;
+        }
+        IInitialize initCallback = (code, result) -> {
+            doSdkInit = code == 0;
+            callback.onResult(code, result);
+        };
+        SdkBridgeManager.call(Function.INITIALIZE, new Class[]{Activity.class, Boolean.class, IInitialize.class}, new Object[]{activity, isLandscape, initCallback});
+    }
+
+    /**
+     * SDK用户登录
+     *
+     * @param activity Activity上下文
+     * @param callback 登录回调对象
+     */
+    public void login(Activity activity, ICallback callback) {
+        if (checkSdkBridgeNull(Function.LOGIN, callback)) {
+            return;
+        }
+
+        if (checkSdkNonInit(Function.LOGIN, callback)) {
+            return;
+        }
+
+        if (System.currentTimeMillis() - clickLoginTime < CLICK_INTERVAL) {
+            Logger.e("调用登录接口太频繁,拦截此次操作");
+            return;
+        }
+        clickLoginTime = System.currentTimeMillis();
+        SdkBridgeManager.call(Function.LOGIN, new Class[]{Activity.class, ICallback.class}, new Object[]{activity, callback});
+    }
+
+    /**
+     * SDK用户登出账号
+     *
+     * @param activity Activity上下文
+     * @param callback 登出回调对象
+     */
+    public void logout(Activity activity, ICallback callback) {
+        if (checkSdkBridgeNull(Function.LOGOUT, callback)) {
+            return;
+        }
+
+        if (checkSdkNonInit(Function.LOGOUT, callback)) {
+            return;
+        }
+
+        if (System.currentTimeMillis() - clickLoginTime < CLICK_INTERVAL) {
+            Logger.e("调用登录接口后,调用登出账号接口间隔太短,拦截此次操作");
+            return;
+        }
+        if (System.currentTimeMillis() - clickLogoutTime < CLICK_INTERVAL) {
+            Logger.e("调用登出账号接口太频繁,拦截此次操作");
+            return;
+        }
+        clickLogoutTime = System.currentTimeMillis();
+        SdkBridgeManager.call(Function.LOGOUT, new Class[]{Activity.class, ICallback.class}, new Object[]{activity, callback});
+    }
+
+    /**
+     * SDK用户支付
+     *
+     * @param activity   Activity上下文
+     * @param chargeInfo 支付信息实体对象
+     * @param callback   支付回调对象
+     */
+    public void charge(Activity activity, SdkChargeInfo chargeInfo, ICallback callback) {
+        if (checkSdkBridgeNull(Function.CHARGE, callback)) {
+            return;
+        }
+
+        if (checkSdkNonInit(Function.CHARGE, callback)) {
+            return;
+        }
+
+        if (System.currentTimeMillis() - clickChargeTime < CLICK_INTERVAL) {
+            Logger.e("调用充值接口太频繁,拦截此次操作");
+            return;
+        }
+        clickChargeTime = System.currentTimeMillis();
+        SdkBridgeManager.call(Function.CHARGE, new Class[]{Activity.class, SdkChargeInfo.class, ICallback.class}, new Object[]{activity, chargeInfo, callback});
+    }
+
+
+    /**
+     * SDK角色创建信息上报
+     *
+     * @param activity Activity上下文
+     * @param roleInfo 角色信息实体
+     * @param callback 角色信息上报回调对象
+     */
+    public void roleCreate(Activity activity, SdkRoleInfo roleInfo, ICallback callback) {
+        if (checkSdkBridgeNull(Function.ROLE_CREATE, callback)) {
+            return;
+        }
+
+        if (checkSdkNonInit(Function.ROLE_CREATE, callback)) {
+            return;
+        }
+        SdkBridgeManager.call(Function.ROLE_CREATE, new Class[]{Activity.class, SdkRoleInfo.class, ICallback.class}, new Object[]{activity, roleInfo, callback});
+    }
+
+    /**
+     * SDK角色登录信息上报
+     *
+     * @param activity Activity上下文
+     * @param roleInfo 角色信息实体
+     * @param callback 角色信息上报回调对象
+     */
+    public void roleLauncher(Activity activity, SdkRoleInfo roleInfo, ICallback callback) {
+        if (checkSdkBridgeNull(Function.ROLE_LAUNCHER, callback)) {
+            return;
+        }
+
+        if (checkSdkNonInit(Function.ROLE_LAUNCHER, callback)) {
+            return;
+        }
+        SdkBridgeManager.call(Function.ROLE_LAUNCHER, new Class[]{Activity.class, SdkRoleInfo.class, ICallback.class}, new Object[]{activity, roleInfo, callback});
+    }
+
+    /**
+     * SDK角色升级信息上报
+     *
+     * @param activity Activity上下文
+     * @param roleInfo 角色信息实体
+     * @param callback 角色信息上报回调对象
+     */
+    public void roleUpgrade(Activity activity, SdkRoleInfo roleInfo, ICallback callback) {
+        if (checkSdkBridgeNull(Function.ROLE_UPGRADE, callback)) {
+            return;
+        }
+
+        if (checkSdkNonInit(Function.ROLE_UPGRADE, callback)) {
+            return;
+        }
+        SdkBridgeManager.call(Function.ROLE_UPGRADE, new Class[]{Activity.class, SdkRoleInfo.class, ICallback.class}, new Object[]{activity, roleInfo, callback});
+    }
+
+    /**
+     * 是否显示SDK退出框
+     *
+     * @param activity Activity上下文
+     */
+    public Boolean hasExitView(Activity activity) {
+        if (checkSdkBridgeNull(Function.HAS_EXIT_VIEW, null)) {
+            return false;
+        }
+
+        if (checkSdkNonInit(Function.HAS_EXIT_VIEW, null)) {
+            return false;
+        }
+
+        return (Boolean) SdkBridgeManager.callback(Function.HAS_EXIT_VIEW, new Class[]{Activity.class}, new Object[]{activity});
+    }
+
+    /**
+     * 显示退出框
+     *
+     * @param activity Activity上下文
+     * @param callback 退出回调对象
+     */
+    public void openExitView(Activity activity, ICallback callback) {
+        if (checkSdkBridgeNull(Function.OPEN_EXIT_VIEW, null)) {
+            return;
+        }
+
+        if (checkSdkNonInit(Function.OPEN_EXIT_VIEW, null)) {
+            return;
+        }
+
+        SdkBridgeManager.call(Function.OPEN_EXIT_VIEW, new Class[]{Activity.class, ICallback.class}, new Object[]{activity, callback});
+    }
+
+    /**
+     * 同步游戏Activity的onStart
+     */
+    public void onStart(Activity activity) {
+        if (checkSdkBridgeNull(Function.ON_START, null)) {
+            return;
+        }
+
+        SdkBridgeManager.call(Function.ON_START, new Class[]{Activity.class}, new Object[]{activity});
+    }
+
+    /**
+     * 同步游戏Activity的onRestart
+     */
+    public void onRestart(Activity activity) {
+        if (checkSdkBridgeNull(Function.ON_RESTART, null)) {
+            return;
+        }
+
+        SdkBridgeManager.call(Function.ON_RESTART, new Class[]{Activity.class}, new Object[]{activity});
+    }
+
+    /**
+     * 同步游戏Activity的onResume
+     */
+    public void onResume(Activity activity) {
+        if (checkSdkBridgeNull(Function.ON_RESUME, null)) {
+            return;
+        }
+
+        SdkBridgeManager.call(Function.ON_RESUME, new Class[]{Activity.class}, new Object[]{activity});
+    }
+
+    /**
+     * 同步游戏Activity的onPause
+     */
+    public void onPause(Activity activity) {
+        if (checkSdkBridgeNull(Function.ON_PAUSE, null)) {
+            return;
+        }
+
+        SdkBridgeManager.call(Function.ON_PAUSE, new Class[]{Activity.class}, new Object[]{activity});
+    }
+
+    /**
+     * 同步游戏Activity的onStop
+     */
+    public void onStop(Activity activity) {
+        if (checkSdkBridgeNull(Function.ON_STOP, null)) {
+            return;
+        }
+
+        SdkBridgeManager.call(Function.ON_STOP, new Class[]{Activity.class}, new Object[]{activity});
+    }
+
+    /**
+     * 同步游戏Activity的onDestroy
+     */
+    public void onDestroy(Activity activity) {
+        if (checkSdkBridgeNull(Function.ON_DESTROY, null)) {
+            return;
+        }
+
+        SdkBridgeManager.call(Function.ON_DESTROY, new Class[]{Activity.class}, new Object[]{activity});
+    }
+
+    /**
+     * 同步游戏Activity的onActivityResult
+     */
+    public void onActivityResult(Activity activity, int requestCode, int resultCode, Intent intent) {
+        if (checkSdkBridgeNull(Function.ON_ACTIVITY_RESULT, null)) {
+            return;
+        }
+
+        SdkBridgeManager.call(Function.ON_ACTIVITY_RESULT,
+                new Class[]{Activity.class, Integer.class, Integer.class, Intent.class},
+                new Object[]{activity, requestCode, resultCode, intent});
+    }
+
+    /**
+     * 同步游戏Activity的onNewIntent
+     */
+    public void onNewIntent(Activity activity, Intent intent) {
+        if (checkSdkBridgeNull(Function.ON_NEW_INTENT, null)) {
+            return;
+        }
+
+        SdkBridgeManager.call(Function.ON_NEW_INTENT, new Class[]{Activity.class, Intent.class}, new Object[]{activity, intent});
+    }
+
+    /**
+     * 权限请求
+     *
+     * @param activity    Activity上下文
+     * @param permissions 权限列表
+     * @param callback    权限请求回调对象
+     */
+    public void requestPermission(Activity activity, List<String> permissions, ICallback callback) {
+        if (checkSdkBridgeNull(Function.REQUEST_PERMISSION, null)) {
+            return;
+        }
+        SdkBridgeManager.call(Function.REQUEST_PERMISSION,
+                new Class[]{Activity.class, List.class, ICallback.class},
+                new Object[]{activity, permissions, callback});
+    }
+
+    public String getCurrentOpenId() {
+        if (checkSdkBridgeNull(Function.GET_CURRENT_USER_ID, null)) {
+            return "";
+        }
+
+        if (checkSdkNonInit(Function.GET_CURRENT_USER_ID, null)) {
+            return "";
+        }
+
+        return (String) SdkBridgeManager.callback(Function.GET_CURRENT_USER_ID, null, null);
+    }
+
+    public String getCurrentSdkVersion() {
+        return Version.VERSION_NAME;
+    }
+
+    private boolean checkSdkBridgeNull(String function, ICallback callback) {
+        if (mSdkBridge == null) {
+            Logger.e("invoke " + function + " error ... SdkBridge is null");
+            if (callback != null) {
+                callback.onResult(-1, "QSGameSdk初始化失败");
+            }
+            return true;
+        } else {
+            return false;
+        }
+    }
+
+    private boolean checkSdkNonInit(String function, ICallback callback) {
+        if (!doSdkInit) {
+            Logger.e("invoke " + function + " error ... QSGameSdk not initialized yet");
+            if (callback != null) {
+                callback.onResult(-1, "QSGameSdk还未进行初始化");
+            }
+            return true;
+        } else {
+            return false;
+        }
+    }
 }

+ 37 - 0
library_base/src/main/java/cn/yyxx/commsdk/base/entity/Function.java

@@ -0,0 +1,37 @@
+package cn.yyxx.commsdk.base.entity;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+
+/**
+ * @author #Suyghur.
+ * Created on 2021/12/25
+ */
+@Retention(RetentionPolicy.SOURCE)
+public @interface Function {
+    String ATTACH_BASE_CONTEXT = "attachBaseContext";
+    String INIT_APPLICATION = "initApplication";
+    String INITIALIZE = "initialize";
+    String LOGIN = "login";
+    String LOGOUT = "logout";
+    String CHARGE = "charge";
+    String ROLE_CREATE = "roleCreate";
+    String ROLE_LAUNCHER = "roleLauncher";
+    String ROLE_UPGRADE = "roleUpgrade";
+    String HAS_EXIT_VIEW = "hasExitView";
+    String OPEN_EXIT_VIEW = "openExitView";
+    String ON_START = "onStart";
+    String ON_RESUME = "onResume";
+    String ON_RESTART = "onRestart";
+    String ON_PAUSE = "onPause";
+    String ON_STOP = "onStop";
+    String ON_DESTROY = "onDestroy";
+    String ON_NEW_INTENT = "onNewIntent";
+    String ON_ACTIVITY_RESULT = "onActivityResult";
+    String ON_CONFIGURATION_CHANGED = "onConfigurationChanged";
+    String ON_REQUEST_PERMISSIONS_RESULT = "onRequestPermissionsResult";
+    String REQUEST_PERMISSION = "requestPermission";
+    String GET_CURRENT_USER_ID = "getCurrentUserId";
+    String GET_CURRENT_SDK_VERSION = "getCurrentSdkVersion";
+    String ON_FLOAT_CENTER_LOGOUT = "onFloatCenterLogout";
+}

+ 10 - 0
library_base/src/main/java/cn/yyxx/commsdk/base/entity/ResultInfo.java

@@ -0,0 +1,10 @@
+package cn.yyxx.commsdk.base.entity;
+
+/**
+ * @author #Suyghur.
+ * Created on 2021/12/26
+ */
+public class ResultInfo {
+
+
+}

+ 8 - 0
library_base/src/main/java/cn/yyxx/commsdk/base/entity/SdkChargeInfo.java

@@ -0,0 +1,8 @@
+package cn.yyxx.commsdk.base.entity;
+
+/**
+ * @author #Suyghur.
+ * Created on 2021/12/25
+ */
+public class SdkChargeInfo {
+}

+ 8 - 0
library_base/src/main/java/cn/yyxx/commsdk/base/entity/SdkRoleInfo.java

@@ -0,0 +1,8 @@
+package cn.yyxx.commsdk.base.entity;
+
+/**
+ * @author #Suyghur.
+ * Created on 2021/12/25
+ */
+public class SdkRoleInfo {
+}

+ 14 - 0
library_base/src/main/java/cn/yyxx/commsdk/base/internal/ICallback.java

@@ -0,0 +1,14 @@
+package cn.yyxx.commsdk.base.internal;
+
+/**
+ * @author #Suyghur.
+ * Created on 4/22/21
+ */
+public interface ICallback {
+
+    /**
+     * @param code   状态码
+     * @param result 回调信息
+     */
+    void onResult(int code, String result);
+}

+ 10 - 0
library_base/src/main/java/cn/yyxx/commsdk/base/internal/IInitialize.java

@@ -0,0 +1,10 @@
+package cn.yyxx.commsdk.base.internal;
+
+/**
+ * @author #Suyghur.
+ * Created on 2021/10/22
+ */
+public interface IInitialize {
+
+    void onResult(int code, String result);
+}

+ 11 - 0
library_base/src/main/java/cn/yyxx/commsdk/base/internal/IRequestCallback.java

@@ -0,0 +1,11 @@
+package cn.yyxx.commsdk.base.internal;
+
+import cn.yyxx.commsdk.base.entity.ResultInfo;
+
+/**
+ * @author #Suyghur.
+ * Created on 2021/12/26
+ */
+public interface IRequestCallback {
+    void onResponse(ResultInfo resultInfo);
+}

+ 15 - 0
library_base/src/main/java/cn/yyxx/commsdk/base/internal/feature/IApplication.java

@@ -0,0 +1,15 @@
+package cn.yyxx.commsdk.base.internal.feature;
+
+import android.app.Application;
+import android.content.Context;
+
+/**
+ * @author #Suyghur.
+ * Created on 2021/12/26
+ */
+public interface IApplication {
+
+    void attachBaseContext(Application application, Context context);
+
+    void initApplication(Application application);
+}

+ 33 - 0
library_base/src/main/java/cn/yyxx/commsdk/base/internal/feature/IFeature.java

@@ -0,0 +1,33 @@
+package cn.yyxx.commsdk.base.internal.feature;
+
+import android.app.Activity;
+
+import cn.yyxx.commsdk.base.entity.SdkChargeInfo;
+import cn.yyxx.commsdk.base.internal.ICallback;
+
+/**
+ * @author #Suyghur.
+ * Created on 2021/12/26
+ */
+public interface IFeature {
+
+    void initialize(Activity activity, boolean isLandscape, ICallback callback);
+
+    void login(Activity activity, ICallback callback);
+
+    void logout(Activity activity, ICallback callback);
+
+    void charge(Activity activity, SdkChargeInfo chargeInfo, ICallback callback);
+
+    boolean hasExitView(Activity activity);
+
+    void openExitView(Activity activity, ICallback callback);
+
+    void onDestroy(Activity activity);
+
+    String getUserId();
+
+    String getChannelVersion();
+
+    String getChannelName();
+}

+ 25 - 0
library_base/src/main/java/cn/yyxx/commsdk/base/internal/feature/ILifeCycle.java

@@ -0,0 +1,25 @@
+package cn.yyxx.commsdk.base.internal.feature;
+
+import android.app.Activity;
+import android.content.Intent;
+
+/**
+ * @author #Suyghur.
+ * Created on 2021/12/26
+ */
+public interface ILifeCycle {
+
+    void onStart(Activity activity);
+
+    void onResume(Activity activity);
+
+    void onReStart(Activity activity);
+
+    void onPause(Activity activity);
+
+    void onStop(Activity activity);
+
+    void onActivityResult(Activity activity, int requestCode, int resultCode, Intent data);
+
+    void onNewIntent(Activity activity, Intent intent);
+}

+ 23 - 0
library_base/src/main/java/cn/yyxx/commsdk/base/internal/feature/IOrder.java

@@ -0,0 +1,23 @@
+package cn.yyxx.commsdk.base.internal.feature;
+
+import android.app.Activity;
+
+import cn.yyxx.commsdk.base.entity.SdkChargeInfo;
+import cn.yyxx.commsdk.base.internal.IRequestCallback;
+
+/**
+ * @author #Suyghur.
+ * Created on 2021/12/26
+ */
+public interface IOrder {
+
+    /**
+     * 获取订单号
+     * 不是所有渠道都需要自定义获取订单号
+     *
+     * @param activity
+     * @param sdkChargeInfo
+     * @param requestCallback
+     */
+    void getOrderId(Activity activity, SdkChargeInfo sdkChargeInfo, IRequestCallback requestCallback);
+}

+ 19 - 0
library_base/src/main/java/cn/yyxx/commsdk/base/internal/feature/IRoleData.java

@@ -0,0 +1,19 @@
+package cn.yyxx.commsdk.base.internal.feature;
+
+import android.app.Activity;
+
+import cn.yyxx.commsdk.base.entity.SdkRoleInfo;
+import cn.yyxx.commsdk.base.internal.ICallback;
+
+/**
+ * @author #Suyghur.
+ * Created on 2021/12/26
+ */
+public interface IRoleData {
+
+    void roleCreate(Activity activity, SdkRoleInfo roleInfo, ICallback callback);
+
+    void roleLauncher(Activity activity, SdkRoleInfo roleInfo, ICallback callback);
+
+    void roleUpgrade(Activity activity, SdkRoleInfo roleInfo, ICallback callback);
+}

+ 87 - 0
library_base/src/main/java/cn/yyxx/commsdk/base/utils/Logger.java

@@ -0,0 +1,87 @@
+package cn.yyxx.commsdk.base.utils;
+
+import android.app.Application;
+
+import com.dolin.zap.Zap;
+import com.dolin.zap.entity.Config;
+import com.dolin.zap.entity.Level;
+
+import cn.yyxx.support.hawkeye.LogUtils;
+
+/**
+ * @author #Suyghur.
+ * Created on 2021/4/22
+ */
+public class Logger {
+
+    private static final String TAG = "yyxx_commsdk";
+
+    private static boolean hasZapInit = false;
+
+    public static void initZap(Application application) {
+        Level level;
+        if (LogUtils.DEBUG) {
+            level = Level.DEBUG;
+        } else {
+            level = Level.INFO;
+        }
+        //初始化zap日志框架
+        Config config = new Config.Builder()
+                //logcat输出最低等级
+                .setLogcatLevel(level)
+                //是否开启缓存日志
+                .setRecordEnable(true)
+                //缓存日志最低等级
+                .setRecordLevel(Level.DEBUG)
+                //是否开启压缩缓存日志内容
+                .setCompressEnable(true)
+                //缓存文件的过期时间
+                .setOverdueDay(3)
+                //缓存文件大小限制,超过则会自动扩容新文件
+                .setFileSizeLimitDay(15)
+                .create();
+        Zap.initialize(application, config);
+        hasZapInit = true;
+    }
+
+    public static void d(Object object) {
+        d(TAG, object);
+    }
+
+    public static void d(String tag, Object object) {
+        if (hasZapInit) {
+            Zap.d(tag, object);
+        } else {
+            LogUtils.d(tag, object);
+        }
+    }
+
+    public static void i(Object object) {
+        i(TAG, object);
+    }
+
+    public static void i(String tag, Object object) {
+        if (hasZapInit) {
+            Zap.i(tag, object);
+        } else {
+            LogUtils.i(tag, object);
+        }
+    }
+
+    public static void e(Object object) {
+        e(TAG, object);
+    }
+
+    public static void e(String tag, Object object) {
+        if (hasZapInit) {
+            Zap.e(tag, object);
+        } else {
+            LogUtils.e(tag, object);
+        }
+    }
+
+    public static void logHandler(String msg) {
+        LogUtils.logHandler(msg);
+    }
+
+}

+ 2 - 6
library_channel/build.gradle

@@ -32,12 +32,8 @@ android {
 }
 
 dependencies {
-//    api files('../libs/oaid_sdk_1.0.25.jar')
-//    api files('../libs/mmkv-static-1.2.8.jar')
-//    api files('../libs/dolin_zap_1.0.0.jar')
-//    api files('../libs/yyxx_support_1.0.2.jar')
-//    api files('../libs/ali_authsdk_2.12.1.jar')
-//    api files('../libs/android-support-v4.jar')
+    compileOnly project(':library_base')
+    compileOnly project(':library_channel_repository')
 }
 
 //apply from: 'buildJar.gradle'

+ 0 - 8
library_channel/src/main/java/cn/yyxx/commsdk/impl/ChannelBridge.java

@@ -1,8 +0,0 @@
-package cn.yyxx.commsdk.impl;
-
-/**
- * @author #Suyghur.
- * Created on 2021/12/25
- */
-public class ChannelBridge {
-}

+ 25 - 0
library_channel/src/main/java/cn/yyxx/commsdk/impl/ChannelSdkGenerator.java

@@ -0,0 +1,25 @@
+package cn.yyxx.commsdk.impl;
+
+import android.content.Context;
+
+import cn.yyxx.commsdk.base.internal.feature.IFeature;
+import cn.yyxx.commsdk.impl.channel.ChannelSdkYYXX;
+import cn.yyxx.commsdk.impl.entity.ChannelId;
+
+/**
+ * @author #Suyghur.
+ * Created on 2021/12/26
+ */
+public class ChannelSdkGenerator {
+
+    public static IFeature getChannelInstance(Context context, int channelId) {
+        IFeature instance = null;
+        switch (channelId) {
+            case ChannelId.YYXX:
+                instance = new ChannelSdkYYXX();
+                break;
+        }
+
+        return instance;
+    }
+}

+ 138 - 0
library_channel/src/main/java/cn/yyxx/commsdk/impl/ChannelSdkImpl.java

@@ -0,0 +1,138 @@
+package cn.yyxx.commsdk.impl;
+
+import android.app.Activity;
+import android.app.Application;
+import android.content.Context;
+import android.content.Intent;
+
+import java.util.List;
+
+import cn.yyxx.commsdk.base.entity.SdkChargeInfo;
+import cn.yyxx.commsdk.base.entity.SdkRoleInfo;
+import cn.yyxx.commsdk.base.internal.ICallback;
+import cn.yyxx.commsdk.base.internal.feature.IApplication;
+import cn.yyxx.commsdk.base.internal.feature.IFeature;
+import cn.yyxx.commsdk.base.internal.feature.ILifeCycle;
+import cn.yyxx.commsdk.base.internal.feature.IRoleData;
+
+/**
+ * @author #Suyghur.
+ * Created on 2021/12/25
+ */
+public class ChannelSdkImpl {
+
+    private IFeature impl;
+    private int channelId = -1;
+
+    public ChannelSdkImpl(Context context) {
+        //TODO 从配置文件读取channelId
+        impl = ChannelSdkGenerator.getChannelInstance(context, channelId);
+    }
+
+    public void attachBaseContext(Application application, Context context) {
+        if (impl instanceof IApplication) {
+            ((IApplication) impl).attachBaseContext(application, context);
+        }
+    }
+
+    public void initApplication(Application application) {
+        if (impl instanceof IApplication) {
+            ((IApplication) impl).initApplication(application);
+        }
+    }
+
+    public void initialize(Activity activity, Boolean isLandscape, ICallback callback) {
+        impl.initialize(activity, isLandscape, callback);
+    }
+
+    public void onFloatCenterLogout(Activity activity, ICallback callback) {
+    }
+
+    public void login(Activity activity, final ICallback callback) {
+        impl.login(activity, callback);
+    }
+
+    public void logout(Activity activity, final ICallback callback) {
+        impl.logout(activity, callback);
+    }
+
+    public void charge(Activity activity, SdkChargeInfo chargeInfo, ICallback callback) {
+        impl.charge(activity, chargeInfo, callback);
+    }
+
+    public void roleCreate(Activity activity, SdkRoleInfo roleInfo, ICallback callback) {
+        if (impl instanceof IRoleData) {
+            ((IRoleData) impl).roleCreate(activity, roleInfo, callback);
+        }
+    }
+
+    public void roleLauncher(Activity activity, SdkRoleInfo roleInfo, ICallback callback) {
+        if (impl instanceof IRoleData) {
+            ((IRoleData) impl).roleLauncher(activity, roleInfo, callback);
+        }
+    }
+
+    public void roleUpgrade(Activity activity, SdkRoleInfo roleInfo, ICallback callback) {
+        if (impl instanceof IRoleData) {
+            ((IRoleData) impl).roleUpgrade(activity, roleInfo, callback);
+        }
+    }
+
+    public boolean hasExitView(Activity activity) {
+        return impl.hasExitView(activity);
+    }
+
+    public void openExitView(Activity activity, final ICallback callback) {
+        impl.openExitView(activity, callback);
+    }
+
+    public void onStart(Activity activity) {
+        if (impl instanceof ILifeCycle) {
+            ((ILifeCycle) impl).onStart(activity);
+        }
+    }
+
+    public void onRestart(Activity activity) {
+        if (impl instanceof ILifeCycle) {
+            ((ILifeCycle) impl).onReStart(activity);
+        }
+    }
+
+    public void onResume(Activity activity) {
+        if (impl instanceof ILifeCycle) {
+            ((ILifeCycle) impl).onResume(activity);
+        }
+    }
+
+
+    public void onPause(Activity activity) {
+        if (impl instanceof ILifeCycle) {
+            ((ILifeCycle) impl).onPause(activity);
+        }
+    }
+
+    public void onStop(Activity activity) {
+        if (impl instanceof ILifeCycle) {
+            ((ILifeCycle) impl).onStop(activity);
+        }
+    }
+
+    public void onDestroy(Activity activity) {
+        impl.onDestroy(activity);
+    }
+
+    public void onActivityResult(Activity activity, int requestCode, int resultCode, Intent data) {
+        if (impl instanceof ILifeCycle) {
+            ((ILifeCycle) impl).onActivityResult(activity, requestCode, resultCode, data);
+        }
+    }
+
+    public void onNewIntent(Activity activity, Intent intent) {
+        if (impl instanceof ILifeCycle) {
+            ((ILifeCycle) impl).onNewIntent(activity, intent);
+        }
+    }
+
+    public void requestPermission(Activity activity, List<String> permissions, ICallback callback) {
+    }
+}

+ 63 - 0
library_channel/src/main/java/cn/yyxx/commsdk/impl/channel/ChannelSdkYYXX.java

@@ -0,0 +1,63 @@
+package cn.yyxx.commsdk.impl.channel;
+
+import android.app.Activity;
+
+import cn.yyxx.commsdk.base.entity.SdkChargeInfo;
+import cn.yyxx.commsdk.base.internal.ICallback;
+import cn.yyxx.commsdk.base.internal.feature.IFeature;
+
+/**
+ * @author #Suyghur.
+ * Created on 2021/12/26
+ */
+public class ChannelSdkYYXX implements IFeature {
+    @Override
+    public void initialize(Activity activity, boolean isLandscape, ICallback callback) {
+
+    }
+
+    @Override
+    public void login(Activity activity, ICallback callback) {
+
+    }
+
+    @Override
+    public void logout(Activity activity, ICallback callback) {
+
+    }
+
+    @Override
+    public void charge(Activity activity, SdkChargeInfo chargeInfo, ICallback callback) {
+
+    }
+
+    @Override
+    public boolean hasExitView(Activity activity) {
+        return false;
+    }
+
+    @Override
+    public void openExitView(Activity activity, ICallback callback) {
+
+    }
+
+    @Override
+    public void onDestroy(Activity activity) {
+
+    }
+
+    @Override
+    public String getUserId() {
+        return null;
+    }
+
+    @Override
+    public String getChannelVersion() {
+        return null;
+    }
+
+    @Override
+    public String getChannelName() {
+        return null;
+    }
+}

+ 11 - 0
library_channel/src/main/java/cn/yyxx/commsdk/impl/entity/ChannelId.java

@@ -0,0 +1,11 @@
+package cn.yyxx.commsdk.impl.entity;
+
+/**
+ * @author #Suyghur.
+ * Created on 2021/12/26
+ */
+public class ChannelId {
+
+    public static final int YYXX = 0;
+    public static final int XI_YUAN = 1;
+}

+ 1 - 0
library_core/build.gradle

@@ -51,4 +51,5 @@ android {
 
 dependencies {
 
+    api project(':library_base')
 }

+ 111 - 1
library_core/src/main/java/cn/yyxx/commsdk/core/SdkBridge.java

@@ -1,8 +1,118 @@
 package cn.yyxx.commsdk.core;
 
+import android.app.Activity;
+import android.app.Application;
+import android.content.Context;
+import android.content.Intent;
+
+import java.util.List;
+
+import cn.yyxx.commsdk.base.entity.SdkChargeInfo;
+import cn.yyxx.commsdk.base.entity.SdkRoleInfo;
+import cn.yyxx.commsdk.base.internal.ICallback;
+import cn.yyxx.commsdk.base.internal.IInitialize;
+import cn.yyxx.commsdk.core.impl.SdkBridgeImpl;
+
 /**
  * @author #Suyghur.
  * Created on 2021/12/25
  */
-public class SdkBridge {
+public final class SdkBridge {
+
+    private SdkBridgeImpl impl = null;
+
+    public SdkBridge(Context context) {
+        if (null == impl) {
+            impl = new SdkBridgeImpl(context);
+        }
+    }
+
+    public void attachBaseContext(Application application, Context context) {
+        impl.attachBaseContext(application, context);
+    }
+
+    public void initApplication(Application application) {
+        impl.initApplication(application);
+    }
+
+    public void initialize(Activity activity, Boolean isLandscape, IInitialize callback) {
+        impl.initialize(activity, isLandscape, callback);
+    }
+
+    public void onFloatCenterLogout(Activity activity, ICallback callback) {
+        impl.onFloatCenterLogout(activity, callback);
+    }
+
+    public void login(Activity activity, final ICallback callback) {
+        impl.login(activity, callback);
+    }
+
+    public void logout(Activity activity, final ICallback callback) {
+        impl.logout(activity, callback);
+    }
+
+    public void charge(Activity activity, SdkChargeInfo chargeInfo, ICallback callback) {
+        impl.charge(activity, chargeInfo, callback);
+    }
+
+    public void roleCreate(Activity activity, SdkRoleInfo roleInfo, ICallback callback) {
+        impl.roleCreate(activity, roleInfo, callback);
+    }
+
+    public void roleLauncher(Activity activity, SdkRoleInfo roleInfo, ICallback callback) {
+        impl.roleLauncher(activity, roleInfo, callback);
+    }
+
+    public void roleUpgrade(Activity activity, SdkRoleInfo roleInfo, ICallback callback) {
+        impl.roleUpgrade(activity, roleInfo, callback);
+    }
+
+    public boolean hasExitView(Activity activity) {
+        return impl.hasExitView(activity);
+    }
+
+    public void openExitView(Activity activity, final ICallback callback) {
+        impl.openExitView(activity, callback);
+    }
+
+    public void onStart(Activity activity) {
+        impl.onStart(activity);
+    }
+
+    public void onRestart(Activity activity) {
+        impl.onRestart(activity);
+    }
+
+    public void onResume(Activity activity) {
+        impl.onResume(activity);
+    }
+
+
+    public void onPause(Activity activity) {
+        impl.onPause(activity);
+    }
+
+    public void onStop(Activity activity) {
+        impl.onStop(activity);
+    }
+
+    public void onDestroy(Activity activity) {
+        impl.onDestroy(activity);
+    }
+
+    public void onActivityResult(Activity activity, int requestCode, int resultCode, Intent intent) {
+        impl.onActivityResult(activity, requestCode, resultCode, intent);
+    }
+
+    public void onNewIntent(Activity activity, Intent intent) {
+        impl.onNewIntent(activity, intent);
+    }
+
+    public void requestPermission(Activity activity, List<String> permissions, ICallback callback) {
+        impl.requestPermission(activity, permissions, callback);
+    }
+
+    public String getCurrentUserId() {
+        return impl.getCurrentUserId();
+    }
 }

+ 93 - 0
library_core/src/main/java/cn/yyxx/commsdk/core/impl/SdkBridgeImpl.java

@@ -0,0 +1,93 @@
+package cn.yyxx.commsdk.core.impl;
+
+import android.app.Activity;
+import android.app.Application;
+import android.content.Context;
+import android.content.Intent;
+
+import java.util.List;
+
+import cn.yyxx.commsdk.base.entity.SdkChargeInfo;
+import cn.yyxx.commsdk.base.entity.SdkRoleInfo;
+import cn.yyxx.commsdk.base.internal.ICallback;
+import cn.yyxx.commsdk.base.internal.IInitialize;
+
+/**
+ * @author #Suyghur.
+ * Created on 2021/12/25
+ */
+public final class SdkBridgeImpl {
+
+    public SdkBridgeImpl(Context context) {
+
+    }
+
+    public void attachBaseContext(Application application, Context context) {
+    }
+
+    public void initApplication(Application application) {
+    }
+
+    public void initialize(Activity activity, Boolean isLandscape, IInitialize callback) {
+    }
+
+    public void onFloatCenterLogout(Activity activity, ICallback callback) {
+    }
+
+    public void login(Activity activity, final ICallback callback) {
+    }
+
+    public void logout(Activity activity, final ICallback callback) {
+    }
+
+    public void charge(Activity activity, SdkChargeInfo chargeInfo, ICallback callback) {
+    }
+
+    public void roleCreate(Activity activity, SdkRoleInfo roleInfo, ICallback callback) {
+    }
+
+    public void roleLauncher(Activity activity, SdkRoleInfo roleInfo, ICallback callback) {
+    }
+
+    public void roleUpgrade(Activity activity, SdkRoleInfo roleInfo, ICallback callback) {
+    }
+
+    public boolean hasExitView(Activity activity) {
+        return false;
+    }
+
+    public void openExitView(Activity activity, final ICallback callback) {
+    }
+
+    public void onStart(Activity activity) {
+    }
+
+    public void onRestart(Activity activity) {
+    }
+
+    public void onResume(Activity activity) {
+    }
+
+
+    public void onPause(Activity activity) {
+    }
+
+    public void onStop(Activity activity) {
+    }
+
+    public void onDestroy(Activity activity) {
+    }
+
+    public void onActivityResult(Activity activity, int requestCode, int resultCode, Intent intent) {
+    }
+
+    public void onNewIntent(Activity activity, Intent intent) {
+    }
+
+    public void requestPermission(Activity activity, List<String> permissions, ICallback callback) {
+    }
+
+    public String getCurrentUserId() {
+        return "";
+    }
+}

BIN
libs/dolin_zap_1.0.0.jar


BIN
libs/mmkv-static-1.2.8.jar


BIN
libs/oaid_sdk_1.0.25.jar


BIN
libs/yyxx_support_1.0.2.jar