From 7e2df20ccc7cdfb528d309369460a4f3d66afdf1 Mon Sep 17 00:00:00 2001
From: liuxue <q3213421wrwqr>
Date: 星期四, 29 七月 2021 17:51:09 +0800
Subject: [PATCH] 0000 增加bt3 quick android 和 ios 的 SDK

---
 Channel/Android/qkbt3game/release/libs/library-release-qkbt3game.aar                              |    0 
 Channel/IOS/qkbt3game/Plugins/The2thWorldSDK/The2thWorldRES.bundle/TY_AN_34.png                   |    0 
 Channel/IOS/qkbt3game/Plugins/QuickSDK/SMPCQuickSDK.framework/SMPCQuickSDK                        |    0 
 Channel/IOS/qkbt3game/Plugins/QuickSDK/libSMPCQuickChannel.a                                      |    0 
 SdkProject/channel/qkbt3game/build.gradle                                                         |    4 
 SdkProject/channel/qkbt3game/java/com/secondworld/sdk/BtGameMain.java                             |   89 ++++
 Channel/IOS/qkbt3game/Plugins/QuickSDK/SMPCQuickSDK.framework/Headers/SMPCQuickSDKDefines.h       |   90 ++++
 Channel/IOS/qkbt3game/Plugins/QuickSDK/SMPCQuickSDK.framework/Headers/SMPCQuickSDK.h              |  196 +++++++++
 SdkProject/channel/qkbt3game/java/com/secondworld/sdk/BtGamePlatform.java                         |    9 
 Channel/IOS/qkbt3game/Plugins/QuickSDK/SMPCQuickSDK.framework/Headers/SMPCQuickSDKInitConfigure.h |   17 
 Channel/IOS/qkbt3game/Plugins/The2thWorldSDK/The2thWorldRES.bundle/The2thWorldSDKConfig.plist     |   12 
 SdkProject/channel/qkbt3game/deps.gradle                                                          |    1 
 Channel/IOS/qkbt3game/Plugins/QuickSDK/SMPCQuickSDK.framework/Headers/SMPCQuickSDKPayOrderInfo.h  |   27 +
 SdkProject/channel/qkbt3game/AndroidManifest.xml                                                  |   43 ++
 Channel/IOS/qkbt3game/Plugins/The2thWorldSDK/UniversalSDK.h                                       |   78 +++
 Channel/Android/qkbt3game/debug/libs/library-debug-qkbt3game.aar                                  |    0 
 Channel/IOS/qkbt3game/Plugins/The2thWorldSDK/UniversalSDK.mm                                      |  561 ++++++++++++++++++++++++++
 Channel/Android/qkbt3game/AndroidManifest.xml                                                     |   21 +
 Channel/Android/qkbt3game/deps.gradle                                                             |    4 
 SdkProject/channel/qkbt3game/java/com/secondworld/sdk/BtGameApp.java                              |   21 +
 Channel/IOS/qkbt3game/Plugins/QuickSDK/SMPCQuickSDK.framework/Headers/SMPCQuickSDKShareInfo.h     |   28 +
 SdkProject/channel/qkbt3game/config.properties                                                    |    1 
 SdkProject/gradle.properties                                                                      |    2 
 Channel/IOS/qkbt3game/Plugins/QuickSDK/SMPCQuickSDK.framework/Headers/SMPCQuickSDKGameRoleInfo.h  |   23 +
 24 files changed, 1,226 insertions(+), 1 deletions(-)

diff --git a/Channel/Android/qkbt3game/AndroidManifest.xml b/Channel/Android/qkbt3game/AndroidManifest.xml
new file mode 100644
index 0000000..f83e940
--- /dev/null
+++ b/Channel/Android/qkbt3game/AndroidManifest.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- GENERATED BY UNITY. REMOVE THIS COMMENT TO PREVENT OVERWRITING WHEN EXPORTING AGAIN-->
+<manifest
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    package="com.unity3d.player"
+    xmlns:tools="http://schemas.android.com/tools">
+    <application
+	android:allowNativeHeapPointerTagging="false">
+        <activity android:name="com.secondworld.sdk.SplashActivity">
+            <intent-filter>
+                <action android:name="android.intent.action.MAIN" />
+                <category android:name="android.intent.category.LAUNCHER" />
+            </intent-filter>
+        </activity>
+
+         <activity android:name="com.secondworld.sdk.GameActivity"
+                  android:theme="@style/UnityThemeSelector">
+            <meta-data android:name="unityplayer.UnityActivity" android:value="true" />
+         </activity>
+    </application>
+</manifest>
diff --git a/Channel/Android/qkbt3game/debug/libs/library-debug-qkbt3game.aar b/Channel/Android/qkbt3game/debug/libs/library-debug-qkbt3game.aar
new file mode 100644
index 0000000..efa13a7
--- /dev/null
+++ b/Channel/Android/qkbt3game/debug/libs/library-debug-qkbt3game.aar
Binary files differ
diff --git a/Channel/Android/qkbt3game/deps.gradle b/Channel/Android/qkbt3game/deps.gradle
new file mode 100644
index 0000000..7526ca5
--- /dev/null
+++ b/Channel/Android/qkbt3game/deps.gradle
@@ -0,0 +1,4 @@
+//姝よ剼鏈负娓犻亾鐨勭涓夋柟杩滅▼渚濊禆搴撻厤缃紝浼氬鍒跺埌unity涓敤浜庢瀯寤�
+dependencies {
+
+}
diff --git a/Channel/Android/qkbt3game/release/libs/library-release-qkbt3game.aar b/Channel/Android/qkbt3game/release/libs/library-release-qkbt3game.aar
new file mode 100644
index 0000000..7493371
--- /dev/null
+++ b/Channel/Android/qkbt3game/release/libs/library-release-qkbt3game.aar
Binary files differ
diff --git a/Channel/IOS/qkbt3game/Plugins/QuickSDK/SMPCQuickSDK.framework/Headers/SMPCQuickSDK.h b/Channel/IOS/qkbt3game/Plugins/QuickSDK/SMPCQuickSDK.framework/Headers/SMPCQuickSDK.h
new file mode 100644
index 0000000..8ecc9ce
--- /dev/null
+++ b/Channel/IOS/qkbt3game/Plugins/QuickSDK/SMPCQuickSDK.framework/Headers/SMPCQuickSDK.h
@@ -0,0 +1,196 @@
+//
+//  SMPCQuickSDK.h
+//
+//
+//
+//
+#define SMPC_QUICK_SDK_VERSION @"2.4.6" //QuickSDK鍩虹搴撶増鏈�
+
+#import <Foundation/Foundation.h>
+#import <UIKit/UIKit.h>
+#import "SMPCQuickSDKDefines.h"
+#import "SMPCQuickSDKInitConfigure.h"
+#import "SMPCQuickSDKPayOrderInfo.h"
+#import "SMPCQuickSDKGameRoleInfo.h"
+#import "SMPCQuickSDKShareInfo.h"
+
+
+#pragma mark 鍩烘湰淇℃伅
+
+@interface SMPCQuickSDK : NSObject
+
+#pragma mark 鍗曚緥瀵硅薄
++ (SMPCQuickSDK *)defaultInstance;
+
+#pragma mark 鑾峰彇娓犻亾鍩烘湰淇℃伅
+//鑾峰彇娓犻亾鍞竴鏍囪瘑锛屼笌鏈嶅姟鍣ㄧchannelID涓�鑷达紝浠讳綍鏃跺埢閮藉彲璋冪敤
+- (int)channelType;
+
+
+@end
+
+#pragma mark - 鍒濆鍖� 鎺ュ叆浜у搧淇℃伅
+
+@interface SMPCQuickSDK(Base)
+
+#pragma mark 鍒濆鍖�
+/**
+ @brief 搴旂敤鍒濆鍖� 瀹屾垚鍚庝細鍙戦�侀�氱煡kSmpcQuickSDKNotiInitDidFinished
+ @param configure 鍒濆鍖栭厤缃被锛孲DK浼氫紭鍏堜娇鐢ㄦ墦鍖呭伐鍏蜂笂鍦ㄧ嚎閰嶇疆鐨刾roductCode
+ @result 閿欒鐮�
+ @note 蹇呮帴
+ */
+- (int)initWithConfig:(SMPCQuickSDKInitConfigure *)configure application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions;
+/**
+ @brief 璋冪敤缁勪欢鍔熻兘锛屽弬鏁拌鐪嬪搴旂粍浠舵帴鍏ユ枃妗�
+ */
+- (int)callPlug:(NSString *)name params:(NSArray *)args;
+@end
+
+#pragma mark - 鐢ㄦ埛閮ㄥ垎 鐧诲綍 娉ㄥ唽 鐧诲嚭
+
+@interface SMPCQuickSDK(Account)
+
+/**
+ @brief 鐧诲綍鎺ュ彛 锛岀櫥褰曞悗浼氬彂閫乲SmpcQuickSDKNotiLogin閫氱煡
+ @result 閿欒鐮�
+ @note 蹇呮帴
+ */
+- (int)login;
+/**
+ @brief 鐧诲嚭鎺ュ彛 浠g爜璋冪敤娉ㄩ攢
+ @result 閿欒鐮�
+ @note 鎴愬姛璋冪敤璇ユ帴鍙e悗锛孲DK浼氬彂鍑簁SmpcQuickSDKNotiLogout閫氱煡
+ */
+- (int)logout;
+// 鐧诲綍鍚庤幏鍙栫敤鎴穟id,杩欎釜uid鍦ㄦ笭閬撲笂鍞竴锛屽涓笭閬撶殑鐢ㄦ埛uid鍙兘閲嶅
+- (NSString *)userId;
+// 鐧诲綍鍚庤幏鍙杣serToken鍙敤浜庨獙璇佺敤鎴蜂俊鎭�
+- (NSString *)userToken;
+// 鐧诲綍鍚庤幏鍙栫敤鎴锋樀绉�
+- (NSString *)userNick;
+/** 鏌ヨ娓犻亾瀹炲悕璁よ瘉淇℃伅 */
+- (NSDictionary *)realNameInfo;
+/**
+ @brief 璋冪敤娓犻亾瀹炲悕璁よ瘉
+ @result 閿欒鐮佽嫢娓犻亾娌℃湁鎻愪緵姝ゆ柟娉曚細杩斿洖闈�0
+ @note 缁撴灉浼氬彂閫乲SmpcQuickSDKNotiRealAuth閫氱煡
+*/
+- (int)realAuth;
+#pragma mark - 鏇存柊瑙掕壊淇℃伅
+// 杩涘叆娓告垙瑙掕壊锛岃鑹蹭俊鎭彉鏇存椂璋冪敤锛堟瘮濡傚崌绾э級,璇蜂娇鐢╱pdateRoleInfoWith:isCreate:
+- (void)updateRoleInfoWith:(SMPCQuickSDKGameRoleInfo *)info;
+//// 鍒涘缓瑙掕壊銆佽繘鍏ユ父鎴忚鑹层�佽鑹蹭俊鎭彉鏇存椂璋冪敤锛堟瘮濡傚崌绾э紝isCreate琛ㄧず鏄惁涓哄垱寤鸿鑹�
+- (void)updateRoleInfoWith:(SMPCQuickSDKGameRoleInfo *)info isCreate:(BOOL)isCreate;
+
+@end
+//MARK:- 鍏呭��
+@interface SMPCQuickSDK(Pay)
+/**
+ @brief 鍟嗗搧璐拱
+ *  @param orderInfo
+ *  @param roleInfo
+ @result 閿欒鐮�
+ */
+- (int)payOrderInfo:(SMPCQuickSDKPayOrderInfo *)orderInfo
+           roleInfo:(SMPCQuickSDKGameRoleInfo *)roleInfo;
+/**
+ @brief 鍟嗗搧淇℃伅
+ *  @param productId 鍟嗗搧id
+ */
+-(void)Getlocalized:(NSString *)productIds;
+@end
+
+#pragma mark - 鐣岄潰鎺у埗
+@interface SMPCQuickSDK(UISetting)
+
+#pragma mark 娴姩鏉�
+/**
+ @brief showToolBar:
+ @brief 娴姩宸ュ叿鏍忥紝寤鸿鏄剧ず鍦ㄥ乏涓婅
+ @result 閿欒鐮�
+ @note
+ */
+- (int)showToolBar:(SMPC_QUICK_SDK_TOOLBAR_PLACE)place;
+//闅愯棌娴姩宸ュ叿鏍�
+- (int)hideToolBar;
+
+@end
+
+@interface SMPCQuickSDK(Extend)
+// 鑾峰彇QuicSDK鍚庡彴涓烘笭閬撴坊鍔犵殑鑷畾涔夐敭鍊硷紝浠讳綍鏃跺埢閮藉彲璋冪敤
+// 濡傛灉娌℃湁灏嗚繑鍥瀗il
+- (NSString *)getConfigValue:(NSString *)key;
+/**
+ @brief isFunctionSupported:
+ @brief 鍒ゆ柇褰撳墠娓犻亾鏄惁瀹炵幇浜哘uickSDK鎻愪緵鐨勬煇涓帴鍙�
+ @brief 濡傛灉褰撳墠娓犻亾娌℃湁瀹炵幇鐩稿簲鎺ュ彛锛屽氨娌℃湁鐩稿簲鎺ュ彛鐨勫洖璋�
+ @brief 渚嬪娓犻亾SDK娌℃湁瀹炵幇pausedGame杩欎釜鎺ュ彛锛屽嵆浣胯皟鐢ㄤ簡pausedGame锛屾病鏈夋殏鍋滄仮澶嶉�氱煡锛屽洜涓簆ausedGame璋冪敤鏃犳晥
+ @result 鏄惁
+ @note
+ */
+- (BOOL)isFunctionTypeSupported:(SMPC_QUICK_SDK_FUNC_TYPE)type;
+
+/**
+ @brief 杩涘叆鐢ㄦ埛涓績 濡傜敤鎴锋敞閿�鐧诲綍浼氬彂閫乲SmpcQPLogoutNotification锛堝彲澶氭瑙﹀彂锛�
+ @result 閿欒鐮�
+ */
+- (int)enterUserCenter;
+
+/**
+ 杩涘叆YunKefu
+
+ @param gameRoleInfo
+ @result 閿欒鐮�
+ */
+- (int)enterYunKeFuCenter:(SMPCQuickSDKGameRoleInfo *)gameRoleInfo;
+
+#pragma mark 鍒嗕韩
+/**
+ 鍒嗕韩
+
+ @param shareInfo shareInfo description
+ @result 閿欒鐮�
+ */
+- (int)callSDKShare:(SMPCQuickSDKShareInfo *)shareInfo;
+
+
+//***********************搴旂敤鐢熷懡鍛ㄦ湡鐨勫洖璋�*******************//
+//鍦ㄥ簲鐢ㄥ搴旂殑鐢熷懡鍛ㄦ湡鍥炶皟涓皟鐢�
+/**
+ @brief - (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url;
+ @brief - (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(nullable NSString *)sourceApplication annotation:(id)annotation 
+ @brief - (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<NSString*, id> *)options
+ @brief 娓犻亾澶勭悊搴旂敤璺宠浆
+ @result 閿欒鐮�
+ @note 蹇呮帴
+ */
+
+- (int)openURL:(NSURL *)url application:(UIApplication *)application;
+- (int)openURL:(NSURL *)url sourceApplication:(NSString *)sourceApp application:(UIApplication *)application annotation:(id)annotation;
+- (int)openURL:(NSURL *)url application:(UIApplication *)app options:(NSDictionary <NSString *, id>*)options;
+/**
+ @brief application:didRegisterForRemoteNotificationsWithDeviceToken:
+ @brief 鎺ㄩ�佹秷鎭�
+ @result 閿欒鐮�
+ @note 蹇呮帴
+ */
+- (int)application:(UIApplication*)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData*)deviceToken;
+
+/**
+ @brief application:didFailToRegisterForRemoteNotificationsWithError:
+ @brief 鎺ㄩ�佹秷鎭�
+ @result 閿欒鐮�
+ @note 蹇呮帴
+ */
+- (int)application:(UIApplication*)application didFailToRegisterForRemoteNotificationsWithError:(NSError*)error;
+- (int)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo;
+- (int)applicationWillResignActive:(UIApplication *)application;
+- (int)applicationDidEnterBackground:(UIApplication *)application;
+- (int)applicationWillEnterForeground:(UIApplication *)application;
+- (int)applicationDidBecomeActive:(UIApplication *)application;
+- (int)applicationWillTerminate:(UIApplication *)application;
+- (NSUInteger)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window;
+- (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void(^)(NSArray *  restorableObjects))restorationHandler;
+
+@end
diff --git a/Channel/IOS/qkbt3game/Plugins/QuickSDK/SMPCQuickSDK.framework/Headers/SMPCQuickSDKDefines.h b/Channel/IOS/qkbt3game/Plugins/QuickSDK/SMPCQuickSDK.framework/Headers/SMPCQuickSDKDefines.h
new file mode 100644
index 0000000..b1a1f85
--- /dev/null
+++ b/Channel/IOS/qkbt3game/Plugins/QuickSDK/SMPCQuickSDK.framework/Headers/SMPCQuickSDKDefines.h
@@ -0,0 +1,90 @@
+//
+//  SMPCQuickSDKDefines.h
+//  QuickSDKs
+//
+//
+//
+
+#ifndef SMPCQuickSDKDefines_h
+#define SMPCQuickSDKDefines_h
+
+#pragma mark - Notification Name
+
+extern NSString* const kSmpcQuickSDKNotiInitDidFinished;   //鍒濆鍖栨垚鍔�
+extern NSString* const kSmpcQuickSDKNotiLogin;             //鐧诲綍鎴愬姛 鍒囨崲璐﹀彿鎴愬姛涔熶細鍥炶皟杩欎釜
+extern NSString* const kSmpcQCGetLocalizedNotification;             //鏌ヨ鎺ュ晢鍝佷俊鎭殑閫氱煡
+extern NSString* const kSmpcQuickSDKNotiLogout;            //鐢ㄦ埛娉ㄩ攢
+extern NSString* const kSmpcQuickSDKNotiRecharge;          //鍏呭�肩粨鏋�
+extern NSString* const kSmpcQuickSDKNotiPauseOver;         //鏆傚仠缁撴潫 杩欎釜鍥炶皟鍙互涓嶇敤鐩戝惉
+extern NSString * const kSmpcQuickSDKNotiPlugin;           /*缁勪欢閫氱煡 瑙佽鎻掍欢鎺ュ叆鏂囨。锛岄粯璁ゅ彲浠ヤ笉鐢ㄧ洃鍚�*/
+extern NSString* const kSmpcQuickSDKNotiRealAuth;             //瀹炲悕璁よ瘉缁撴灉閫氱煡
+
+#define QUICK_CHANNEL_TO_CP_NOTIFICATON_KEY @"quick_channel_to_cp_notification_key" //QUICK_CHANNEL_TO_CP_NOTIFICATON_KEY杩欎釜閿畾涔変簡QuickSDK鏍囧噯鎺ュ彛涓嶈兘鎻愪緵鏇村鐨勪俊鎭粰cp閭h竟鏃剁殑浼犺緭鏂规锛岃繖涓�氱煡甯︿笂娓犻亾SDK闇�瑕佷紶閫掑埌cp鐨勪俊鎭�.閫氬父涓嶉渶瑕侊紝閬囧埌浜嗗啀璁ㄨ
+
+#pragma mark - 閫氱煡userInfo涓殑閲嶈key 閿欒鍜屼俊鎭�
+
+extern NSString* const kSmpcQuickSDKKeyError;    /*Notification userinfo error Key */
+extern NSString* const kSmpcQuickSDKKeyMsg;      /*Notification userinfo msg   Key */
+
+// 璁㈠崟鍙�
+#define kSmpcQuickSDKKeyOrderId              @"orderId"
+// 娓告垙寮�鍙戝晢缁欑殑璁㈠崟鍙�
+#define kSmpcQuickSDKKeyCpOrderId            @"cpOrderId"
+// 绗�3鏂规笭閬搒dk缁欑殑璁㈠崟鍙�
+#define kSmpcQuickSDKKeySdkOrderId           @"sdkOrderId"
+// 閫忎紶鍙傛暟
+#define kSmpcQuickSDKKeyExtraParams          @"extraParams"
+// user_token
+#define kSmpcQuickSDKKeyUserToken            @"user_token"
+/** 瀹炲悕璁よ瘉鍥炶皟鏄惁宸插疄鍚� YES:宸茶璇丯O:鏈璇�*/
+#define kSmpcQuickSDKKeyRealName              @"realName"
+/** 瀹炲悕璁よ瘉鍚庡勾榫� */
+#define kSmpcQuickSDKKeyRealAge              @"age"
+/** 娓犻亾瀹炲悕璁よ瘉澶辫触鏄惁鍙互缁х画娓告垙 YES:鍙互 NO:涓嶅彲浠� */
+#define kSmpcQuickSDKKeyRealResumeGame              @"resumeGame"
+/** 瀹炲悕璁よ瘉棰勭暀瀛楁 */
+#define kSmpcQuickSDKKeyRealOther              @"other"
+
+#pragma mark - 娴姩鏉′綅缃� Enum
+typedef enum {
+    SMPC_QUICK_SDK_TOOLBAR_TOP_LEFT  = 1,           /* 宸︿笂 */
+    SMPC_QUICK_SDK_TOOLBAR_TOP_RIGHT = 2,           /* 鍙充笂 */
+    SMPC_QUICK_SDK_TOOLBAR_MID_LEFT  = 3,           /* 宸︿腑 */
+    SMPC_QUICK_SDK_TOOLBAR_MID_RIGHT = 4,           /* 鍙充腑 */
+    SMPC_QUICK_SDK_TOOLBAR_BOT_LEFT  = 5,           /* 宸︿笅 */
+    SMPC_QUICK_SDK_TOOLBAR_BOT_RIGHT = 6,           /* 鍙充笅 */
+}SMPC_QUICK_SDK_TOOLBAR_PLACE;
+
+
+#pragma mark - 閿欒鐮�
+
+typedef enum {
+    SMPC_QUICK_SDK_ERROR_NONE                      = 0,    /* 娌℃湁閿欒 */
+    SMPC_QUICK_SDK_ERROR_UNKNOWN                   = -1,    /* 鏈煡閿欒 */
+    SMPC_QUICK_SDK_ERROR_NETWORK                   = -2,    /* 缃戠粶杩炴帴閿欒 */
+    SMPC_QUICK_SDK_ERROR_CHECKFAILED               = -3,    /* 鐧诲綍鏍¢獙澶辫触 */
+    SMPC_QUICK_SDK_ERROR_CHECKLOGINING             = -4,    /* 姝e湪鏍¢獙鐧诲綍 */
+    SMPC_QUICK_SDK_ERROR_PARAM                     = -10,   /* 鍙傛暟閿欒 */
+    SMPC_QUICK_SDK_ERROR_NOT_INIT                  = -20,   /* 杩樻病鏈夊垵濮嬪寲 */
+    SMPC_QUICK_SDK_ERROR_INIT_FAILED               = -21,   /* 鍒濆鍖栧け璐�*/
+    SMPC_QUICK_SDK_ERROR_UNSUPPORTED               = -100,  /* 鍔熻兘涓嶈鏀寔 */
+    
+    SMPC_QUICK_SDK_ERROR_NOT_LOGIN                 = -301,  /* 娌℃湁鐧诲綍鐢ㄦ埛 */
+    SMPC_QUICK_SDK_ERROR_HAD_LOGIN                 = -302,  /* 宸叉湁鐧诲綍鐢ㄦ埛 */
+    SMPC_QUICK_SDK_ERROR_LOGOUT_FAIL               = -303,  /* 鐢ㄦ埛鐧诲嚭澶辫触 */
+    
+    SMPC_QUICK_SDK_ERROR_RECHARGE_FAILED           = -400,  /* 鍏呭�煎け璐� */
+    SMPC_QUICK_SDK_ERROR_RECHARGE_CANCELLED        = -401,  /* 鐢ㄦ埛鍏呭�煎彇娑� */
+    
+    
+}SMPC_QUICK_SDK_ERROR_CODE;
+typedef enum {
+    SMPC_QUICK_SDK_FUNC_TYPE_PAUSED_GAME       = 1, /*鏆傚仠娓告垙*/
+    SMPC_QUICK_SDK_FUNC_TYPE_ENTER_USER_CENTER = 2, /*杩涘叆鐢ㄦ埛涓績*/
+    SMPC_QUICK_SDK_FUNC_TYPE_ENTER_BBS         = 3, /*杩涘叆璁哄潧*/
+//    SMPC_QUICK_SDK_FUNC_TYPE_OPEN_URL          = 4锛�
+    SMPC_QUICK_SDK_FUNC_TYPE_SHOW_TOOLBAR      = 5, /*鏄剧ず娴姩宸ュ叿鏍�*/
+    SMPC_QUICK_SDK_FUNC_TYPE_HIDE_TOOLBAR      = 6, /*闅愯棌娴姩宸ュ叿鏍�*/
+    SMPC_QUICK_SDK_FUNC_TYPE_ENTER_CUSTOMER_CENTER = 7, /*杩涘叆瀹㈡湇涓績*/
+}SMPC_QUICK_SDK_FUNC_TYPE;
+#endif
diff --git a/Channel/IOS/qkbt3game/Plugins/QuickSDK/SMPCQuickSDK.framework/Headers/SMPCQuickSDKGameRoleInfo.h b/Channel/IOS/qkbt3game/Plugins/QuickSDK/SMPCQuickSDK.framework/Headers/SMPCQuickSDKGameRoleInfo.h
new file mode 100644
index 0000000..a62682c
--- /dev/null
+++ b/Channel/IOS/qkbt3game/Plugins/QuickSDK/SMPCQuickSDK.framework/Headers/SMPCQuickSDKGameRoleInfo.h
@@ -0,0 +1,23 @@
+//
+//  SMPCQuickSDKGameRoleInfo.h
+//  SMPCQuickSDK
+//
+//
+
+#import <Foundation/Foundation.h>
+#import <UIKit/UIKit.h>
+
+@interface SMPCQuickSDKGameRoleInfo : NSObject
+
+@property (nonatomic,copy) NSString *serverId;         //鏈嶅姟鍣↖d锛屽繀濉�
+@property (nonatomic,copy) NSString *serverName;       //鏈嶅姟鍣ㄥ悕绉帮紝蹇呭~
+@property (nonatomic,copy) NSString *gameRoleName;     //瑙掕壊鍚嶏紝蹇呭~
+@property (nonatomic,copy) NSString *gameRoleID;       //瑙掕壊ID锛屽繀濉�
+@property (nonatomic,copy) NSString *gameUserBalance;  //鐜╁铏氭嫙璐у竵浣欓锛屽繀濉紝鍙殢鎰�
+@property (nonatomic,copy) NSString *vipLevel;         //鐜╁vip绛夌骇锛屽繀濉紝鍙殢鎰�
+@property (nonatomic,copy) NSString *gameUserLevel;    //鐜╁绛夌骇锛屽繀濉紝鍙殢鎰�
+@property (nonatomic,copy) NSString *partyName;        //鍏細鍚嶇О锛屽繀濉紝鍙殢鎰�
+@property (nonatomic, copy) NSString * creatTime;      //瑙掕壊鍒涘缓鏃堕棿(10浣嶆椂闂存埑)锛屽繀濉�,娌℃湁浼�0
+@property (nonatomic, copy) NSString * fightPower;     //鎴樺姏锛屽彲涓嶄紶
+@property (nonatomic, copy) NSString * profession;     //瑙掕壊鑱屼笟, 鍙笉浼�
+@end
diff --git a/Channel/IOS/qkbt3game/Plugins/QuickSDK/SMPCQuickSDK.framework/Headers/SMPCQuickSDKInitConfigure.h b/Channel/IOS/qkbt3game/Plugins/QuickSDK/SMPCQuickSDK.framework/Headers/SMPCQuickSDKInitConfigure.h
new file mode 100644
index 0000000..bf4c9bf
--- /dev/null
+++ b/Channel/IOS/qkbt3game/Plugins/QuickSDK/SMPCQuickSDK.framework/Headers/SMPCQuickSDKInitConfigure.h
@@ -0,0 +1,17 @@
+//
+//  SMPCQuickSDKInitConfigure.h
+//  SMPCQuickSDK
+//
+//
+
+#import <Foundation/Foundation.h>
+#import <UIKit/UIKit.h>
+
+
+@interface SMPCQuickSDKInitConfigure : NSObject
+
+@property (nonatomic, copy) NSString *productCode;  //QuickSDK鎻愪緵鐨� product_code
+@property (nonatomic, copy) NSString *productKey;   //QuickSDK鎻愪緵鐨� product_token
+
+
+@end
diff --git a/Channel/IOS/qkbt3game/Plugins/QuickSDK/SMPCQuickSDK.framework/Headers/SMPCQuickSDKPayOrderInfo.h b/Channel/IOS/qkbt3game/Plugins/QuickSDK/SMPCQuickSDK.framework/Headers/SMPCQuickSDKPayOrderInfo.h
new file mode 100644
index 0000000..225d6d1
--- /dev/null
+++ b/Channel/IOS/qkbt3game/Plugins/QuickSDK/SMPCQuickSDK.framework/Headers/SMPCQuickSDKPayOrderInfo.h
@@ -0,0 +1,27 @@
+//
+//  SMPCQuickSDKPayOrderInfo.h
+//  SMPCQuickSDK
+//
+//
+
+#import <Foundation/Foundation.h>
+#import <UIKit/UIKit.h>
+
+@interface SMPCQuickSDKPayOrderInfo : NSObject
+@property(nonatomic,copy) NSString *goodsID;    //鍟嗗搧ID IAP鏃朵负鑻规灉寮�鍙戣�呭悗鍙伴厤缃殑鍟嗗搧id锛屽繀濉�
+@property(nonatomic,copy) NSString *productName;  //鍟嗗搧鍚嶇О锛屽繀濉�
+@property(nonatomic,copy) NSString *cpOrderID;  //娓告垙璁㈠崟ID锛屽繀濉�
+@property(nonatomic,assign) NSUInteger count;     //鍟嗗搧鏁伴噺锛屽繀濉�
+@property(nonatomic,assign) float amount;         //鍟嗗搧鎬讳环,蹇呭~锛岃繖涓緢閲嶈
+@property(nonatomic,copy) NSString *callbackUrl;  //璐拱鍥炶皟鍦板潃锛岄�夊~,浼樺厛浣跨敤鏈嶅姟鍣ㄧ閰嶇疆鐨�
+@property(nonatomic,copy) NSString *extrasParams; //閫忎紶瀛楁锛岄�夊~锛屾湇鍔″櫒鍥炶皟鍘熸牱浼犻��
+
+//deprecated 搴熷純鐨勶紝鍙互涓嶄紶鍊�
+@property(nonatomic,assign) float price;          //鍟嗗搧鍗曚环锛岄�夊~,濡傛灉娓犻亾闇�瑕侊紝Quick灏嗛�氳繃鎬讳环鍜屾暟閲忔潵璁$畻
+@property(nonatomic,copy) NSString *productDesc;   //鍟嗗搧鎻忚堪锛岄�夊~锛岄粯璁uickSDK浣跨敤鈥滄暟閲�+鍟嗗搧鍚嶇О鈥滄嫾鎺ワ紝濡傛灉鏁伴噺涓�1锛屼娇鐢ㄥ晢鍝佸悕绉�
+@property(nonatomic,copy) NSString *quantifier;     //鍟嗗搧閲忚瘝锛岄�夊~锛屽彲浠ヤ负@""绌轰覆
+
++ (instancetype)info;//鑾峰彇涓�涓璞″睘鎬у�间负nil锛屾暟鍊煎睘鎬т负0鐨勫疄渚�
+
+
+@end
diff --git a/Channel/IOS/qkbt3game/Plugins/QuickSDK/SMPCQuickSDK.framework/Headers/SMPCQuickSDKShareInfo.h b/Channel/IOS/qkbt3game/Plugins/QuickSDK/SMPCQuickSDK.framework/Headers/SMPCQuickSDKShareInfo.h
new file mode 100644
index 0000000..f0cd676
--- /dev/null
+++ b/Channel/IOS/qkbt3game/Plugins/QuickSDK/SMPCQuickSDK.framework/Headers/SMPCQuickSDKShareInfo.h
@@ -0,0 +1,28 @@
+//
+//  SMPCQuickSDKShareInfo.h
+//  SMPCQuickSDK
+//
+//  Created by xiaoxiao on 2019/2/19.
+//
+
+#import <Foundation/Foundation.h>
+
+
+@interface SMPCQuickSDKShareInfo : NSObject
+
+@property (nonatomic, strong) NSString *type;   //鍒嗕韩绫诲瀷 1.facebook鍒嗕韩杩炴帴 2.facebook鍒嗕韩鍥剧墖 3.寰俊鍒嗕韩鏂囨湰 4.寰俊鍒嗕韩鍥剧墖
+@property (nonatomic, strong) NSString *title;   //鍒嗕韩鏍囬
+@property (nonatomic, strong) NSString *content;   //鍒嗕韩鍐呭
+@property (nonatomic, strong) NSString *imgPath;   //鍒嗕韩鍥剧墖鏈湴鍦板潃
+@property (nonatomic, strong) NSString *filePath;   //鍒嗕韩鏂囦欢璺緞
+@property (nonatomic, strong) NSString *imgUrl;   //鍒嗕韩鍥剧墖缃戠粶鍦板潃
+@property (nonatomic, strong) NSString *sencetype;   //鍙戦�佸満鏅� 0 鑱婂ぉ鐣岄潰锛�1 鏈嬪弸鍦堬紝2 鏀惰棌
+@property (nonatomic, strong) NSString *url;   //鍒嗕韩閾炬帴
+@property (nonatomic, strong) NSString *shareTo;   //鍒嗕韩鍒板摢閲�
+@property (nonatomic, strong) NSString *extenal;   //棰濆澶囨敞
+@property (nonatomic, assign) float width;  //缂╃暐鍥惧
+@property (nonatomic, assign) float height;   //缂╃暐鍥鹃珮
+
+@end
+
+
diff --git a/Channel/IOS/qkbt3game/Plugins/QuickSDK/SMPCQuickSDK.framework/SMPCQuickSDK b/Channel/IOS/qkbt3game/Plugins/QuickSDK/SMPCQuickSDK.framework/SMPCQuickSDK
new file mode 100644
index 0000000..d514ff6
--- /dev/null
+++ b/Channel/IOS/qkbt3game/Plugins/QuickSDK/SMPCQuickSDK.framework/SMPCQuickSDK
Binary files differ
diff --git a/Channel/IOS/qkbt3game/Plugins/QuickSDK/libSMPCQuickChannel.a b/Channel/IOS/qkbt3game/Plugins/QuickSDK/libSMPCQuickChannel.a
new file mode 100644
index 0000000..d78716b
--- /dev/null
+++ b/Channel/IOS/qkbt3game/Plugins/QuickSDK/libSMPCQuickChannel.a
Binary files differ
diff --git a/Channel/IOS/qkbt3game/Plugins/The2thWorldSDK/The2thWorldRES.bundle/TY_AN_34.png b/Channel/IOS/qkbt3game/Plugins/The2thWorldSDK/The2thWorldRES.bundle/TY_AN_34.png
new file mode 100644
index 0000000..7ac8e4d
--- /dev/null
+++ b/Channel/IOS/qkbt3game/Plugins/The2thWorldSDK/The2thWorldRES.bundle/TY_AN_34.png
Binary files differ
diff --git a/Channel/IOS/qkbt3game/Plugins/The2thWorldSDK/The2thWorldRES.bundle/The2thWorldSDKConfig.plist b/Channel/IOS/qkbt3game/Plugins/The2thWorldSDK/The2thWorldRES.bundle/The2thWorldSDKConfig.plist
new file mode 100644
index 0000000..e8511cd
--- /dev/null
+++ b/Channel/IOS/qkbt3game/Plugins/The2thWorldSDK/The2thWorldRES.bundle/The2thWorldSDKConfig.plist
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+	<key>JPush_AppKey</key>
+	<string>111a5f817592ddc68edc802c</string>
+	<key>TTTrack_AppID</key>
+	<string>155761</string>
+	<key>TrackingIO_AppKey</key>
+	<string>12aef4c284c6996703765fe9f7422428</string>
+</dict>
+</plist>
diff --git a/Channel/IOS/qkbt3game/Plugins/The2thWorldSDK/UniversalSDK.h b/Channel/IOS/qkbt3game/Plugins/The2thWorldSDK/UniversalSDK.h
new file mode 100644
index 0000000..b6ee185
--- /dev/null
+++ b/Channel/IOS/qkbt3game/Plugins/The2thWorldSDK/UniversalSDK.h
@@ -0,0 +1,78 @@
+//
+//  UniversalSDK.h
+//  Unity-iPhone
+//
+//  Created by 钄$�� on 2018/4/24.
+//
+
+#ifndef __UNIVERSALSDK_H_
+#define __UNIVERSALSDK_H_
+
+#import <Foundation/Foundation.h>
+#import <UIKit/UIKit.h>
+
+#define UNITY_OBJ_NAME "SDKUtility"
+#define UNITY_FUNC_NAME "HandleSdkMessage"
+
+#define PRODUCT_CODE    @"40450025922275820036898902533267"
+#define PRODUCT_KEY     @"31232581"
+
+#define S2U_BatteryLevel                1
+#define S2U_BatteryCharging             2
+#define S2U_SdkInitComplete             3
+#define S2U_DeviceInfo                  4
+#define S2U_PushClientID                5
+#define S2U_FreePlatformInitOk          100
+#define S2U_FreePlatformInitFail        101
+#define S2U_FreePlatformLoginOk         102
+#define S2U_FreePlatformLoginFail       103
+#define S2U_FreePlatformLoginCancel     104
+#define S2U_FreePlatformLogoutOk        105
+#define S2U_FreePlatformLogoutFail      106
+#define S2U_FreePlatformSwitchAccountOk 107
+#define S2U_FreePlatformPayOk           108
+#define S2U_FreePlatformPayFail         109
+#define S2U_FreePlatformPayCancel       110
+#define S2U_FreePlatformRegisterOk      111
+
+
+#define U2S_BatteryListenStart          1
+#define U2S_BatteryListenStop           2
+#define U2S_CopyContent                 7
+#define U2S_OpenWebView                 8
+#define U2S_Init                        9
+#define U2S_FreePlatformInit            100
+#define U2S_FreePlatformLogin           101
+#define U2S_FreePlatformLogout          102
+#define U2S_FreePlatformSwitchAccount   103
+#define U2S_FreePlatformPay             104
+#define U2S_PayFinished                 105
+#define U2S_CreateRole                  106
+#define U2S_RoleLogin                   107
+#define U2S_RoleLevelUp                 108
+#define U2S_JPushAddLocalMessage        200
+#define U2S_JPushRemoveLocalMessage     201
+#define U2S_MakeKeyAndVisible           300
+#define U2S_SendRegistEvent             500
+#define U2S_SendLoginEvent              600
+
+#define KIsiPhoneX ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(1125, 2436), [[UIScreen mainScreen] currentMode].size) : NO)
+
+static BOOL     JPush_IsProduction = FALSE;
+
+@interface UniversalSDK : NSObject {
+    UIWebView* m_UIWebView;
+    UIButton* m_CloseBtn;
+}
+
+-(void) HandleUnityMessage:(NSString*) json;
+-(void) Init;
+-(id) APNativeJSONObject:(NSData*) data;
+-(NSData*) APNativeJSONData:(id) obj;
+-(void) RemoveLocalNotificationWithIdentifierKey:(NSString*) idKey;
+
+-(void) QuickSDKInit:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions;
+
+@end
+
+#endif
diff --git a/Channel/IOS/qkbt3game/Plugins/The2thWorldSDK/UniversalSDK.mm b/Channel/IOS/qkbt3game/Plugins/The2thWorldSDK/UniversalSDK.mm
new file mode 100644
index 0000000..e8c96b3
--- /dev/null
+++ b/Channel/IOS/qkbt3game/Plugins/The2thWorldSDK/UniversalSDK.mm
@@ -0,0 +1,561 @@
+//
+//  UniversalSDK.m
+//  Unity-iPhone
+//
+//  Created by 钄$�� on 2018/4/24.
+//
+
+#import "UniversalSDK.h"
+#import "AdSupport/AdSupport.h"
+#import "opus.h"
+#ifdef NSFoundationVersionNumber_iOS_9_x_Max
+#import <UserNotifications/UserNotifications.h>
+#endif
+#import "SystemConfiguration/CaptiveNetwork.h"
+#import <SMPCQuickSDK/SMPCQuickSDK.h>
+
+@interface UniversalSDK()<UIWebViewDelegate>
+@end
+
+@implementation UniversalSDK
+
+#define CHANNEL_NUM 1
+
+static int s_frequency = 16000;
+static int s_bitRate = 20000;
+static int s_bandMode = OPUS_BANDWIDTH_WIDEBAND;
+static int s_frameSize = 160;
+static int sBatteryLevel = -1;
+static int sBatteryState = -1;
+static NSString* sAppID;
+static NSString* sGameID;
+static NSString* sUserName;
+static NSThread* _thread;
+
+-(void) Init
+{
+    UIDevice *_device = [UIDevice currentDevice];
+    _device.batteryMonitoringEnabled = true;
+    
+    NSString* _uniqueID = [[NSUserDefaults standardUserDefaults] objectForKey:@"tsw_unique_id"];
+    //鑾峰彇IDFA
+    NSString* _idfa = [[[ASIdentifierManager sharedManager] advertisingIdentifier] UUIDString];
+    
+    if(_uniqueID == NULL || [_uniqueID length] <= 0)
+    {
+        //鍒ゆ柇IDFA鏄惁涓虹┖
+        BOOL isEmpty = [[_idfa stringByReplacingOccurrencesOfString:@"-" withString:@""] stringByReplacingOccurrencesOfString:@"0" withString:@""].length;
+        if (isEmpty) {
+            //涓嶄负绌猴紝灏咺DFA浣滀负鍞竴鏍囪瘑
+            _uniqueID = _idfa;
+        }
+        else {
+            //涓虹┖锛岃幏鍙朥UID浣滀负鍞竴鏍囪瘑
+            _uniqueID = [[[UIDevice currentDevice] identifierForVendor] UUIDString];
+        }
+        
+        //淇濆瓨鍞竴璁惧鏍囪瘑,濡傚凡瀛樺湪鍒欎笉杩涜浠讳綍澶勭悊
+        [[NSUserDefaults standardUserDefaults] setObject:_uniqueID forKey:@"tsw_unique_id"];
+        [[NSUserDefaults standardUserDefaults] synchronize];
+    }
+    
+    // 鍙栧緱UserAgent
+    UIWebView* _webView = [[UIWebView alloc] initWithFrame:CGRectZero];
+    NSString* _userAgent = [_webView stringByEvaluatingJavaScriptFromString:@"navigator.userAgent"];
+    
+    // 鍙戦�佽澶囦俊鎭�
+    NSMutableDictionary *_dict = [NSMutableDictionary dictionaryWithObjectsAndKeys:
+                                  _uniqueID,@"unique_id",
+                                  _idfa,@"android_id",
+                                  [NSNumber numberWithInt:S2U_DeviceInfo],@"code",
+                                  _userAgent,@"userAgent",nil];
+    [self SendMessageToUnity:_dict];
+}
+
+-(void)SendMessageToUnity:(NSDictionary*)dict
+{
+    BOOL _result = [NSJSONSerialization isValidJSONObject:dict];
+    if(_result)
+    {
+        NSData* _jsonData = [NSJSONSerialization dataWithJSONObject:dict options:0 error:NULL];
+        UnitySendMessage(UNITY_OBJ_NAME, UNITY_FUNC_NAME,
+                         [[[NSString alloc] initWithData:_jsonData encoding:NSUTF8StringEncoding] UTF8String]);
+    }
+}
+
+-(void) BatteryThread {
+    while (TRUE)
+    {
+        [NSThread sleepForTimeInterval:1];
+        
+        UIDevice *_device = [UIDevice currentDevice];
+        
+        int _state = [_device batteryState];
+        if(_state != sBatteryState){
+            sBatteryState = _state;
+            NSDictionary *_dict = [NSDictionary dictionaryWithObjectsAndKeys:
+                                   [NSNumber numberWithInt:sBatteryState], @"status",
+                                   [NSNumber numberWithInt:S2U_BatteryCharging], @"code", nil];
+            
+            [self SendMessageToUnity:_dict];
+        }
+        
+        int _level = (int)([_device batteryLevel] * 100);
+        if(_level != sBatteryLevel){
+            sBatteryLevel = _level;
+            NSDictionary *_dict = [NSDictionary dictionaryWithObjectsAndKeys:
+                                   [NSNumber numberWithInt:sBatteryLevel], @"level",
+                                   [NSNumber numberWithInt:S2U_BatteryLevel], @"code", nil];
+            
+            [self SendMessageToUnity:_dict];
+        }
+    }
+}
+
+-(void) OpenURL:(NSString*) url {
+    
+    if(m_UIWebView != NULL) {
+        [self btnClick:NULL];
+        return;
+    }
+    
+    CGRect _bounds = UnityGetMainWindow().bounds;
+    
+    float _scale = _bounds.size.width / 1334;
+    
+    float _width = 982 * _scale;
+    float _height = 560 * _scale;
+    
+    float _offsetX = (_bounds.size.width - _width) * .5f;
+    float _offsetY = (_bounds.size.height - _height) * .5f;
+    
+    m_UIWebView = [[UIWebView alloc] initWithFrame:CGRectMake(_offsetX, _offsetY, _width, _height)];
+    m_UIWebView.delegate = self;
+    m_UIWebView.scalesPageToFit = YES ;
+    m_UIWebView.scrollView.scrollEnabled = YES;
+    m_UIWebView.scrollView.bounces = NO;
+    NSURLRequest *request =[NSURLRequest requestWithURL:[NSURL URLWithString:url]];
+    [m_UIWebView loadRequest:request];
+}
+
+-(void) btnClick:(UIButton*)sender {
+    [m_CloseBtn removeFromSuperview];
+    [m_CloseBtn removeTarget:self action:@selector(btnClick:) forControlEvents:UIControlEventTouchUpInside];
+    m_CloseBtn = NULL;
+    
+    NSURLCache *_cache = [NSURLCache sharedURLCache];
+    [_cache removeAllCachedResponses];
+    [_cache setDiskCapacity:0];
+    [_cache setMemoryCapacity:0];
+    
+    [m_UIWebView removeFromSuperview];
+    m_UIWebView = NULL;
+}
+
+-(void)webViewDidStartLoad:(UIWebView *)webView{
+}
+
+-(void)webViewDidFinishLoad:(UIWebView *)webView{
+    
+    [UnityGetMainWindow().rootViewController.view addSubview:m_UIWebView];
+    CGRect _bounds = UnityGetMainWindow().bounds;
+    
+    float _scale = _bounds.size.width / 1334;
+    
+    float _width = 982 * _scale;
+    float _height = 560 * _scale;
+    
+    m_CloseBtn = [UIButton buttonWithType:UIButtonTypeRoundedRect];
+    [m_CloseBtn setFrame:CGRectMake(_width - 455 * _scale, _height - 86 * _scale, 180 * _scale, 72 * _scale)];
+    [m_CloseBtn setTitle:@"鎴戠煡閬撲簡" forState:UIControlStateNormal];
+    
+    NSString *_bundlePath = [[NSBundle mainBundle] pathForResource:@"The2thWorldRES.bundle" ofType:nil];
+    NSBundle *_bundle = [NSBundle bundleWithPath:_bundlePath];
+    NSString *pic1Path = [_bundle pathForResource:@"TY_AN_34.png" ofType:nil];
+    
+    [m_CloseBtn setBackgroundImage:[UIImage imageWithContentsOfFile:pic1Path] forState:UIControlStateNormal];
+    [m_CloseBtn setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
+    [m_CloseBtn addTarget:self action:@selector(btnClick:) forControlEvents:UIControlEventTouchUpInside];
+    
+    [m_UIWebView addSubview:m_CloseBtn];
+}
+
+-(void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error{
+}
+
+-(void)QuickSDKInit:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
+    
+    // 鐩戝惉鍒濆鍖�
+    [[NSNotificationCenter defaultCenter] addObserver:self
+                                             selector:@selector(smpcQpInitResult:)
+                                                 name:kSmpcQuickSDKNotiInitDidFinished
+                                               object:nil];
+    // 鐩戝惉鐧诲綍
+    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(smpcQpLoginResult:) name:kSmpcQuickSDKNotiLogin object:nil];
+    // 鐩戝惉娉ㄩ攢
+    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(smpcQpLogoutResult:) name:kSmpcQuickSDKNotiLogout object:nil];
+    // 鐩戝惉鍏呭�肩粨鏋�
+    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(smpcQpRechargeResult:) name:kSmpcQuickSDKNotiRecharge object:nil];
+    
+    // --------------------- 鍒濆鍖� --------------------------
+    SMPCQuickSDKInitConfigure *cfg = [[SMPCQuickSDKInitConfigure alloc] init];
+    cfg.productKey = PRODUCT_KEY;
+    cfg.productCode = PRODUCT_CODE;
+    [[SMPCQuickSDK defaultInstance] initWithConfig:cfg application:application didFinishLaunchingWithOptions:launchOptions];
+    // ------------------------------------------------------
+}
+
+- (void)smpcQpInitResult:(NSNotification *)notify {
+    NSLog(@"init result:%@",notify);
+    NSDictionary *userInfo = notify.userInfo;
+    int errorCode = [userInfo[kSmpcQuickSDKKeyError] intValue];
+    switch (errorCode) {
+        case SMPC_QUICK_SDK_ERROR_NONE:
+        {
+            NSLog(@"鍒濆鍖栨垚鍔�");
+//            NSString *_appid = [[SMPCQuickSDK defaultInstance] getConfigValue:@"zfappid"];
+//            if (_appid == nil || [_appid isEqualToString:@""])
+//            {
+//                _appid = sAppID;
+//            }
+            NSString *_appid = sAppID;
+            NSLog(@"init _appid:%@",_appid);
+            
+            NSMutableDictionary *_dict = [NSMutableDictionary dictionaryWithObjectsAndKeys:
+                                          [NSNumber numberWithInt:S2U_SdkInitComplete], @"code",
+                                          @"quick", @"channelPlatform",
+                                          _appid, @"yj_appid", _appid, @"yj_spid", nil];
+            [self SendMessageToUnity:_dict];
+        }
+            break;
+        case SMPC_QUICK_SDK_ERROR_INIT_FAILED:
+        default:
+        {
+            //鍒濆鍖栧け璐�
+            NSLog(@"娓犻亾鍒濆鍖栧け璐�");
+        }
+            break;
+    }
+    
+}
+
+- (void)smpcQpLoginResult:(NSNotification *)notify {
+    NSLog(@"鐧诲綍鎴愬姛閫氱煡%@",notify);
+    int error = [[[notify userInfo] objectForKey:kSmpcQuickSDKKeyError] intValue];
+    NSDictionary *userInfo = [notify userInfo];
+    if (error == 0) {
+        NSString *uid = [[SMPCQuickSDK defaultInstance] userId];
+        NSString *cid =[[SMPCQuickSDK defaultInstance] getConfigValue:@"cid"];
+        NSString *gameUID = [NSString stringWithFormat:@"%@%@%@", uid,@"@",cid];
+        NSString *UserName = [[SMPCQuickSDK defaultInstance] userId];
+        //鑾峰彇user_token锛岀敤浜庝粠鏈嶅姟鍣ㄥ幓楠岃瘉鐢ㄦ埛淇℃伅
+        NSString *user_token = userInfo[kSmpcQuickSDKKeyUserToken];
+        
+        NSDictionary *_dict = [NSDictionary dictionaryWithObjectsAndKeys:
+                               [NSDictionary dictionaryWithObjectsAndKeys:user_token, @"token",
+                                UserName, @"userName",
+                                gameUID, @"account", nil],@"info",
+                               [NSNumber numberWithInt:S2U_FreePlatformLoginOk], @"code", nil];
+        [self SendMessageToUnity:_dict];
+    }
+}
+
+- (void)smpcQpLogoutResult:(NSNotification *)notify {
+    NSLog(@"%s",__func__);
+    NSDictionary *userInfo = notify.userInfo;
+    int errorCode = [userInfo[kSmpcQuickSDKKeyError] intValue];
+    switch (errorCode) {
+        case SMPC_QUICK_SDK_ERROR_NONE:
+        {
+            NSLog(@"娉ㄩ攢鎴愬姛");
+            //娉ㄩ攢鎴愬姛
+            NSDictionary *_dict = [NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithInt:S2U_FreePlatformLogoutOk], @"code", nil];
+            [self SendMessageToUnity:_dict];
+        }
+            break;
+        case SMPC_QUICK_SDK_ERROR_LOGOUT_FAIL:
+        default:
+        {
+            //娉ㄩ攢澶辫触
+            NSLog(@"娉ㄩ攢澶辫触");
+        }
+            break;
+    }
+    if (errorCode == SMPC_QUICK_SDK_ERROR_NONE) {
+        
+    }
+    
+}
+
+- (void)smpcQpRechargeResult:(NSNotification *)notify{
+    NSLog(@"鍏呭�肩粨鏋�%@",notify);
+    NSDictionary *userInfo = notify.userInfo;
+    int error = [[userInfo objectForKey:kSmpcQuickSDKKeyError] intValue];
+    switch (error) {
+        case SMPC_QUICK_SDK_ERROR_NONE:
+        {
+            //鍏呭�兼垚鍔�
+            //QuickSDK璁㈠崟鍙�,cp涓嬪崟鏃朵紶鍏ョ殑璁㈠崟鍙凤紝娓犻亾sdk鐨勮鍗曞彿锛宑p涓嬪崟鏃朵紶鍏ョ殑鎵╁睍鍙傛暟
+            NSString *orderID = userInfo[kSmpcQuickSDKKeyOrderId];
+            NSString *cpOrderID = userInfo[kSmpcQuickSDKKeyCpOrderId];
+            NSLog(@"鍏呭�兼垚鍔熸暟鎹細%@,%@",orderID,cpOrderID);
+            NSDictionary *_dict = [NSDictionary dictionaryWithObjectsAndKeys:
+                                   [NSNumber numberWithInt:S2U_FreePlatformPayOk], @"code", nil];
+            [self SendMessageToUnity:_dict];
+        }
+            break;
+        case SMPC_QUICK_SDK_ERROR_RECHARGE_CANCELLED:
+        case SMPC_QUICK_SDK_ERROR_RECHARGE_FAILED:
+        {
+            //鍏呭�煎け璐�
+            NSString *orderID = userInfo[kSmpcQuickSDKKeyOrderId];
+            NSString *cpOrderID = userInfo[kSmpcQuickSDKKeyCpOrderId];
+            NSLog(@"鍏呭�煎け璐ユ暟鎹�%@,%@",orderID,cpOrderID);
+            NSDictionary *_dict = [NSDictionary dictionaryWithObjectsAndKeys:
+                                   [NSNumber numberWithInt:S2U_FreePlatformPayFail], @"code", nil];
+            [self SendMessageToUnity:_dict];
+        }
+            break;
+        default:
+            break;
+    }
+}
+
+-(id) APNativeJSONObject:(NSData *)data{
+    if (!data) {
+        return nil;
+    }
+    
+    NSError *error = nil;
+    id retId = [NSJSONSerialization JSONObjectWithData:data options:0 error:&error];
+    
+    if (error) {
+        NSLog(@"%s trans data to obj with error: %@", __func__, error);
+        return nil;
+    }
+    
+    return retId;
+}
+
+-(void)HandleUnityMessage:(NSString *)json {
+    
+    NSLog(@"鏀跺埌Unity鍙戞潵鐨勬秷鎭� => %@", json);
+    
+    NSData *_jsonData = [json dataUsingEncoding:NSUTF8StringEncoding];
+    NSDictionary *_dict = [self APNativeJSONObject:_jsonData];
+    
+    switch([[_dict objectForKey:@"code"] intValue]){
+        case U2S_Init:
+            sAppID = _dict[@"appID"];
+            sGameID = _dict[@"gameID"];
+            [self Init];
+
+            break;
+        case U2S_CopyContent:
+            [UIPasteboard generalPasteboard].string = _dict[@"content"];
+            break;
+        case U2S_FreePlatformInit:
+            break;
+        case U2S_MakeKeyAndVisible:
+        {
+            UIWindow * _window = [[UIApplication sharedApplication].delegate window];
+            if (_window != nil && _window.rootViewController != nil) {
+                [_window makeKeyAndVisible];
+            }
+        }
+            break;
+        case U2S_OpenWebView:
+            [self OpenURL:_dict[@"url"]];
+            break;
+        case U2S_FreePlatformLogin:
+        {
+            int error = [[SMPCQuickSDK defaultInstance] login];
+            if (error != 0) {
+                NSLog(@"U2S_FreePlatformLogin => %d",error);
+            }
+        }
+            break;
+        case U2S_FreePlatformLogout:
+        {
+            [[SMPCQuickSDK defaultInstance] logout];
+        }
+            break;
+        case U2S_CreateRole:
+        {
+            // 鏇存柊瑙掕壊淇℃伅
+            SMPCQuickSDKGameRoleInfo *gameRoleInfo = [SMPCQuickSDKGameRoleInfo new];
+            gameRoleInfo.serverName = [NSString stringWithFormat:@"%@",[_dict objectForKey:@"serverName"]];
+            gameRoleInfo.gameRoleName = [NSString stringWithFormat:@"%@",[_dict objectForKey:@"roleName"]];
+            gameRoleInfo.serverId = [NSString stringWithFormat:@"%@",[_dict objectForKey:@"sid"]]; //闇�瑕佹槸鏁板瓧瀛楃涓�
+            gameRoleInfo.gameRoleID = [NSString stringWithFormat:@"%@",[_dict objectForKey:@"roleID"]];
+            gameRoleInfo.gameUserBalance = [NSString stringWithFormat:@"%@",[_dict objectForKey:@"money"]];
+            gameRoleInfo.vipLevel = [NSString stringWithFormat:@"%@",[_dict objectForKey:@"vipLevel"]];
+            gameRoleInfo.gameUserLevel = [NSString stringWithFormat:@"%@",[_dict objectForKey:@"level"]];
+            gameRoleInfo.partyName = [NSString stringWithFormat:@"%@",[_dict objectForKey:@"familyName"]];
+            gameRoleInfo.creatTime = [NSString stringWithFormat:@"%@",[_dict objectForKey:@"createTime"]];
+            
+            [[SMPCQuickSDK defaultInstance] updateRoleInfoWith:gameRoleInfo isCreate:YES];//濡傛灉杩欎釜瑙掕壊鏄垰鍒氬垱寤虹殑锛岃繖閲宨sCreate鍙互浼燳ES
+            break;
+        }
+        case U2S_RoleLogin:
+        {
+            // 鏇存柊瑙掕壊淇℃伅
+            SMPCQuickSDKGameRoleInfo *gameRoleInfo = [SMPCQuickSDKGameRoleInfo new];
+            gameRoleInfo.serverName = [NSString stringWithFormat:@"%@",[_dict objectForKey:@"serverName"]];
+            gameRoleInfo.gameRoleName = [NSString stringWithFormat:@"%@",[_dict objectForKey:@"roleName"]];
+            gameRoleInfo.serverId = [NSString stringWithFormat:@"%@",[_dict objectForKey:@"sid"]]; //闇�瑕佹槸鏁板瓧瀛楃涓�
+            gameRoleInfo.gameRoleID = [NSString stringWithFormat:@"%@",[_dict objectForKey:@"roleID"]];
+            gameRoleInfo.gameUserBalance = [NSString stringWithFormat:@"%@",[_dict objectForKey:@"money"]];
+            gameRoleInfo.vipLevel = [NSString stringWithFormat:@"%@",[_dict objectForKey:@"vipLevel"]];
+            gameRoleInfo.gameUserLevel = [NSString stringWithFormat:@"%@",[_dict objectForKey:@"level"]];
+            gameRoleInfo.partyName = [NSString stringWithFormat:@"%@",[_dict objectForKey:@"familyName"]];
+            gameRoleInfo.creatTime = [NSString stringWithFormat:@"%@",[_dict objectForKey:@"createTime"]];
+
+            [[SMPCQuickSDK defaultInstance] updateRoleInfoWith:gameRoleInfo isCreate:NO];//濡傛灉杩欎釜瑙掕壊鏄垰鍒氬垱寤虹殑锛岃繖閲宨sCreate鍙互浼燳ES
+            break;
+        }
+            
+        case U2S_RoleLevelUp:
+        {
+            // 鏇存柊瑙掕壊淇℃伅
+            SMPCQuickSDKGameRoleInfo *gameRoleInfo = [SMPCQuickSDKGameRoleInfo new];
+            gameRoleInfo.serverName = [NSString stringWithFormat:@"%@",[_dict objectForKey:@"serverName"]];
+            gameRoleInfo.gameRoleName = [NSString stringWithFormat:@"%@",[_dict objectForKey:@"roleName"]];
+            gameRoleInfo.serverId = [NSString stringWithFormat:@"%@",[_dict objectForKey:@"sid"]]; //闇�瑕佹槸鏁板瓧瀛楃涓�
+            gameRoleInfo.gameRoleID = [NSString stringWithFormat:@"%@",[_dict objectForKey:@"roleID"]];
+            gameRoleInfo.gameUserBalance = [NSString stringWithFormat:@"%@",[_dict objectForKey:@"money"]];
+            gameRoleInfo.vipLevel = [NSString stringWithFormat:@"%@",[_dict objectForKey:@"vipLevel"]];
+            gameRoleInfo.gameUserLevel = [NSString stringWithFormat:@"%@",[_dict objectForKey:@"level"]];
+            gameRoleInfo.partyName = [NSString stringWithFormat:@"%@",[_dict objectForKey:@"familyName"]];
+            gameRoleInfo.creatTime = [NSString stringWithFormat:@"%@",[_dict objectForKey:@"createTime"]];
+            
+            [[SMPCQuickSDK defaultInstance] updateRoleInfoWith:gameRoleInfo isCreate:NO];//濡傛灉杩欎釜瑙掕壊鏄垰鍒氬垱寤虹殑锛岃繖閲宨sCreate鍙互浼燳ES
+            break;
+        }
+        case U2S_FreePlatformPay:
+        {
+            SMPCQuickSDKGameRoleInfo *role = [[SMPCQuickSDKGameRoleInfo alloc] init];
+            SMPCQuickSDKPayOrderInfo *order = [[SMPCQuickSDKPayOrderInfo alloc] init];
+
+            role.serverName = [NSString stringWithFormat:@"%@",[_dict objectForKey:@"serverName"]];
+            role.gameRoleName = [NSString stringWithFormat:@"%@",[_dict objectForKey:@"roleName"]];
+            role.serverId = [NSString stringWithFormat:@"%@",[_dict objectForKey:@"sid"]]; //闇�瑕佹槸鏁板瓧瀛楃涓�
+            role.gameRoleID = [NSString stringWithFormat:@"%@",[_dict objectForKey:@"roleID"]];
+            role.gameUserBalance = [NSString stringWithFormat:@"%@",[_dict objectForKey:@"money"]];
+            role.vipLevel = [NSString stringWithFormat:@"%@",[_dict objectForKey:@"vipLevel"]];
+            role.gameUserLevel = [NSString stringWithFormat:@"%@",[_dict objectForKey:@"level"]];
+            role.partyName = [NSString stringWithFormat:@"%@",[_dict objectForKey:@"familyName"]];
+            role.creatTime = [NSString stringWithFormat:@"%@",[_dict objectForKey:@"createTime"]];
+            
+            order.goodsID = [NSString stringWithFormat:@"%@", [_dict objectForKey:@"cpInfo"]]; //蹇呭~ iap鏃舵敞鎰忓拰鑻规灉寮�鍙戣�呭悗鍙颁竴鑷达紝鎴栬�呮笭閬撴槧灏勭殑
+            order.productName = [NSString stringWithFormat:@"%@", [_dict objectForKey:@"title"]];//蹇呭~
+            order.cpOrderID = [NSString stringWithFormat:@"%@", [_dict objectForKey:@"orderId"]]; //蹇呭~ 娓告垙璁㈠崟鍙�
+            order.count = 1;  //蹇呭~ 鏁伴噺
+            order.amount = [[_dict objectForKey:@"mount"] floatValue]; //蹇呭~ 鎬讳环
+            
+//            NSString *_appid = [[SMPCQuickSDK defaultInstance] getConfigValue:@"zfappid"];
+//            if (_appid == nil || [_appid isEqualToString:@""])
+//            {
+//                _appid = sAppID;
+//            }
+            NSString *_appid = sAppID;
+            order.extrasParams = [NSString stringWithFormat:@"{\"appid\":\"%@\",\"cpinfo\":\"%@\",\"cporderid\":\"%@\"}",
+                                  _appid,
+                                  [_dict objectForKey:@"cpInfo"],
+                                  [_dict objectForKey:@"orderId"]
+                                  ];
+//            //涓埆娓犻亾瑕佹眰鍗曚环*鏁伴噺==鎬讳环
+//            if([SMPCQuickSDK defaultInstance].channelType == 9999){
+//                //閫氳繃鍒ゆ柇娓犻亾鍙峰鐞嗙壒瀹氭笭閬撶殑鍙傛暟
+//                order.goodsID = @"productlist.name";
+//            }
+            int error = [[SMPCQuickSDK defaultInstance] payOrderInfo:order
+                                                            roleInfo:role];
+            if (error!=0)
+                NSLog(@"%d", error);
+        }
+            break;
+        case U2S_BatteryListenStart:
+            if(_thread == NULL)
+            {
+                _thread = [[NSThread alloc] initWithTarget:self selector:@selector(BatteryThread) object:nil];
+                [_thread setName:@"BatteryCheck"];
+            }
+            if(![_thread isExecuting])
+            {
+                [_thread start];
+            }
+            break;
+        case U2S_BatteryListenStop:
+            break;
+    }
+}
+@end
+
+extern "C" void native_opus_init(int frequency, int bitRate, int bandMode)
+{
+    s_frequency = frequency;
+    s_bandMode = bandMode;
+    s_bitRate = bitRate;
+    s_frameSize = frequency / 100;
+}
+
+extern "C" int native_opus_encode(opus_int16 *pcm, int len, unsigned char *opus)
+{
+    int errorCode = 0;
+    opus_int32 skip = 0;
+    OpusEncoder *enc = opus_encoder_create(s_frequency, CHANNEL_NUM, OPUS_APPLICATION_VOIP, &errorCode);
+    if (OPUS_OK != errorCode) {
+        enc = NULL;
+        return -1;
+    }
+    
+    opus_encoder_ctl(enc, OPUS_SET_BANDWIDTH(s_bandMode));
+    opus_encoder_ctl(enc, OPUS_SET_BITRATE(s_bitRate));
+    opus_encoder_ctl(enc, OPUS_SET_VBR(1));
+    opus_encoder_ctl(enc, OPUS_SET_COMPLEXITY(10));
+    opus_encoder_ctl(enc, OPUS_SET_INBAND_FEC(0));
+    opus_encoder_ctl(enc, OPUS_SET_FORCE_CHANNELS(OPUS_SIGNAL_VOICE));
+    opus_encoder_ctl(enc, OPUS_SET_DTX(0));
+    opus_encoder_ctl(enc, OPUS_SET_PACKET_LOSS_PERC(0));
+    opus_encoder_ctl(enc, OPUS_GET_LOOKAHEAD(&skip));
+    opus_encoder_ctl(enc, OPUS_SET_LSB_DEPTH(16));
+    
+    unsigned char *rbytes = opus;
+    opus_int16 *frame = pcm;
+    int totalSize = 0;
+    while (len >= s_frameSize)
+    {
+        opus_int32 length = opus_encode(enc, frame, s_frameSize, rbytes + sizeof(char), s_bitRate);
+        rbytes[0] = length;
+        frame += s_frameSize;
+        rbytes += length + sizeof(char);
+        len -= s_frameSize;
+        totalSize += length;
+    }
+    opus_encoder_destroy(enc);
+    return totalSize;
+}
+
+extern "C" int native_opus_decode(unsigned char *opus, int len, short *pcm)
+{
+    int err = 0;
+    //opus_int32 skip = 0;
+    
+    OpusDecoder *dec = opus_decoder_create(s_frequency, CHANNEL_NUM, &err);
+    if (err != OPUS_OK) {
+        dec = NULL;
+        return -1;
+    }
+    
+    while (len > 0)
+    {
+        int frame_opus_length = opus[0];
+        int length = opus_decode(dec, opus + sizeof(char), frame_opus_length, pcm, s_frameSize, 0);
+        opus += sizeof(char) + frame_opus_length;
+        pcm += s_frameSize;
+        len = len - frame_opus_length - sizeof(char);
+    }
+    opus_decoder_destroy(dec);
+    return 0;
+}
diff --git a/SdkProject/channel/qkbt3game/AndroidManifest.xml b/SdkProject/channel/qkbt3game/AndroidManifest.xml
new file mode 100644
index 0000000..cd1ba66
--- /dev/null
+++ b/SdkProject/channel/qkbt3game/AndroidManifest.xml
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="utf-8"?>
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:tools="http://schemas.android.com/tools"
+    package="com.secondworld.sdk">
+
+    <uses-permission android:name="android.permission.GET_TASKS" />
+    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
+    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
+    <uses-permission android:name="android.permission.INTERNET" />
+    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
+    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
+    <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
+    <uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />
+
+    <application
+        android:name=".BtGameApp"
+        android:allowBackup="true"
+        android:usesCleartextTraffic="true"
+        tools:replace="android:name">
+
+        <meta-data
+            android:name="unityplayer.ForwardNativeEventsToDalvik"
+            android:value="true" />
+
+        <activity
+            android:name="com.secondworld.sdk.SplashActivity"
+            android:screenOrientation="sensorLandscape">
+        </activity>
+
+        <provider
+            android:name="androidx.core.content.FileProvider"
+            android:authorities="quicksdk_packName.Provider"
+            android:exported="false"
+            android:grantUriPermissions="true">
+            <meta-data
+                android:name="android.support.FILE_PROVIDER_PATHS"
+                android:resource="@xml/filepaths" />
+        </provider>
+
+
+    </application>
+
+</manifest>
\ No newline at end of file
diff --git a/SdkProject/channel/qkbt3game/build.gradle b/SdkProject/channel/qkbt3game/build.gradle
new file mode 100644
index 0000000..c8f58a8
--- /dev/null
+++ b/SdkProject/channel/qkbt3game/build.gradle
@@ -0,0 +1,4 @@
+//褰撳墠鑴氭湰涓烘笭閬撶殑宸紓鍖栭厤缃�
+dependencies {
+//    implementation project(path: ':quick')
+}
\ No newline at end of file
diff --git a/SdkProject/channel/qkbt3game/config.properties b/SdkProject/channel/qkbt3game/config.properties
new file mode 100644
index 0000000..4218897
--- /dev/null
+++ b/SdkProject/channel/qkbt3game/config.properties
@@ -0,0 +1 @@
+PLUGINS=quick
\ No newline at end of file
diff --git a/SdkProject/channel/qkbt3game/deps.gradle b/SdkProject/channel/qkbt3game/deps.gradle
new file mode 100644
index 0000000..124a6b8
--- /dev/null
+++ b/SdkProject/channel/qkbt3game/deps.gradle
@@ -0,0 +1 @@
+//姝よ剼鏈负娓犻亾鐨勭涓夋柟杩滅▼渚濊禆搴撻厤缃紝浼氬鍒跺埌unity涓敤浜庢瀯寤�
\ No newline at end of file
diff --git a/SdkProject/channel/qkbt3game/java/com/secondworld/sdk/BtGameApp.java b/SdkProject/channel/qkbt3game/java/com/secondworld/sdk/BtGameApp.java
new file mode 100644
index 0000000..211d251
--- /dev/null
+++ b/SdkProject/channel/qkbt3game/java/com/secondworld/sdk/BtGameApp.java
@@ -0,0 +1,21 @@
+package com.secondworld.sdk;
+
+public class BtGameApp extends QuickApp {
+
+    @Override
+    public void onCreate() {
+        super.onCreate();
+        QuickSdkMgr.I.register("40450025922275820036898902533267","31232581");
+    }
+
+    @Override
+    protected PlatformDiff getPlatform() {
+        return new BtGamePlatform();
+    }
+
+    @Override
+    protected Class<? extends GameActivityProxy> getMainProxy() {
+        return BtGameMain.class;
+    }
+
+}
diff --git a/SdkProject/channel/qkbt3game/java/com/secondworld/sdk/BtGameMain.java b/SdkProject/channel/qkbt3game/java/com/secondworld/sdk/BtGameMain.java
new file mode 100644
index 0000000..68eebcd
--- /dev/null
+++ b/SdkProject/channel/qkbt3game/java/com/secondworld/sdk/BtGameMain.java
@@ -0,0 +1,89 @@
+package com.secondworld.sdk;
+
+import android.app.Activity;
+import android.app.AlertDialog;
+import android.content.DialogInterface;
+import android.content.Intent;
+import androidx.annotation.NonNull;
+import android.view.KeyEvent;
+
+import com.quicksdk.QuickSDK;
+import com.quicksdk.Sdk;
+
+public class BtGameMain extends GameActivityProxy {
+
+    @Override
+    public void onCreate(Activity activity) {
+        super.onCreate(activity);
+        QuickSdkMgr.I.requestPermissions(activity);
+        com.quicksdk.Sdk.getInstance().onCreate(activity);
+    }
+
+    @Override
+    public void onStart() {
+        super.onStart();
+        com.quicksdk.Sdk.getInstance().onStart(activity);
+    }
+
+    @Override
+    public void onRestart() {
+        super.onRestart();
+        com.quicksdk.Sdk.getInstance().onRestart(activity);
+    }
+
+    @Override
+    public void onResume() {
+        super.onResume();
+        com.quicksdk.Sdk.getInstance().onResume(activity);
+    }
+
+    @Override
+    public void onStop() {
+        super.onStop();
+        com.quicksdk.Sdk.getInstance().onStop(activity);
+    }
+
+    @Override
+    public void onDestroy() {
+        super.onDestroy();
+        com.quicksdk.Sdk.getInstance().onDestroy(activity);
+    }
+
+    @Override
+    public void onNewIntent(Intent intent) {
+        super.onNewIntent(intent);
+        com.quicksdk.Sdk.getInstance().onNewIntent(intent);
+    }
+
+    @Override
+    public void onActivityResult(int requestCode, int resultCode, Intent data) {
+        super.onActivityResult(requestCode, resultCode, data);
+        QuickSdkMgr.I.onActivityResult(activity, requestCode);
+        com.quicksdk.Sdk.getInstance().onActivityResult(activity, requestCode, resultCode, data);
+    }
+
+    @Override
+    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
+        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
+        QuickSdkMgr.I.onRequestPermissionsResult(activity, requestCode, grantResults);
+    }
+
+    @Override
+    public boolean onKeyDown(int keyCode, KeyEvent event) {
+        if (keyCode == KeyEvent.KEYCODE_BACK) {
+            if (QuickSDK.getInstance().isShowExitDialog()) {
+                Sdk.getInstance().exit(activity);
+            } else {
+                // 娓告垙璋冪敤鑷韩鐨勯��鍑哄璇濇锛岀偣鍑荤‘瀹氬悗锛岃皟鐢╭uick鐨別xit鎺ュ彛
+                new AlertDialog.Builder(activity).setTitle("閫�鍑�").setMessage("鏄惁閫�鍑烘父鎴�?").setPositiveButton("纭畾", new DialogInterface.OnClickListener() {
+                    @Override
+                    public void onClick(DialogInterface arg0, int arg1) {
+                        Sdk.getInstance().exit(activity);
+                    }
+                }).setNegativeButton("鍙栨秷", null).show();
+            }
+            return true;
+        }
+        return super.onKeyDown(keyCode, event);
+    }
+}
diff --git a/SdkProject/channel/qkbt3game/java/com/secondworld/sdk/BtGamePlatform.java b/SdkProject/channel/qkbt3game/java/com/secondworld/sdk/BtGamePlatform.java
new file mode 100644
index 0000000..e5f881c
--- /dev/null
+++ b/SdkProject/channel/qkbt3game/java/com/secondworld/sdk/BtGamePlatform.java
@@ -0,0 +1,9 @@
+                                               package com.secondworld.sdk;
+
+public class BtGamePlatform extends PlatformDiff {
+
+    @Override
+    public String platformName() {
+        return "quick";
+    }
+}
diff --git a/SdkProject/gradle.properties b/SdkProject/gradle.properties
index 3479196..482d2a1 100644
--- a/SdkProject/gradle.properties
+++ b/SdkProject/gradle.properties
@@ -18,4 +18,4 @@
 ## Automatically convert third-party libraries to use AndroidX
 android.enableJetifier=true
 #褰撳墠鏋勫缓鐨勬笭閬撳悕绉�
-CHANNEL_NAME=gtgame
\ No newline at end of file
+CHANNEL_NAME=qkbt3game
\ No newline at end of file

--
Gitblit v1.8.0