123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342 |
- package cn.yyxx.eyuancomm.comm
- 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 cn.yyxx.eyuancomm.Version
- import cn.yyxx.eyuancomm.comm.entity.Function
- import cn.yyxx.eyuancomm.comm.entity.SdkChargeInfo
- import cn.yyxx.eyuancomm.comm.entity.SdkEvent
- import cn.yyxx.eyuancomm.comm.entity.SdkRoleInfo
- import cn.yyxx.eyuancomm.comm.impl.CommSdkImpl
- import cn.yyxx.eyuancomm.comm.internal.ICallback
- import cn.yyxx.eyuancomm.comm.utils.Logger
- import cn.yyxx.support.AppUtils
- /**
- * @author #Suyghur.
- * Created on 2021/06/09
- */
- class EYuanCommSdk private constructor() {
- private var commSdkImpl: CommSdkImpl? = null
- private var processName: String = ""
- private var clickLoginTime = 0L
- private var clickLogoutTime = 0L
- private var clickChargeTime = 0L
- companion object {
- private const val CLICK_INTERVAL: Int = 1500
- @JvmStatic
- fun getInstance(): EYuanCommSdk {
- return EYuanCommSdkHolder.INSTANCE
- }
- private object EYuanCommSdkHolder {
- val INSTANCE: EYuanCommSdk = EYuanCommSdk()
- }
- /**
- * 防止单例对象在反序列化时重新生成对象
- */
- private fun readResolve(): Any {
- return EYuanCommSdkHolder.INSTANCE
- }
- }
- /**
- * 同步Application中的attachBaseContext
- */
- fun attachBaseContext(application: Application, context: Context) {
- if (TextUtils.isEmpty(processName)) {
- this.processName = AppUtils.getProcessName(application)
- }
- if (TextUtils.isEmpty(processName) || processName != context.packageName) {
- return
- }
- if (commSdkImpl == null) {
- commSdkImpl = CommSdkImpl(application)
- }
- commSdkImpl?.attachBaseContext(application, context)
- }
- /**
- * 同步Application中的onCreate
- */
- fun initApplication(application: Application) {
- if (TextUtils.isEmpty(processName)) {
- this.processName = AppUtils.getProcessName(application)
- }
- //处理Android P webView的坑
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
- try {
- if (application.packageName != processName) {
- WebView.setDataDirectorySuffix(processName)
- }
- } catch (e: Exception) {
- e.printStackTrace()
- }
- }
- if (TextUtils.isEmpty(processName) || processName != application.packageName) {
- return
- }
- if (commSdkImpl == null) {
- commSdkImpl = CommSdkImpl(application)
- }
- commSdkImpl?.initApplication(application)
- }
- /**
- * SDK初始化
- *
- * @param activity Activity上下文
- * @param isLandscape 是否横屏
- * @param callback SDK初始化回调
- */
- fun initialize(activity: Activity, isLandscape: Boolean, callback: ICallback) {
- if (checkSdkImplNull(Function.INITIALIZE, callback)) {
- return
- }
- commSdkImpl?.initialize(activity, isLandscape, callback)
- }
- /**
- * SDK用户登录
- *
- * @param activity Activity上下文
- * @param callback 登录回调对象
- */
- fun login(activity: Activity, callback: ICallback) {
- if (checkSdkImplNull(Function.LOGIN, callback)) {
- return
- }
- if (System.currentTimeMillis() - clickLoginTime < CLICK_INTERVAL) {
- Logger.e("调用登录接口太频繁,拦截此次操作")
- callback.onResult(-1, "调用登录接口太频繁")
- return
- }
- clickLoginTime = System.currentTimeMillis()
- commSdkImpl?.login(activity, callback)
- }
- /**
- * SDK用户登出账号
- *
- * @param activity Activity上下文
- * @param callback 登出回调对象
- */
- fun logout(activity: Activity, callback: ICallback) {
- if (checkSdkImplNull(Function.LOGOUT, callback)) {
- return
- }
- if (System.currentTimeMillis() - clickLoginTime < CLICK_INTERVAL) {
- Logger.e("调用登录接口后,调用登出账号接口间隔太短,拦截此次操作")
- callback.onResult(-1, "调用登录接口后,调用登出账号接口间隔太短")
- return
- }
- if (System.currentTimeMillis() - clickLogoutTime < CLICK_INTERVAL) {
- Logger.e("调用登出账号接口太频繁,拦截此次操作")
- callback.onResult(-1, "调用登出账号接口太频繁")
- return
- }
- clickLogoutTime = System.currentTimeMillis()
- commSdkImpl?.logout(activity, callback)
- }
- /**
- * SDK浮窗账号切换
- *
- * @param callback 切换回调对象
- */
- fun setOnFloatBallLogout(callback: ICallback) {
- if (checkSdkImplNull(Function.SET_ON_FLOAT_BALL_LOGOUT, callback)) {
- return
- }
- commSdkImpl?.setOnFloatBallLogout(callback)
- }
- /**
- * SDK用户支付
- *
- * @param activity Activity上下文
- * @param chargeInfo 支付信息实体对象
- * @param callback 支付回调对象
- */
- fun charge(activity: Activity, chargeInfo: SdkChargeInfo, callback: ICallback) {
- if (checkSdkImplNull(Function.CHARGE, callback)) {
- return
- }
- if (System.currentTimeMillis() - clickChargeTime < CLICK_INTERVAL) {
- Logger.e("调用充值接口太频繁,拦截此次操作")
- callback.onResult(-1, "调用充值接口太频繁")
- return
- }
- clickChargeTime = System.currentTimeMillis()
- commSdkImpl?.charge(activity, chargeInfo, callback)
- }
- /**
- * SDK角色创建信息上报
- *
- * @param activity Activity上下文
- * @param roleInfo 角色信息实体
- */
- fun roleCreate(activity: Activity, roleInfo: SdkRoleInfo) {
- if (checkSdkImplNull(Function.ROLE_CREATE, null)) {
- return
- }
- commSdkImpl?.roleCreate(activity, roleInfo)
- }
- /**
- * SDK角色登录信息上报
- *
- * @param activity Activity上下文
- * @param roleInfo 角色信息实体
- */
- fun roleLauncher(activity: Activity, roleInfo: SdkRoleInfo) {
- if (checkSdkImplNull(Function.ROLE_LAUNCHER, null)) {
- return
- }
- commSdkImpl?.roleLauncher(activity, roleInfo)
- }
- /**
- * SDK角色升级信息上报
- *
- * @param activity Activity上下文
- * @param roleInfo 角色信息实体
- */
- fun roleLevelUp(activity: Activity, roleInfo: SdkRoleInfo) {
- if (checkSdkImplNull(Function.ROLE_LEVEL_UP, null)) {
- return
- }
- commSdkImpl?.roleLevelUp(activity, roleInfo)
- }
- /**
- * 是否有渠道退出框
- *
- * @param activity Activity上下文
- */
- fun hasExitView(activity: Activity): Boolean {
- return if (checkSdkImplNull(Function.HAS_EXIT_VIEW, null)) {
- false
- } else {
- commSdkImpl!!.hasExitView(activity)
- }
- }
- /**
- * 显示退出框
- *
- * @param activity Activity上下文
- * @param callback 退出回调对象
- */
- fun openExitView(activity: Activity, callback: ICallback) {
- if (checkSdkImplNull(Function.OPEN_EXIT_VIEW, callback)) {
- return
- }
- commSdkImpl?.openExitView(activity, callback)
- }
- fun traceEvent(context: Context, sdkEvent: SdkEvent) {
- if (checkSdkImplNull(Function.TRACE_EVENT, null)) {
- return
- }
- commSdkImpl?.traceEvent(context, sdkEvent)
- }
- fun onStart(activity: Activity) {
- if (checkSdkImplNull(Function.ON_START, null)) {
- return
- }
- commSdkImpl?.onStart(activity)
- }
- fun onRestart(activity: Activity) {
- if (checkSdkImplNull(Function.ON_RESTART, null)) {
- return
- }
- commSdkImpl?.onRestart(activity)
- }
- fun onResume(activity: Activity) {
- if (checkSdkImplNull(Function.ON_RESUME, null)) {
- return
- }
- commSdkImpl?.onResume(activity)
- }
- fun onPause(activity: Activity) {
- if (checkSdkImplNull(Function.ON_PAUSE, null)) {
- return
- }
- commSdkImpl?.onPause(activity)
- }
- fun onStop(activity: Activity) {
- if (checkSdkImplNull(Function.ON_STOP, null)) {
- return
- }
- commSdkImpl?.onStop(activity)
- }
- fun onDestroy(activity: Activity) {
- if (checkSdkImplNull(Function.ON_DESTROY, null)) {
- return
- }
- commSdkImpl?.onDestroy(activity)
- }
- fun onActivityResult(activity: Activity, requestCode: Int, resultCode: Int, data: Intent?) {
- if (checkSdkImplNull(Function.ON_ACTIVITY_RESULT, null)) {
- return
- }
- commSdkImpl?.onActivityResult(activity, requestCode, resultCode, data)
- }
- fun onNewIntent(activity: Activity, intent: Intent?) {
- if (checkSdkImplNull(Function.ON_NEW_INTENT, null)) {
- return
- }
- commSdkImpl?.onNewIntent(activity, intent)
- }
- fun getCurrentUserId(): String {
- return if (checkSdkImplNull(Function.GET_CURRENT_USER_ID, null)) {
- return ""
- } else {
- commSdkImpl!!.getCurrentUserId()
- }
- }
- fun getSdkVersion(): String {
- return Version.VERSION_NAME
- }
- private fun checkSdkImplNull(function: String, callback: ICallback?): Boolean {
- return if (commSdkImpl == null) {
- Logger.e("invoke $function error ... EYuanCommSdk initialized failed or not initialized yet")
- callback?.onResult(-1, "EYuanCommSdk 初始化失败或还未进行初始化")
- true
- } else {
- false
- }
- }
- }
|