https://blog.csdn.net/kasimshi/article/details/73004194 (应用宝和360)
上文中已介绍了环境与软件的安装配置(参见该网址:http://www.cnblogs.com/laohaizei/p/6723490.html),之后我们就可以开始学习接入渠道了,
UC已和豌斗夹渠道合并,改名叫阿里游戏
我这边演示用DEMO的下载的为融合版,看一下下载下来后有些什么东西吧
具体里面的东西如何使用,我们晚点再说
在接入之前,需先在渠道后台创建游戏,获取一些接入参数。
客户端所需要参数包括:cpId、gameId、serverId。参数基本是初始化时所需要传入的参数。
准备工作做为,正式开始接入,首先肯定是把所需要的资源如JAR包之类的复制到我的工程中去。
我这边的接入环境是Eclipse
那首先我们得先创建一个demo工程,打开我们的Eclipse,新建一个工程,名为demo
创建完成之后如下图,会发现我们左侧栏会有两个新工程
很明显现在是有问题的,有两个大大的感叹号,那有些东西我们是不需要的,就直接大胆的delete掉 ,先删除appcompat v7 选中appcompat v7按delete键,记得打勾如下图红色标记处,然后按确定
现在我们发现打叉叉的地方有这几个地方
首先我们去values里面把错误的地方删除
之后我们发现错误的地方只有一处了
我们双击MainActivity.java打开这个类
然后我们把除了第一行外所有的代码都删除,之后我会把整个类的代码写在后面,大家只需要把整个类的代码复制进这个类里就行
然后我们clean我们的工程,选中demo
然后把下图中红框里的三个目录都delete删除
同样重复刚刚的步骤,clean我们的工程
同样打开下图中报错的文件
删除文字下方带红色波浪线的
再次clean一下我们的demo工程后发现没有地方再报错了
打开我们下载好解压出来的文档目录找到所需要依赖的JAR包
红框所示就是我们Eclipse所需要的jar包了。
把alipay.jar复制到我们工程的libs目录下就行。
.arr是studio中用的类似于Eclipse的.jar,但其中整合了其他资源,所以,我们需要把arr文件的后缀名改成rar或者zip把的解压出来获取我们需要的资源文件。
然后解压
解压出来的目录格式:
其中,我们需要是上图中两个红框中的。
把ucgamesdk.jar复制到我们工程的libs目录下
把assets目录下的所有文件复制到我们工程的assets目录下。
至此,我们已经把所有需要的东西都复制到了我们的工程中,clean 一下我们的demo工程,接下来个上代码了。
首先我们打开我们工程的AndroidManifest.xml文件。
然后复制以下代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
|
<?
xml
version="1.0" encoding="utf-8"?>
<
manifest
xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.demo"
android:versionCode="1"
android:versionName="1.0" >
<
uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="18" />
<
supports-screens
android:anyDensity="true"
android:largeScreens="true"
android:normalScreens="true"
android:resizeable="true"
android:smallScreens="true" />
<
uses-permission
android:name="android.permission.INTERNET" />
<
uses-permission
android:name="android.permission.ACCESS_NETWORK_STATE" />
<
uses-permission
android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<
uses-permission
android:name="android.permission.READ_PHONE_STATE" />
<
uses-permission
android:name="android.permission.ACCESS_WIFI_STATE" />
<
uses-permission
android:name="android.permission.SEND_SMS" />
<
uses-permission
android:name="android.permission.GET_TASKS" />
<
uses-permission
android:name="android.permission.SYSTEM_ALERT_WINDOW" />
<
uses-permission
android:name="android.permission.AUTHENTICATE_ACCOUNTS" />
<
uses-permission
android:name="android.permission.GET_ACCOUNTS" />
<
uses-permission
android:name="android.permission.RECORD_AUDIO" />
<
uses-permission
android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
<
uses-permission
android:name="android.permission.USE_CREDENTIALS" />
<
uses-permission
android:name="android.permission.READ_LOGS" />
<
uses-permission
android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
<
application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name" >
<
activity
android:name=".MainActivity"
android:label="@string/app_name" >
<
intent-filter
>
<
action
android:name="android.intent.action.MAIN" />
<
category
android:name="android.intent.category.LAUNCHER" />
</
intent-filter
>
</
activity
>
<
activity
android:name="cn.uc.gamesdk.activity.ProxyActivity"
android:configChanges="keyboardHidden|orientation|screenSize"
android:label="@string/app_name"
android:theme="@android:style/Theme.Translucent.NoTitleBar"
android:windowSoftInputMode="adjustResize" >
<
intent-filter
>
<
action
android:name="cn.uc.gamesdk.sdkweb" />
<
category
android:name="android.intent.category.DEFAULT" />
</
intent-filter
>
</
activity
>
<!-- alipay sdk begin -->
<
activity
android:name="com.alipay.sdk.app.H5PayActivity"
android:configChanges="orientation|keyboardHidden|navigation|screenSize"
android:exported="false"
android:screenOrientation="behind" >
</
activity
>
<
activity
android:name="com.alipay.sdk.auth.AuthActivity"
android:configChanges="orientation|keyboardHidden|navigation|screenSize"
android:exported="false"
android:screenOrientation="behind" >
</
activity
>
<!-- alipay sdk end -->
<!-- 游戏的横竖屏配置 -->
<
meta-data
android:name="ali_screen_orientation"
android:value="landscape" />
</
application
>
</
manifest
>
|
然后到我们demo工程的AndroidManifest.xml全选替换粘贴
以上AndroidManifest.xml修改好了。
做完以上步骤,接下来,我们开始接入SDK的接口。
首先打开我们的MainActivity.java
刚刚我让大家把这个文件里的代码都删了,现在应该除了第一行是没有东西的,然后把下面的代码复制进去,注意别把第一行的代码覆盖了。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
|
import
android.app.Activity;
import
android.os.Bundle;
import
android.util.Log;
import
cn.uc.gamesdk.UCGameSdk;
import
cn.uc.gamesdk.even.SDKEventKey;
import
cn.uc.gamesdk.even.SDKEventReceiver;
import
cn.uc.gamesdk.even.Subscribe;
import
cn.uc.gamesdk.exception.AliLackActivityException;
import
cn.uc.gamesdk.exception.AliNotInitException;
import
cn.uc.gamesdk.open.GameParamInfo;
import
cn.uc.gamesdk.open.OrderInfo;
import
cn.uc.gamesdk.open.UCLogLevel;
import
cn.uc.gamesdk.open.UCOrientation;
import
cn.uc.gamesdk.param.SDKParamKey;
import
cn.uc.gamesdk.param.SDKParams;
public
class
MainActivity
extends
Activity {
final
static
String TAG =
"demo"
;
UCGameSdk sdk;
int
cpId =
0
;
int
gameId =
0
;
int
serverId =
0
;
@Override
protected
void
onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super
.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
UCGameSdk.defaultSdk().registeSDKEventReceiver(eventReceiver);
}
@Override
protected
void
onDestroy() {
// TODO Auto-generated method stub
super
.onDestroy();
UCGameSdk.defaultSdk().unregisterSDKEventReceiver(eventReceiver);
sdk = UCGameSdk.defaultSdk();
}
private
void
init() {
// TODO Auto-generated method stub
GameParamInfo gameParamInfo =
new
GameParamInfo();
gameParamInfo.setCpId(cpId);
// 上文提到的游戏参数 参数类型int
gameParamInfo.setGameId(gameId);
// 上文提到的游戏参数 参数类型int
gameParamInfo.setServerId(serverId);
// 上文提到的游戏参数 参数类型int
// 设置是否支持查询充值历史和显示切换账号功能,
// 如果不设置,默认具有查询充值历史记录,不具有切换账户功能
gameParamInfo.setEnablePayHistory(
true
);
// 开启查询充值历史功能
gameParamInfo.setEnableUserChange(
true
);
// 开启账号切换功能
// 设置SDK屏幕方向
// LANDSCAPE:横屏,横屏游戏必须设置为横屏,PORTRAIT:竖屏
gameParamInfo.setOrientation(UCOrientation.PORTRAIT);
SDKParams sdkParams =
new
SDKParams();
sdkParams.put(SDKParamKey.LOG_LEVEL, UCLogLevel.DEBUG);
// 日志等级
sdkParams.put(SDKParamKey.GAME_PARAMS, gameParamInfo);
// FIXME always debug
// 是否打开调试模式。
// 在为true的时候,会连接到联调测试环境(sdk.test4.9game.cn),
// 当为false的时候则会连接到正式环境(sdk.g.9game.cn)。
sdkParams.put(SDKParamKey.DEBUG_MODE,
false
);
try
{
sdk.initSdk(MainActivity.
this
, sdkParams);
}
catch
(AliLackActivityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
private
void
login() {
try
{
sdk.login(MainActivity.
this
,
null
);
}
catch
(AliLackActivityException e) {
// TODO Auto-generated catch block activity为空,异常处理
e.printStackTrace();
}
catch
(AliNotInitException e) {
// TODO Auto-generated catch block 未初始化,异常处理
e.printStackTrace();
}
}
private
void
pay() {
SDKParams sdkParams =
new
SDKParams();
sdkParams.put(SDKParamKey.CALLBACK_INFO,
"{\"test\":true}"
);
sdkParams.put(SDKParamKey.SERVER_ID,
"1"
);
sdkParams.put(SDKParamKey.ROLE_ID,
"AAA"
);
sdkParams.put(SDKParamKey.ROLE_NAME,
"BBB"
);
sdkParams.put(SDKParamKey.GRADE,
"grade1"
);
sdkParams.put(SDKParamKey.NOTIFY_URL,
""
);
sdkParams.put(SDKParamKey.AMOUNT,
"2.33"
);
sdkParams.put(SDKParamKey.CP_ORDER_ID,
"20160000101001"
);
sdkParams.put(SDKParamKey.ACCOUNT_ID,
"123"
);
sdkParams.put(SDKParamKey.SIGN_TYPE,
"MD5"
);
sdkParams.put(SDKParamKey.SIGN,
"游戏服务器根据以上信息签名后的结果"
);
// 以上字段的值都需要由游戏服务器生成
try
{
UCGameSdk.defaultSdk().pay(MainActivity.
this
, sdkParams);
}
catch
(IllegalArgumentException e) {
// TODO Auto-generated catch block 参数错
e.printStackTrace();
}
catch
(AliLackActivityException e) {
// TODO Auto-generated catch block activity null
e.printStackTrace();
}
catch
(AliNotInitException e) {
// TODO Auto-generated catch block 未初始化
e.printStackTrace();
}
}
private
void
sendUserInfo() {
SDKParams sdkParams =
new
SDKParams();
sdkParams.put(SDKParamKey.STRING_ROLE_ID,
"roleId"
);
sdkParams.put(SDKParamKey.STRING_ROLE_NAME,
"roleName"
);
sdkParams.put(SDKParamKey.LONG_ROLE_LEVEL,
1
);
sdkParams.put(SDKParamKey.STRING_ZONE_ID,
"zoneId"
);
sdkParams.put(SDKParamKey.STRING_ZONE_NAME,
"serverId"
);
sdkParams.put(SDKParamKey.LONG_ROLE_CTIME,
1456397360
);
try
{
sdk.submitRoleData(MainActivity.
this
, sdkParams);
}
catch
(IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
catch
(AliNotInitException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
catch
(AliLackActivityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
private
void
logout(){
try
{
sdk.logout(MainActivity.
this
,
null
);
}
catch
(AliLackActivityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
catch
(AliNotInitException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
private
void
exit() {
try
{
sdk.exit(MainActivity.
this
,
null
);
}
catch
(AliLackActivityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
catch
(AliNotInitException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
SDKEventReceiver eventReceiver =
new
SDKEventReceiver() {
@Subscribe
(event = SDKEventKey.ON_INIT_SUCC)
private
void
onInitSucc() {
// 初始化成功
Log.d(TAG,
"init success"
);
}
@Subscribe
(event = SDKEventKey.ON_INIT_FAILED)
private
void
onInitFailed(String data) {
// 初始化失败
Log.d(TAG,
"init failed:"
+ data);
}
@Subscribe
(event = SDKEventKey.ON_LOGIN_SUCC)
private
void
onLoginSucc(String sid) {
// 登录成功
// sid为用户的登录会话标识,用于给游戏服务器校验用户登录状态使用。
Log.d(TAG,
"login success:sid:"
+ sid);
}
@Subscribe
(event = SDKEventKey.ON_LOGIN_FAILED)
private
void
onLoginFailed(String desc) {
// 登录失败
Log.d(TAG,
"login failed:"
+ desc);
}
@Subscribe
(event = SDKEventKey.ON_LOGOUT_SUCC)
private
void
onLogoutSucc() {
// 登出成功
Log.d(TAG,
"logout success"
);
}
@Subscribe
(event = SDKEventKey.ON_LOGOUT_FAILED)
private
void
onLogoutFailed() {
// 登出失败
Log.d(TAG,
"logout failed"
);
}
@Subscribe
(event = SDKEventKey.ON_EXIT_SUCC)
private
void
onExit(String desc) {
// 退出游戏
Log.d(TAG,
"exit:"
+ desc);
MainActivity.
this
.finish();
System.exit(
0
);
}
@Subscribe
(event = SDKEventKey.ON_EXIT_CANCELED)
private
void
onExitCanceled(String desc) {
// 取消退出
Log.d(TAG,
"exit cancel:"
+ desc);
}
@Subscribe
(event = SDKEventKey.ON_CREATE_ORDER_SUCC)
private
void
onCreateOrderSucc(OrderInfo orderInfo) {
// 支付成功
if
(orderInfo !=
null
) {
String txt = orderInfo.getOrderAmount() +
","
+ orderInfo.getOrderId() +
","
+ orderInfo.getPayWay();
Log.d(TAG,
"充值成功: "
+ txt +
"\n"
);
}
Log.i(TAG,
"pay succ"
);
}
@Subscribe
(event = SDKEventKey.ON_PAY_USER_EXIT)
private
void
onPayUserExit(OrderInfo orderInfo) {
// 支付失败
if
(orderInfo !=
null
) {
String txt = orderInfo.getOrderAmount() +
","
+ orderInfo.getOrderId() +
","
+ orderInfo.getPayWay();
Log.d(TAG,
"充值失败: "
+ txt +
"\n"
);
}
Log.i(TAG,
"pay fail"
);
}
};
}
|
至此我们就把所有UC上线所需的接口完成了,添加UI并添加相应事件调用相应接口后,就是一个最简单的demo了
如果想要了解具体的接口作用,和相应参数的说明,请继续阅读以下内容,或查看官方文档
第一种步创建监听:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
|
SDKEventReceiver eventReceiver =
new
SDKEventReceiver() {
@Subscribe
(event = SDKEventKey.ON_INIT_SUCC)
private
void
onInitSucc() {
// 初始化成功
Log.d(tag,
"init success"
);
}
@Subscribe
(event = SDKEventKey.ON_INIT_FAILED)
private
void
onInitFailed(String data) {
// 初始化失败
Log.d(tag,
"init failed:"
+ data);
}
@Subscribe
(event = SDKEventKey.ON_LOGIN_SUCC)
private
void
onLoginSucc(String sid) {
// 登录成功
// sid为用户的登录会话标识,用于给游戏服务器校验用户登录状态使用。
Log.d(tag,
"login success:sid:"
+ sid);
}
@Subscribe
(event = SDKEventKey.ON_LOGIN_FAILED)
private
void
onLoginFailed(String desc) {
// 登录失败
Log.d(tag,
"login failed:"
+ desc);
}
@Subscribe
(event = SDKEventKey.ON_LOGOUT_SUCC)
private
void
onLogoutSucc() {
// 登出成功
Log.d(tag,
"logout success"
);
}
@Subscribe
(event = SDKEventKey.ON_LOGOUT_FAILED)
private
void
onLogoutFailed() {
// 登出失败
Log.d(tag,
"logout failed"
);
}
@Subscribe
(event = SDKEventKey.ON_EXIT_SUCC)
private
void
onExit(String desc) {
// 退出游戏
Log.d(tag,
"exit:"
+ desc);
MainActivity.
this
.finish();
System.exit(
0
);
}
@Subscribe
(event = SDKEventKey.ON_EXIT_CANCELED)
private
void
onExitCanceled(String desc) {
// 取消退出
Log.d(tag,
"exit cancel:"
+ desc);
}
@Subscribe
(event = SDKEventKey.ON_CREATE_ORDER_SUCC)
private
void
onCreateOrderSucc(OrderInfo orderInfo) {
// 支付成功
if
(orderInfo !=
null
) {
String txt = orderInfo.getOrderAmount() +
","
+ orderInfo.getOrderId() +
","
+ orderInfo.getPayWay();
Log.d(tag,
"充值成功: "
+ txt +
"\n"
);
}
Log.i(tag,
"pay succ"
);
}
@Subscribe
(event = SDKEventKey.ON_PAY_USER_EXIT)
private
void
onPayUserExit(OrderInfo orderInfo) {
// 支付失败
if
(orderInfo !=
null
) {
String txt = orderInfo.getOrderAmount() +
","
+ orderInfo.getOrderId() +
","
+ orderInfo.getPayWay();
Log.d(tag,
"充值失败: "
+ txt +
"\n"
);
}
Log.i(tag,
"pay fail"
);
}
};
|
监听创建完成后,需要在Activity onCreate中注册,并在Activity onDestroy中注销:
注册:UCGameSdk.defaultSdk().registeSDKEventReceiver(eventReceiver);
1
2
3
4
5
6
7
|
@Override
protected
void
onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super
.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
UCGameSdk.defaultSdk().registeSDKEventReceiver(eventReceiver);
}
|
注销:UCGameSdk.defaultSdk().unregisterSDKEventReceiver(eventReceiver);
1
2
3
4
5
6
7
8
9
10
11
12
13
|
@Override
protected
void
onDestroy() {
// TODO Auto-generated method stub
super
.onDestroy();
UCGameSdk.defaultSdk().unregisterSDKEventReceiver(eventReceiver);
}
|
这样在相应操作之后,UC的SDK就能给你回调了,在相应回调方法内,做自己游戏相应操作就行
第二步初始化:
首先定义一个全局变量:UCGameSdk sdk;
并在Activity onCreate中获取对象:sdk = UCGameSdk.defaultSdk();
之后就在Activity onCreate中调用UC的初始化接口:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
|
private
void
init() {
// TODO Auto-generated method stub
GameParamInfo gameParamInfo =
new
GameParamInfo();
gameParamInfo.setCpId(cpId);
//上文提到的游戏参数 参数类型int
gameParamInfo.setGameId(gameId);
//上文提到的游戏参数 参数类型int
gameParamInfo.setServerId(serverId);
//上文提到的游戏参数 参数类型int
//设置是否支持查询充值历史和显示切换账号功能,
//如果不设置,默认具有查询充值历史记录,不具有切换账户功能
gameParamInfo.setEnablePayHistory(
true
);
//开启查询充值历史功能
gameParamInfo.setEnableUserChange(
true
);
//开启账号切换功能
//设置SDK屏幕方向
//LANDSCAPE:横屏,横屏游戏必须设置为横屏,PORTRAIT:竖屏
gameParamInfo.setOrientation(UCOrientation.PORTRAIT);
SDKParams sdkParams =
new
SDKParams();
sdkParams.put(SDKParamKey.LOG_LEVEL, UCLogLevel.DEBUG);
//日志等级
sdkParams.put(SDKParamKey.GAME_PARAMS, gameParamInfo);
//FIXME always debug
//是否打开调试模式。
//在为true的时候,会连接到联调测试环境(sdk.test4.9game.cn),
//当为false的时候则会连接到正式环境(sdk.g.9game.cn)。
sdkParams.put(SDKParamKey.DEBUG_MODE,
false
);
try
{
sdk.initSdk(MainActivity.
this
, sdkParams);
}
catch
(AliLackActivityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
|
调用登录接口:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
private
void
login() {
try
{
sdk.login(MainActivity.
this
,
null
);
}
catch
(AliLackActivityException e) {
// TODO Auto-generated catch block activity为空,异常处理
e.printStackTrace();
}
catch
(AliNotInitException e) {
// TODO Auto-generated catch block 未初始化,异常处理
e.printStackTrace();
}
}
|
调用支付接口:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
|
private
void
pay() {
SDKParams sdkParams =
new
SDKParams();
sdkParams.put(SDKParamKey.CALLBACK_INFO,
"{\"test\":true}"
);
sdkParams.put(SDKParamKey.SERVER_ID,
"1"
);
sdkParams.put(SDKParamKey.ROLE_ID,
"AAA"
);
sdkParams.put(SDKParamKey.ROLE_NAME,
"BBB"
);
sdkParams.put(SDKParamKey.GRADE,
"grade1"
);
sdkParams.put(SDKParamKey.NOTIFY_URL,
""
);
sdkParams.put(SDKParamKey.AMOUNT,
"2.33"
);
sdkParams.put(SDKParamKey.CP_ORDER_ID,
"20160000101001"
);
sdkParams.put(SDKParamKey.ACCOUNT_ID,
"123"
);
sdkParams.put(SDKParamKey.SIGN_TYPE,
"MD5"
);
sdkParams.put(SDKParamKey.SIGN,
"游戏服务器根据以上信息签名后的结果"
);
// 以上字段的值都需要由游戏服务器生成
try
{
UCGameSdk.defaultSdk().pay(MainActivity.
this
, sdkParams);
}
catch
(IllegalArgumentException e) {
// TODO Auto-generated catch block 参数错
e.printStackTrace();
}
catch
(AliLackActivityException e) {
// TODO Auto-generated catch block activity null
e.printStackTrace();
}
catch
(AliNotInitException e) {
// TODO Auto-generated catch block 未初始化
e.printStackTrace();
}
}
|
参数说明:
参数定义 | 参数名称 | 类型 | 是否必填 | 说明 |
ROLE_ID | roleId | String | 否 | 角色ID |
ROLE_NAME | roleName | String | 否 | 角色名称 |
GRADE | grade | String | 否 | 角色等级 |
CALLBACK_INFO | callbackInfo | String | 否 | cp自定义信息,在支付结果通知时回传,CP可以自己定义格式,长度不超过250 |
AMOUNT | amount | String | 是 | 充值金额,如果传递为0表示用户可以自定义充值金额,保留小数点后2位,单位为元。例:10.00 |
SERVER_ID | serverId | String | 否 | 服务器ID,默认为0 |
NOTIFY_URL | notifyUrl | String | 否 | 服务器通知地址,如果为空以服务端配置地址作为通知地址,长度不超过100 |
CP_ORDER_ID | cpOrderId | String | 否 | cp充值订单号,需要保证用户每次充值订单号的唯一性,长度不超过30 |
ACCOUNT_ID | accountId | String | 是 | 用户id,充值用户的统一账号ID,由阿里游戏平台生成。 |
SIGN_TYPE | signType | String | 是 | 签名类型,MD5或者RSA 目前只支持MD5 |
SIGN | sign | String | 是 | 签名结果。 MD5(签名内容+apiKey);服务端生成 签名算法参考官方说明 |
接入提交游戏角色数据信息:
数据提交时机:
1、用户创建角色或已有角色进入游戏后
2、当用户的角色等级发生变化后
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
|
private
void
sendUserInfo() {
SDKParams sdkParams =
new
SDKParams();
sdkParams.put(SDKParamKey.STRING_ROLE_ID,
"roleId"
);
sdkParams.put(SDKParamKey.STRING_ROLE_NAME,
"roleName"
);
sdkParams.put(SDKParamKey.LONG_ROLE_LEVEL,
1
);
sdkParams.put(SDKParamKey.STRING_ZONE_ID,
"zoneId"
);
sdkParams.put(SDKParamKey.STRING_ZONE_NAME,
"serverId"
);
sdkParams.put(SDKParamKey.LONG_ROLE_CTIME,
1456397360
);
try
{
sdk.submitRoleData(MainActivity.
this
, sdkParams);
}
catch
(IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
catch
(AliNotInitException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
catch
(AliLackActivityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
|
参数说明:
参数定义 | 参数名称 | 类型 | 是否必填 | 说明 |
STRING_ROLE_ID | roleId | String | 是 | 角色ID,长度不超过50 |
STRING_ROLE_NAME | roleName | String | 是 | 角色名称,长度不超过50 |
LONG_ROLE_LEVEL | roleLevel | Long | 是 | 角色等级,长度不超过10 |
LONG_ROLE_CTIME | roleCTime | Long | 是 | 角色创建时间(单位:秒),长度10,获取服务器存储的时间,不可用手机本地时间 |
STRING_ZONE_ID | zoneId | String | 是 | 区服ID,长度不超过50 |
STRING_ZONE_NAME | zoneName | String | 是 | 区服名称,长度不超过50 |
登出与退出:登出为注销当前账号,游戏应返回登陆界面,退出为关闭游戏。
接入登出接口:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
private
void
logout(){
try
{
sdk.logout(MainActivity.
this
,
null
);
}
catch
(AliLackActivityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
catch
(AliNotInitException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
|
接入退出接口:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
private
void
exit() {
try
{
sdk.exit(MainActivity.
this
,
null
);
}
catch
(AliLackActivityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
catch
(AliNotInitException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
|
² 代码混淆要求
如果游戏发布时采用proguard进行代码混淆,请在proguard配置文件加入以下代码,以避免对SDK进行混淆,否则会造成SDK部分功能不正常。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
|
-libraryjars
'./libs/alipay_sdk.jar'
-libraryjars
'./libs/ucgamesdk.jar'
-keep
class
android.**{
<methods>;
<fields>;
}
-keep
class
cn.uc.**{
<methods>;
<fields>;
}
-keep
class
com.alipay.**{
<methods>;
<fields>;
}
-keep
class
com.ta.**{
<methods>;
<fields>;
}
-keep
class
com.ut.**{
<methods>;
<fields>;
}
-keep
class
org.json. **{
<methods>;
<fields>;
}
|
到这里就是接入完毕了,添加相应UI控件出包就是一个接入渠道的demo了,如果和游戏交互完成服务端接入完成,打包后就是成品啦,clean后到bin下面找 .apk包吧。
如果想了解更多,请关注我们的blog和官网