Commit d06621678c350e8667ea3e036261222a2da72109

Authored by lixiang
1 parent 12a4c3bb0d
Exists in master

日期修改

Showing 1 changed file with 1 additions and 1 deletions Inline Diff

1 # Gump SDK 4 for Android接入文档 1 # Gump SDK 4 for Android接入文档
2 2
3 V4.9.5 3 V4.9.5
4 2022年09月08日 4 2023年09月08日
5 5
6 6
7 ## 版本概述 7 ## 版本概述
8 8
9 此版本为使用AndroidStudio开发的版本,使用aar的方式提供sdk接入包,并使用gradle在线依赖方式,aar内别不包含依赖包,请按此文档描述接入. 9 此版本为使用AndroidStudio开发的版本,使用aar的方式提供sdk接入包,并使用gradle在线依赖方式,aar内别不包含依赖包,请按此文档描述接入.
10 10
11 此SDK适用android4.0以上系统. 11 此SDK适用android4.0以上系统.
12 12
13 ## 第一章 接入指南 13 ## 第一章 接入指南
14 ### 1.依赖导入 14 ### 1.依赖导入
15 配置gradle,以下为必须项 15 配置gradle,以下为必须项
16 16
17 ```groovy 17 ```groovy
18 repositories{ 18 repositories{
19 maven{ 19 maven{
20 url "http://117.50.8.198:8081/nexus/content/repositories/sdk" 20 url "http://117.50.8.198:8081/nexus/content/repositories/sdk"
21 } 21 }
22 } 22 }
23 dependencies { 23 dependencies {
24 implementation 'com.gumptech.sdk:GameSDK:4.9.5' 24 implementation 'com.gumptech.sdk:GameSDK:4.9.5'
25 25
26 } 26 }
27 ``` 27 ```
28 28
29 29
30 ### 2.修改AndroidManifest.xml文件 30 ### 2.修改AndroidManifest.xml文件
31 首先添加必要的权限,如下所示: 31 首先添加必要的权限,如下所示:
32 32
33 ```xml 33 ```xml
34 <uses-permission android:name="android.permission.INTERNET" /> 34 <uses-permission android:name="android.permission.INTERNET" />
35 <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> 35 <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
36 <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> 36 <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
37 <uses-permission android:name="com.google.android.gms.permission.AD_ID"/> 37 <uses-permission android:name="com.google.android.gms.permission.AD_ID"/>
38 ``` 38 ```
39 39
40 其次注册相应的Activity,具体如下: 40 其次注册相应的Activity,具体如下:
41 41
42 ```xml 42 ```xml
43 <activity 43 <activity
44 android:name="com.gump.game.sdk.PassportActivity" 44 android:name="com.gump.game.sdk.PassportActivity"
45 android:configChanges="orientation|screenSize|keyboardHidden|keyboard|screenLayout" 45 android:configChanges="orientation|screenSize|keyboardHidden|keyboard|screenLayout"
46 android:launchMode="singleTask" 46 android:launchMode="singleTask"
47 android:theme="@style/Theme.Origin" //登录界面的主题,可选项:Theme.Origin\Theme.Orange\Theme.Blue\Theme.Pink 47 android:theme="@style/Theme.Origin" //登录界面的主题,可选项:Theme.Origin\Theme.Orange\Theme.Blue\Theme.Pink
48 android:screenOrientation="behind" 48 android:screenOrientation="behind"
49 android:windowSoftInputMode="stateAlwaysHidden|adjustPan"> 49 android:windowSoftInputMode="stateAlwaysHidden|adjustPan">
50 </activity> 50 </activity>
51 <activity 51 <activity
52 android:name="com.gump.game.sdk.RechargeActivity" 52 android:name="com.gump.game.sdk.RechargeActivity"
53 android:configChanges="orientation|screenSize|keyboardHidden|keyboard|screenLayout" 53 android:configChanges="orientation|screenSize|keyboardHidden|keyboard|screenLayout"
54 android:launchMode="singleTask" 54 android:launchMode="singleTask"
55 android:screenOrientation="behind" 55 android:screenOrientation="behind"
56 android:theme="@style/Theme.Translucent" > 56 android:theme="@style/Theme.Translucent" >
57 <intent-filter> 57 <intent-filter>
58 <category android:name="android.intent.category.DEFAULT" /> 58 <category android:name="android.intent.category.DEFAULT" />
59 <action android:name="android.intent.action.VIEW" /> 59 <action android:name="android.intent.action.VIEW" />
60 <category android:name="android.intent.category.BROWSABLE" /> 60 <category android:name="android.intent.category.BROWSABLE" />
61 <data 61 <data
62 android:host="com.gump.sdk" 62 android:host="com.gump.sdk"
63 android:scheme="gump+游戏的appId" /> 63 android:scheme="gump+游戏的appId" />
64 </intent-filter> 64 </intent-filter>
65 </activity> 65 </activity>
66 ``` 66 ```
67 67
68 ### 3.向Gump平台索要游戏ID(AppID),完成代码接入 68 ### 3.向Gump平台索要游戏ID(AppID),完成代码接入
69 正式开始接入逻辑代码前,先介绍下一些附加设置,以方便代码接入 69 正式开始接入逻辑代码前,先介绍下一些附加设置,以方便代码接入
70 70
71 *是否打印debug日志 71 *是否打印debug日志
72 72
73 ```java 73 ```java
74 GameSDK.getSettings().enableDebugLogging(true); 74 GameSDK.getSettings().enableDebugLogging(true);
75 ``` 75 ```
76 76
77 *设置需要启用的第三方登录,参数可选类型见第二章:[第三方登录平台](http://repository.gumptech.com:81/document/gamesdk4-android/blob/master/IntegrationGuide.md#1-third_plat) 字段说明 77 *设置需要启用的第三方登录,参数可选类型见第二章:[第三方登录平台](http://repository.gumptech.com:81/document/gamesdk4-android/blob/master/IntegrationGuide.md#1-third_plat) 字段说明
78 78
79 ```java 79 ```java
80 GameSDK.getSettings().requestThirdSupport(SDKSettings.THIRD_SUPPORT_*); 80 GameSDK.getSettings().requestThirdSupport(SDKSettings.THIRD_SUPPORT_*);
81 ``` 81 ```
82 82
83 83
84 #### 1.调用GameSDK前需要执行初始化。 84 #### 1.调用GameSDK前需要执行初始化。
85 85
86 若不需要分渠道 86 若不需要分渠道
87 87
88 ```java 88 ```java
89 GameSDK.init(Context,Appid); 89 GameSDK.init(Context,Appid);
90 ``` 90 ```
91 如果需要定义渠道,必须使用如下方法 91 如果需要定义渠道,必须使用如下方法
92 92
93 ```java 93 ```java
94 GameSDK.init(Context,Appid,ChannelId); 94 GameSDK.init(Context,Appid,ChannelId);
95 ``` 95 ```
96 96
97 97
98 #### 2.调用GameSDK的登录方法,将执行登录流程,需要一个Activity实例作参数 98 #### 2.调用GameSDK的登录方法,将执行登录流程,需要一个Activity实例作参数
99 99
100 ```java 100 ```java
101 GameSDK.login(Activity); 101 GameSDK.login(Activity);
102 ``` 102 ```
103 在此之前,开发者需要注册用户状态监听以接受用户的登录/登出通知,通常如下: 103 在此之前,开发者需要注册用户状态监听以接受用户的登录/登出通知,通常如下:
104 104
105 ```java 105 ```java
106 GameSDK.setUserStateListener(new LoginStateListener() { 106 GameSDK.setUserStateListener(new LoginStateListener() {
107 107
108 @Override 108 @Override
109 public void onCreateUser() { 109 public void onCreateUser() {
110 //新用户注册,用于事件打点。勿阻塞此方法,否则影响登录流程 110 //新用户注册,用于事件打点。勿阻塞此方法,否则影响登录流程
111 Log.i(TAG,"Someone registers an new Account"); 111 Log.i(TAG,"Someone registers an new Account");
112 } 112 }
113 113
114 @Override 114 @Override
115 public void onLoginSuccess(GumpUser gumpUser) { 115 public void onLoginSuccess(GumpUser gumpUser) {
116 //登录成功,用户信息包含在GumpUser对象里 116 //登录成功,用户信息包含在GumpUser对象里
117 } 117 }
118 118
119 @Override 119 @Override
120 public void onLoginFailed(int code, String msg) { 120 public void onLoginFailed(int code, String msg) {
121 //登录出错,根据错误码和信息判断错误类型 121 //登录出错,根据错误码和信息判断错误类型
122 Toast.makeText(MainActivity.this, "Login failed:code="+code+",message="+msg, Toast.LENGTH_SHORT).show(); 122 Toast.makeText(MainActivity.this, "Login failed:code="+code+",message="+msg, Toast.LENGTH_SHORT).show();
123 } 123 }
124 124
125 @Override 125 @Override
126 public void onLoginCanceled() { 126 public void onLoginCanceled() {
127 //用户取消登录 127 //用户取消登录
128 Toast.makeText(MainActivity.this, "operate be canceled", Toast.LENGTH_SHORT).show(); 128 Toast.makeText(MainActivity.this, "operate be canceled", Toast.LENGTH_SHORT).show();
129 } 129 }
130 130
131 @Override 131 @Override
132 public void onLogout() { 132 public void onLogout() {
133 //用户登出 133 //用户登出
134 134
135 } 135 }
136 @Override 136 @Override
137 public void onPermissionDenied(String[] deniedPermissions) { 137 public void onPermissionDenied(String[] deniedPermissions) {
138 //用户未授予权限,参数为没有获取的权限 138 //用户未授予权限,参数为没有获取的权限
139 } 139 }
140 }); 140 });
141 ``` 141 ```
142 142
143 如上成功登录后收到的GumpUser对象包含以下信息 143 如上成功登录后收到的GumpUser对象包含以下信息
144 144
145 ```java 145 ```java
146 gumpUser.getUid();//获取用户的userid,此Id标识唯一用户! 146 gumpUser.getUid();//获取用户的userid,此Id标识唯一用户!
147 gumpUser.getAccountType();//用户类型,此类型数据可从GumpPreference常量获取 147 gumpUser.getAccountType();//用户类型,此类型数据可从GumpPreference常量获取
148 gumpUser.getSessionKey();//登录的sessionKey对象,获取sessionKey字符串请使用此对象的getToken()方法 148 gumpUser.getSessionKey();//登录的sessionKey对象,获取sessionKey字符串请使用此对象的getToken()方法
149 ``` 149 ```
150 150
151 #### 3.支付功能 151 #### 3.支付功能
152 调用支付前需先判断支付状态,根据状态调用支付方法 152 调用支付前需先判断支付状态,根据状态调用支付方法
153 153
154 ```java 154 ```java
155 GameSDK.iapUsable(Activity, serverId, roleId, new ResultCallback() { 155 GameSDK.iapUsable(Activity, serverId, roleId, new ResultCallback() {
156 @Override 156 @Override
157 public void onResult(boolean result) { 157 public void onResult(boolean result) {
158 if(result){ 158 if(result){
159 //调用GameSDK.iap 159 //调用GameSDK.iap
160 }else{ 160 }else{
161 //调用GameSDK.pay 161 //调用GameSDK.pay
162 } 162 }
163 } 163 }
164 }); 164 });
165 ``` 165 ```
166 166
167 1)调用GameSDK.pay 167 1)调用GameSDK.pay
168 168
169 ```java 169 ```java
170 Bundle payInfo = new Bundle(); 170 Bundle payInfo = new Bundle();
171 payInfo.putString("product", "元宝"); 171 payInfo.putString("product", "元宝");
172 payInfo.putFloat("amount", 40.0f); 172 payInfo.putFloat("amount", 40.0f);
173 payInfo.putString("extraInfo", "This is demo!"); 173 payInfo.putString("extraInfo", "This is demo!");
174 payInfo.putString("serverId", "B4003"); 174 payInfo.putString("serverId", "B4003");
175 payInfo.putString("roleId", "10010"); 175 payInfo.putString("roleId", "10010");
176 payInfo.putString("currency","currency"); 176 payInfo.putString("currency","currency");
177 GumpSDK.pay(MainActivity.this, payInfo,PurchaseCallback); 177 GumpSDK.pay(MainActivity.this, payInfo,PurchaseCallback);
178 ``` 178 ```
179 调用pay方法时,必须传入一个bundle对象,包含如上字段,所有字段必须全部包含 179 调用pay方法时,必须传入一个bundle对象,包含如上字段,所有字段必须全部包含
180 180
181 181
182 2)IAP支付 182 2)IAP支付
183 183
184 184
185 ```java 185 ```java
186 Bundle payInfo = new Bundle(); 186 Bundle payInfo = new Bundle();
187 payInfo.putString("product", "gp_skuId"); 187 payInfo.putString("product", "gp_skuId");
188 payInfo.putFloat("amount", 0.1f); 188 payInfo.putFloat("amount", 0.1f);
189 payInfo.putString("extraInfo", "This is demo!"); 189 payInfo.putString("extraInfo", "This is demo!");
190 payInfo.putString("serverId", "100"); 190 payInfo.putString("serverId", "100");
191 payInfo.putString("roleId","100123"); 191 payInfo.putString("roleId","100123");
192 GumpSDK.iap(MainActivity.this, payInfo, PurchaseCallback); 192 GumpSDK.iap(MainActivity.this, payInfo, PurchaseCallback);
193 ``` 193 ```
194 194
195 3)PurchaseCallback为支付状态回调接口,此接口含有3个方法 195 3)PurchaseCallback为支付状态回调接口,此接口含有3个方法
196 196
197 ```java 197 ```java
198 @Override 198 @Override
199 public void onPurchaseCompleted() { 199 public void onPurchaseCompleted() {
200 Log.i(TAG,"purchase completed"); 200 Log.i(TAG,"purchase completed");
201 } 201 }
202 202
203 @Override 203 @Override
204 public void onPurchaseError(int code, String msg) { 204 public void onPurchaseError(int code, String msg) {
205 Log.i(TAG,"purchase error"); 205 Log.i(TAG,"purchase error");
206 } 206 }
207 207
208 @Override 208 @Override
209 public void onPurchaseCanceled() { 209 public void onPurchaseCanceled() {
210 Log.i(TAG,"purchase canceled"); 210 Log.i(TAG,"purchase canceled");
211 } 211 }
212 ``` 212 ```
213 213
214 #### 4.注销登录 214 #### 4.注销登录
215 215
216 ```java 216 ```java
217 GameSDK.logout(Activity); 217 GameSDK.logout(Activity);
218 ``` 218 ```
219 当此方法调用后,用户退出登录,并会通过LoginStateListener接口通知调用程序!为了便于用户切换登录账户,请在游戏内提供用户注销的触发按钮 219 当此方法调用后,用户退出登录,并会通过LoginStateListener接口通知调用程序!为了便于用户切换登录账户,请在游戏内提供用户注销的触发按钮
220 #### 5.运营开关接口,若需要接入,会有我方运营人员提出需求,否则不需要接入(若对此接口不知所云,即可认为不需要接入,请自行忽略) 220 #### 5.运营开关接口,若需要接入,会有我方运营人员提出需求,否则不需要接入(若对此接口不知所云,即可认为不需要接入,请自行忽略)
221 221
222 ```java 222 ```java
223 GameSDK.inspectRiskLevel(this, new ResultCallback() { 223 GameSDK.inspectRiskLevel(this, new ResultCallback() {
224 @Override 224 @Override
225 public void onResult(boolean result) { 225 public void onResult(boolean result) {
226 Log.i(TAG,result?"There is some risks":"Nothing is risk"); 226 Log.i(TAG,result?"There is some risks":"Nothing is risk");
227 } 227 }
228 }); 228 });
229 ``` 229 ```
230 230
231 ## 第二章 常量字段与代码 231 ## 第二章 常量字段与代码
232 ### 1.第三方登录平台(third_plat) 232 ### 1.第三方登录平台(third_plat)
233 | 常量字段 | 说明 | 233 | 常量字段 | 说明 |
234 |--------------------------------|--------------| 234 |--------------------------------|--------------|
235 |SDKSettings.THIRD_SUPPORT_FB | Facebook登录 | 235 |SDKSettings.THIRD_SUPPORT_FB | Facebook登录 |
236 |SDKSettings.THIRD_SUPPORT_GOOGLE| Google登录 | 236 |SDKSettings.THIRD_SUPPORT_GOOGLE| Google登录 |
237 |SDKSettings.THIRD_SUPPORT_LINE | Line登录 | 237 |SDKSettings.THIRD_SUPPORT_LINE | Line登录 |
238 238
239 ### 2.登录账户类型 239 ### 2.登录账户类型
240 | 常量字段 | 说明 | 240 | 常量字段 | 说明 |
241 |-------------------------------------|--------------| 241 |-------------------------------------|--------------|
242 |GumpPreference.ACCOUNT_TYPE_FB | Facebook用户 | 242 |GumpPreference.ACCOUNT_TYPE_FB | Facebook用户 |
243 |GumpPreference.ACCOUNT_TYPE_REG | Gump注册用户 | 243 |GumpPreference.ACCOUNT_TYPE_REG | Gump注册用户 |
244 |GumpPreference.ACCOUNT_TYPE_QUICK_REG| 游客 | 244 |GumpPreference.ACCOUNT_TYPE_QUICK_REG| 游客 |
245 |GumpPreference.ACCOUNT_TYPE_GOOGLE | Google用户 | 245 |GumpPreference.ACCOUNT_TYPE_GOOGLE | Google用户 |
246 |GumpPreference.ACCOUNT_TYPE_LINE | Line用户 | 246 |GumpPreference.ACCOUNT_TYPE_LINE | Line用户 |
247 247
248 248
249 249
250 ## 第三章 常见问题 250 ## 第三章 常见问题
251 ### 问题1: 如何避免混淆对SDK的影响? 251 ### 问题1: 如何避免混淆对SDK的影响?
252 解答:有些开发者对接入了SDK的程序进行混淆时,有可能会覆盖某些java 252 解答:有些开发者对接入了SDK的程序进行混淆时,有可能会覆盖某些java
253 类,导致SDK无法正常工作,解决方法如下: 253 类,导致SDK无法正常工作,解决方法如下:
254 Ø 请开发者在混淆配置文件proguard.cfg或proguard-project.txt的最后加上 254 Ø 请开发者在混淆配置文件proguard.cfg或proguard-project.txt的最后加上
255 255
256 -keepattributes *Annotation*,InnerClasses,SourceFile,LineNumberTable 256 -keepattributes *Annotation*,InnerClasses,SourceFile,LineNumberTable
257 -keep public class * extends android.app.Service 257 -keep public class * extends android.app.Service
258 -keep public class com.google.vending.licensing.ILicensingService 258 -keep public class com.google.vending.licensing.ILicensingService
259 -keep public class com.android.vending.licensing.ILicensingService 259 -keep public class com.android.vending.licensing.ILicensingService
260 -keep class com.gump.game.sdk.view.* {*;} 260 -keep class com.gump.game.sdk.view.* {*;}
261 -keep class com.gump.game.sdk.web.* {*;} 261 -keep class com.gump.game.sdk.web.* {*;}
262 262
263 263
264 264
265 使得混淆的时候不会影响SDK的命名空间。 265 使得混淆的时候不会影响SDK的命名空间。