Commit a11e639160c2452c71131decbc3b057d76ac3e0e

Authored by 赵康
1 parent d4c3b9dce6
Exists in master

更新targetApi

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

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