Commit 1e361ab0fbe7697606e7d56ee0321232d36771af

Authored by 赵康
Exists in master

clear conflicts

Showing 1 changed file Inline Diff

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