Channel/Android/mlgtgame_quickhw/AndroidManifest.xml
New file @@ -0,0 +1,17 @@ <?xml version="1.0" encoding="utf-8"?> <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.GameActivity" android:theme="@style/UnityThemeSelector"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> <meta-data android:name="unityplayer.UnityActivity" android:value="true" /> </activity> </application> </manifest> Channel/Android/mlgtgame_quickhw/debug/libs/library-debug-mlgtgame_quickhw.aarBinary files differ
Channel/Android/mlgtgame_quickhw/deps.gradle
New file @@ -0,0 +1,3 @@ dependencies { } Channel/Android/mlgtgame_quickhw/release/libs/library-release-mlgtgame_quickhw.aarBinary files differ
SdkProject/channel/mlgtgame_quickhw/AndroidManifest.xml
New file @@ -0,0 +1,86 @@ <?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.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <!-- GooglePay--> <uses-permission android:name="com.android.vending.BILLING" /> <application android:name=".GTGameApp" android:requestLegacyExternalStorage="true" android:usesCleartextTraffic="true" android:supportsPictureInPicture= "true" android:resizeableActivity="true" android:exported="false" android:extractNativeLibs="true" tools:replace="android:name"> <provider android:name="androidx.core.content.FileProvider" android:authorities="${applicationId}.fileprovider" android:exported="false" android:grantUriPermissions="true"> <meta-data android:name="android.support.FILE_PROVIDER_PATHS" android:resource="@xml/filepaths" /> </provider> <!--配置渠道id,需要为字符串--> <meta-data android:name="channelId" android:value="c1" /> <meta-data android:name="showLoginLogo" android:value="true"/> <meta-data android:name="noFloatViewBinding" android:value="1" /> <!--Google登录配置,没有Google登录可以不加 --> <meta-data android:name="google-signin-client_id" android:value="296267075349-7898e06jukoa756gb1kas6njfjir3os6.apps.googleusercontent.com"/> <activity android:name="com.facebook.FacebookActivity" android:configChanges="keyboard|keyboardHidden|screenLayout|screenSize|orientation" /> <activity android:name="com.facebook.CustomTabMainActivity" /> <activity android:name="com.facebook.CustomTabActivity" android:exported="true"> <intent-filter> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.BROWSABLE" /> <data android:scheme="@string/fb_login_protocol_scheme" /> </intent-filter> </activity> <meta-data android:name="com.facebook.sdk.ApplicationId" android:value="@string/facebook_app_id" /> <!-- facebook v13.0.0开始增加的参数 --> <meta-data android:name="com.facebook.sdk.ClientToken" android:value="@string/facebook_client_token"/> <!-- 必接 end--> <!-- 选接 begin--> <!-- 此activity是facebook分享需要用到,如果不需要facebook分享可以不写 --> <activity android:name="com.quickgame.android.sdk.activity.FacebookShareActivity" android:configChanges="keyboardHidden|orientation|screenSize" android:theme="@style/hw_activityDialog" /> <!-- 此provider是facebook图片分享需要用到,如果不需要facebook分享可以不写 --> <!-- 将<加上fbappid>替换为自己的fb appid --> <provider android:name="com.facebook.FacebookContentProvider" android:authorities="com.facebook.app.FacebookContentProvider711531044285658" android:exported="true" /> <!-- 选接 end--> </application> </manifest> SdkProject/channel/mlgtgame_quickhw/assets/QHinfo
New file @@ -0,0 +1 @@ https://hwsdk.happilygame.com SdkProject/channel/mlgtgame_quickhw/config.properties
New file @@ -0,0 +1 @@ PLUGINS= SdkProject/channel/mlgtgame_quickhw/deps.gradle
New file @@ -0,0 +1,3 @@ dependencies { } SdkProject/channel/mlgtgame_quickhw/java/com/secondworld/sdk/GTGameApp.java
New file @@ -0,0 +1,25 @@ package com.secondworld.sdk; import android.app.Application; public class GTGameApp extends Application { @Override public void onCreate() { super.onCreate(); GameAppProxy.create(this,new GTGamePlatform()); registerProxy(); } protected void registerProxy() { //主界面代理注册 GameActivity.registerProxy(GTGameMain.class); } } SdkProject/channel/mlgtgame_quickhw/java/com/secondworld/sdk/GTGameMain.java
New file @@ -0,0 +1,59 @@ package com.secondworld.sdk; import android.app.Activity; import android.content.Intent; import androidx.annotation.NonNull; public class GTGameMain extends GameActivityProxy { @Override public void onCreate(Activity activity) { super.onCreate(activity); // 初始化SDK MySdkMgr.I.OnCreate(activity); } @Override public void onStart() { super.onStart(); MySdkMgr.I.onStart(); } @Override public void onResume() { super.onResume(); MySdkMgr.I.onResume(); } @Override public void onPause() { super.onPause(); MySdkMgr.I.onPause(); } @Override public void onStop() { super.onPause(); MySdkMgr.I.onStop(); } @Override public void onDestroy() { super.onDestroy(); MySdkMgr.I.onDestroy(); } @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { MySdkMgr.I.onActivityResult(requestCode, resultCode, data); } @Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { super.onRequestPermissionsResult(requestCode, permissions, grantResults); MySdkMgr.I.onRequestPermissionsResult(requestCode, permissions, grantResults); } } SdkProject/channel/mlgtgame_quickhw/java/com/secondworld/sdk/GTGamePlatform.java
New file @@ -0,0 +1,9 @@ package com.secondworld.sdk; public class GTGamePlatform extends PlatformDiff { @Override public String platformName() { return "mlgtgame"; } } SdkProject/channel/mlgtgame_quickhw/java/com/secondworld/sdk/MySdkMgr.java
New file @@ -0,0 +1,236 @@ package com.secondworld.sdk; import android.app.Activity; import android.content.Intent; import android.widget.Toast; import androidx.annotation.NonNull; import com.quickgame.android.sdk.QuickGameManager; import com.quickgame.android.sdk.QuickGameManager.QGPaymentCallback; import com.quickgame.android.sdk.QuickGameManager.SDKCallback; import com.quickgame.android.sdk.bean.QGOrderInfo; import com.quickgame.android.sdk.bean.QGRoleInfo; import com.quickgame.android.sdk.bean.QGUserData; import com.quickgame.android.sdk.model.QGUserHolder; import com.secondworld.sdk.utils.CodeA2U; import com.secondworld.sdk.utils.LogUtil; import org.json.JSONException; import org.json.JSONObject; public class MySdkMgr extends PlatformSdkMgr { private static final String TAG = MySdkMgr.class.getSimpleName(); public static MySdkMgr I = new MySdkMgr(); QuickGameManager sdkInstance; public void init(Activity activity) { sdkInitState = SdkInitState.LOADING; SampleSDKCallback sdkCallback = new SampleSDKCallback(); sdkInstance.init(activity, "28593039166907658241154673876478", sdkCallback); } public void OnCreate(Activity activity) { //sdk init sdkInstance = QuickGameManager.getInstance(); // init by your product code init(activity); sdkInstance.onCreate(activity); } public void onStart() { sdkInstance.onStart(GTGameMain.I.activity); } public void login() { switch (sdkInitState) { case FAILED: case UNKNOWN: { break; } case SUCCEED: { sdkInstance.login(GTGameMain.I.activity); break; } case LOADING: { Toast.makeText(GameAppProxy.app, "Initializing", Toast.LENGTH_LONG).show(); break; } } } public void SetRoleDate(String roleID, String roleName, String level, String serverID, String serverName, String vipLevel) { //上报角色信息 QGRoleInfo roleInfo = new QGRoleInfo(); roleInfo.setRoleId(roleID); roleInfo.setRoleName(roleName); roleInfo.setRoleLevel(level); roleInfo.setServerId(serverID); roleInfo.setServerName(serverName); roleInfo.setVipLevel(vipLevel); sdkInstance.submitRoleInfo(roleInfo); } public void LogOutInitialize() { sdkInstance.logout(GameActivityProxy.I.activity); } public void pay(String roleID, String money, String serverID, String productID, String productName, String cpOrderID, String Extra, QGRoleInfo roleInfo) { LogUtil.i(TAG, "调起充值:roleID-" + roleID + " money-" + money + " serverID-" + serverID + " productID-" + productID + " productName-" + productName + " Extra-" + Extra); SamplePaymentCallback paymentCallback = new SamplePaymentCallback(); QGOrderInfo orderInfo = new QGOrderInfo(); orderInfo.setOrderSubject(productName); orderInfo.setProductOrderId(cpOrderID); orderInfo.setAmount(Double.parseDouble(money)); orderInfo.setSuggestCurrency("CNY"); orderInfo.setGoodsId(productID); orderInfo.setExtrasParams(Extra); sdkInstance.pay(GTGameMain.I.activity, orderInfo, roleInfo, paymentCallback); } /** * sdk login callback */ private class SampleSDKCallback implements SDKCallback { @Override public void onLoginFinished(QGUserData userData, QGUserHolder loginState) { if (loginState.getStateCode() == QGUserHolder.LOGIN_SUCCESS) { //show float view sdkInstance.showFloatView(GameActivityProxy.I.activity); try { args.clear(); JSONObject info = new JSONObject(); String channelID = sdkInstance.getChannelId(); if (channelID == null || channelID.isEmpty()) channelID = "9997"; String account = userData.getUid() + "@" + channelID; info.put("account", account); info.put("userName", userData.getUid()); info.put("token", userData.getToken()); args.put("info", info); UnityMsgHandler.sendMessageToUnity(CodeA2U.PlatformLoginOk, args); } catch (JSONException e) { e.printStackTrace(); LogUtil.e("SdkManager 登录成功 但信息处理失败", e); } LogUtil.i(TAG, "login success,uid:" + userData.getUid() + " displayUid>:" + userData.getdisplayUid()); } else { Toast.makeText(GameAppProxy.app, "login fail", Toast.LENGTH_LONG).show(); //登录失败 LogUtil.e("SdkManager", "登录失败:"); UnityMsgHandler.sendMessageToUnity(CodeA2U.PlatformLoginFail); } } @Override public void onInitFinished(boolean isSuccess,String msg) { if (isSuccess) { LogUtil.i(TAG, "channelId:" + sdkInstance.getChannelId() + "init success->"); sdkInitState = SdkInitState.SUCCEED; LogUtil.debug("SdkManager", "初始化成功"); UnityMsgHandler.sendMessageToUnity(CodeA2U.PlatformInitOk); } else { Toast.makeText(GameAppProxy.app, "init fail "+msg, Toast.LENGTH_LONG).show(); //初始化失败 sdkInitState = SdkInitState.FAILED; LogUtil.e("SdkManager", "初始化失败 msg:" + msg); UnityMsgHandler.sendMessageToUnity(CodeA2U.PlatformInitFail); } } @Override public void onLogout() { GameActivityProxy.I.activity.runOnUiThread(new Runnable() { @Override public void run() { //注销成功 //注销成功,需要把游戏切换回登陆前的场景,并重新弹出登录框等操作 UnityMsgHandler.sendMessageToUnity(CodeA2U.PlatformLogoutOk); } }); } @Override public void onGooglePlaySub(String goodsId, String sdkOrder, boolean isAutoRenewing, boolean isAcknowledged) { LogUtil.i(TAG, "goodsId=" + goodsId + "&&sdkOrder=" + sdkOrder); } } /** * pay callback */ private class SamplePaymentCallback implements QGPaymentCallback { @Override public void onPaySuccess(String orderId, String orderNo, String goodsId, String extraParams) { LogUtil.i(TAG,"pay success"); //支付成功 //sdkOrderID:quick订单号 cpOrderID:游戏订单号 UnityMsgHandler.sendMessageToUnity(CodeA2U.PlatformPayOk); } @Override public void onPayFailed(String orderId, String orderNo, String errorMessage) { LogUtil.i(TAG, "pay fail:" + errorMessage); //支付失败 UnityMsgHandler.sendMessageToUnity(CodeA2U.PlatformPayFail); } @Override public void onPayCancel(String orderId, String orderNo, String errorMessage) { LogUtil.i(TAG, "pay cancel"); //支付取消 UnityMsgHandler.sendMessageToUnity(CodeA2U.PlatformPayCancel); } } public void onResume() { sdkInstance.onResume(GTGameMain.I.activity); } public void onPause() { sdkInstance.onPause(GTGameMain.I.activity); } public void onStop() { sdkInstance.onStop(GTGameMain.I.activity); } public void onDestroy() { //退出登录、退出游戏调用 sdkInstance.onDestroy(GTGameMain.I.activity); } public void onActivityResult(int requestCode, int resultCode, Intent data) { sdkInstance.onActivityResult(requestCode,resultCode,data); } public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { sdkInstance.onRequestPermissionsResult(requestCode, permissions, grantResults); } } SdkProject/channel/mlgtgame_quickhw/java/com/secondworld/sdk/command/CmdCreateRole.java
New file @@ -0,0 +1,25 @@ package com.secondworld.sdk.command; import com.secondworld.sdk.MySdkMgr; import com.secondworld.sdk.utils.CodeU2A; import org.json.JSONObject; public class CmdCreateRole implements ICommand { @Override public int getCode() { return CodeU2A.CreateRole; } @Override public void process(JSONObject json) throws Exception { MySdkMgr.I.SetRoleDate( json.getString("roleID"), json.getString("roleName"), json.getString("level"), json.getString("sid"), json.getString("serverName"), json.getString("vipLevel") ); } } SdkProject/channel/mlgtgame_quickhw/java/com/secondworld/sdk/command/CmdOpenDashboard.java
New file @@ -0,0 +1,17 @@ package com.secondworld.sdk.command; import com.secondworld.sdk.utils.CodeU2A; import org.json.JSONObject; public class CmdOpenDashboard implements ICommand{ @Override public int getCode() { return CodeU2A.OpenDashboard; } @Override public void process(JSONObject json) throws Exception { } } SdkProject/channel/mlgtgame_quickhw/java/com/secondworld/sdk/command/CmdPayFinished.java
New file @@ -0,0 +1,16 @@ package com.secondworld.sdk.command; import com.secondworld.sdk.utils.CodeU2A; import org.json.JSONObject; public class CmdPayFinished implements ICommand{ @Override public int getCode() { return CodeU2A.PayFinished; } @Override public void process(JSONObject json) throws Exception { } } SdkProject/channel/mlgtgame_quickhw/java/com/secondworld/sdk/command/CmdPlatformInit.java
New file @@ -0,0 +1,17 @@ package com.secondworld.sdk.command; import com.secondworld.sdk.utils.CodeU2A; import org.json.JSONObject; public class CmdPlatformInit implements ICommand { @Override public int getCode() { return CodeU2A.PlatformInit; } @Override public void process(JSONObject json) throws Exception { } } SdkProject/channel/mlgtgame_quickhw/java/com/secondworld/sdk/command/CmdPlatformLogin.java
New file @@ -0,0 +1,18 @@ package com.secondworld.sdk.command; import com.secondworld.sdk.MySdkMgr; import com.secondworld.sdk.utils.CodeU2A; import org.json.JSONObject; public class CmdPlatformLogin implements ICommand { @Override public int getCode() { return CodeU2A.PlatformLogin; } @Override public void process(JSONObject json) throws Exception { MySdkMgr.I.login(); } } SdkProject/channel/mlgtgame_quickhw/java/com/secondworld/sdk/command/CmdPlatformLogout.java
New file @@ -0,0 +1,17 @@ package com.secondworld.sdk.command; import com.secondworld.sdk.MySdkMgr; import com.secondworld.sdk.utils.CodeU2A; import org.json.JSONObject; public class CmdPlatformLogout implements ICommand { @Override public int getCode() { return CodeU2A.PlatformLogout; } @Override public void process(JSONObject json) throws Exception { MySdkMgr.I.LogOutInitialize(); } } SdkProject/channel/mlgtgame_quickhw/java/com/secondworld/sdk/command/CmdPlatformPay.java
New file @@ -0,0 +1,33 @@ package com.secondworld.sdk.command; import com.quickgame.android.sdk.bean.QGRoleInfo; import com.secondworld.sdk.GameAppProxy; import com.secondworld.sdk.MySdkMgr; import com.secondworld.sdk.utils.CodeU2A; import org.json.JSONObject; public class CmdPlatformPay implements ICommand { @Override public int getCode() { return CodeU2A.PlatformPay; } @Override public void process(JSONObject json) throws Exception { //channelID_cp订单id_区服id_游戏充值编号 长度不超过100 只能用下划线 QGRoleInfo roleInfo = new QGRoleInfo(); roleInfo.setRoleId(json.getString("roleID")); roleInfo.setRoleLevel(json.getString("level")); roleInfo.setRoleName(json.getString("roleName")); roleInfo.setServerName(json.getString("serverName")); roleInfo.setServerId(json.getString("sid")); roleInfo.setVipLevel(json.getString("vipLevel")); String attach = "9998_" + json.getString("orderId") + "_" + json.getString("sid") + "_" + json.getString("cpInfo"); MySdkMgr.I.pay(json.getString("roleID"), json.getString("mount"), json.getString("sid"), json.getString("cpInfo"), json.getString("title"), json.getString("orderId"), attach, roleInfo); } } SdkProject/channel/mlgtgame_quickhw/java/com/secondworld/sdk/command/CmdRoleLevelUp.java
New file @@ -0,0 +1,26 @@ package com.secondworld.sdk.command; import com.secondworld.sdk.MySdkMgr; import com.secondworld.sdk.utils.CodeU2A; import org.json.JSONObject; public class CmdRoleLevelUp implements ICommand { @Override public int getCode() { return CodeU2A.RoleLevelUp; } @Override public void process(JSONObject json) throws Exception { MySdkMgr.I.SetRoleDate( json.getString("roleID"), json.getString("roleName"), json.getString("level"), json.getString("sid"), json.getString("serverName"), json.getString("vipLevel") ); } } SdkProject/channel/mlgtgame_quickhw/java/com/secondworld/sdk/command/CmdRoleLogin.java
New file @@ -0,0 +1,27 @@ package com.secondworld.sdk.command; import com.secondworld.sdk.MySdkMgr; import com.secondworld.sdk.utils.CodeU2A; import org.json.JSONObject; public class CmdRoleLogin implements ICommand{ @Override public int getCode() { return CodeU2A.RoleLogin; } @Override public void process(JSONObject json) throws Exception { MySdkMgr.I.SetRoleDate( json.getString("roleID"), json.getString("roleName"), json.getString("level"), json.getString("sid"), json.getString("serverName"), json.getString("vipLevel") ); } } SdkProject/channel/mlgtgame_quickhw/java/com/secondworld/sdk/command/CmdTrackingCloseVote.java
New file @@ -0,0 +1,15 @@ package com.secondworld.sdk.command; import com.secondworld.sdk.utils.CodeU2A; import org.json.JSONObject; public class CmdTrackingCloseVote implements ICommand{ @Override public int getCode() { return CodeU2A.TrackingCloseVote; } @Override public void process(JSONObject json) throws Exception { } } SdkProject/channel/mlgtgame_quickhw/java/com/secondworld/sdk/command/CmdTutorialFinish.java
New file @@ -0,0 +1,15 @@ package com.secondworld.sdk.command; import com.secondworld.sdk.utils.CodeU2A; import org.json.JSONObject; public class CmdTutorialFinish implements ICommand{ @Override public int getCode() { return CodeU2A.TutorialFinish; } @Override public void process(JSONObject json) throws Exception { } } SdkProject/channel/mlgtgame_quickhw/java/com/secondworld/sdk/command/GoToReview.java
New file @@ -0,0 +1,16 @@ package com.secondworld.sdk.command; import com.secondworld.sdk.utils.CodeU2A; import org.json.JSONObject; public class GoToReview implements ICommand { @Override public int getCode() { return CodeU2A.GoToReview; } @Override public void process(JSONObject json) throws Exception { } } SdkProject/channel/mlgtgame_quickhw/res/values/strings.xml
New file @@ -0,0 +1,7 @@ <?xml version="1.0" encoding="utf-8"?> <resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingTranslation"> <string name="facebook_app_id">711531044285658</string> <string name="fb_login_protocol_scheme">fb711531044285658</string> <string name="facebook_client_token">3ddd4630ea77fdee4b3e3e0fe79e9fdd</string> </resources> SdkProject/channel/mlgtgame_quickhw/res/xml/filepaths.xml
New file @@ -0,0 +1,13 @@ <?xml version="1.0" encoding="utf-8"?> <resources> <paths> <root-path path="." name="root_path"/> <!-- <external-path name="external_storage_root" path="." /> <external-path name="external_storage_download" path="." /> <external-cache-path name="external_cache_path" path="." /> <external-files-path name="external_files_path" path="." /> <external-path name="external_path" path=". " /> <cache-path name="cache_path" path="." /> <files-path name="files_path" path="." />--> </paths> </resources> SdkProject/gradle.properties
@@ -18,4 +18,4 @@ ## Automatically convert third-party libraries to use AndroidX android.enableJetifier=true #当前构建的渠道名称 CHANNEL_NAME=mlgtgame CHANNEL_NAME=mlgtgame_quickhw SdkProject/library/build.gradle
@@ -203,24 +203,30 @@ force = true } //sdk所需依赖 implementation 'androidx.recyclerview:recyclerview:1.0.0' implementation 'com.squareup.okhttp3:logging-interceptor:3.12.0' //firebase implementation(platform("com.google.firebase:firebase-bom:32.2.2")) implementation 'com.google.firebase:firebase-analytics' implementation 'com.google.firebase:firebase-auth' implementation 'com.google.android.gms:play-services-auth:20.6.0' implementation 'com.facebook.android:facebook-login:16.2.0' implementation 'androidx.activity:activity-compose:1.3.1' // google 支付 implementation 'com.android.billingclient:billing:6.0.1' implementation 'androidx.fragment:fragment:1.3.2' // adjust (V1.0.2新增) implementation 'com.adjust.sdk:adjust-android:4.33.5' implementation 'com.android.installreferrer:installreferrer:2.2' implementation 'com.google.android.gms:play-services-ads-identifier:18.0.1' implementation 'com.google.android.gms:play-services-appset:16.0.2' //以下为必需依赖的库 implementation(name: 'quickgame_hw_2.3.3', ext: 'aar') //x.x.x为具体版本 implementation 'com.android.billingclient:billing:5.2.1'//google内购 implementation 'androidx.appcompat:appcompat:1.1.0' implementation "org.jetbrains.kotlin:kotlin-stdlib:1.4.10" //以下为选接库 //谷歌登录 implementation 'com.google.android.gms:play-services-auth:19.0.0' implementation 'com.facebook.android:facebook-android-sdk:16.0.0' //appsflyer // implementation 'com.appsflyer:af-android-sdk:6.10.3' ////adjust // implementation 'com.adjust.sdk:adjust-android:4.31.1' ////adjust需要 // implementation 'com.google.android.gms:play-services-ads-identifier:17.0.1' ////appsflyer、adjust需要 // implementation 'com.android.installreferrer:installreferrer:2.2' ////Twitter登录 // implementation 'com.twitter.sdk.android:twitter:3.1.1' ////Line登录 // implementation (name: 'line_sdk_4.0.8',ext: 'aar') ////tapdb // implementation files('libs/libTapDB-3.3.0.aar') ////TalkingData // implementation files('libs/TalkingData_GP_GameAnalytics_V4.0.69.jar') } SdkProject/library/google-services.json
@@ -1,60 +1,26 @@ { "project_info": { "project_number": "966789831936", "project_id": "djmx-android", "storage_bucket": "djmx-android.appspot.com" "project_number": "732138931273", "project_id": "djmx666-b7853", "storage_bucket": "djmx666-b7853.appspot.com" }, "client": [ { "client_info": { "mobilesdk_app_id": "1:966789831936:android:f381abd6b3cbbf70ff67e5", "mobilesdk_app_id": "1:732138931273:android:739ec3eaddfaaf4a73eb98", "android_client_info": { "package_name": "com.secondworld.sdk" } }, "oauth_client": [ { "client_id": "966789831936-7kvc289ui991rool953ms9btb7dcihuv.apps.googleusercontent.com", "client_type": 1, "android_info": { "package_name": "com.secondworld.sdk", "certificate_hash": "182d414a78abee730625ac28dc5354e71e3cf27f" } }, { "client_id": "966789831936-8brse3va05r8vons4809mr1nqdf7kkcs.apps.googleusercontent.com", "client_type": 1, "android_info": { "package_name": "com.secondworld.sdk", "certificate_hash": "0c2693d70e106a479c2a6608f7249d81a948576f" } }, { "client_id": "966789831936-oq3boodul1do38e3p91a8on3bi9ob6tb.apps.googleusercontent.com", "client_type": 1, "android_info": { "package_name": "com.secondworld.sdk", "certificate_hash": "fe6b04b8caab520c5bb652a0fe27e54c1497de7f" } }, { "client_id": "966789831936-h1aps8f3s0v6rgbdu4lt2h74933m7661.apps.googleusercontent.com", "client_type": 3 } ], "oauth_client": [], "api_key": [ { "current_key": "AIzaSyCKWCtHXjIkHtnnKcoua1yf-YXxXmrXla8" "current_key": "AIzaSyBg1OT3J7ClBNviEYrL3S6gXkWIUNvjYjs" } ], "services": { "appinvite_service": { "other_platform_oauth_client": [ { "client_id": "966789831936-h1aps8f3s0v6rgbdu4lt2h74933m7661.apps.googleusercontent.com", "client_type": 3 } ] "other_platform_oauth_client": [] } } } SdkProject/library/libs/quickgame_hw_2.3.3.aarBinary files differ