苦逼房奴一枚
全部博文(65)
分类: Android平台
2017-06-14 18:43:16
官方文档及SDK的下载地址为:http://dev.360.cn/wiki/index/id/73
在接入之前,需先在360后台创建游戏,获取一些接入参数。
客户端所需要参数包括:APPID、APPKEY、PRIVATEKEY 三个值填写在 AndroidManifest 文件中,不能使用@string 引用;禁止把 AppSecret 保存在手机客户端,AndroidManifest 中存放的是 Private Key,而非 App-Secret。
Private Key 的算法为:QHOPENSDK_PRIVATEKEY = MD5(appSecret + "#" + appKey),格式为 32 位小写。
准备工作做为,正式开始接入,首先肯定是把所需要的资源如JAR包之类的复制到我的工程中去。
我这边的接入环境是Eclipse
打开我们下载好解压出来的文档目录找到所需要依赖的JAR包
红框所示就是我们Eclipse所需要的资源文件了。
把assets内的文件复制到我们自己工程中的assets目录内。
把libs内的文件复制到我们自己工程中的libs目录内。
下图中红框内的文件夹按自己所需要复制
至于demo工程如何创建在上一篇的接入文档中有详细教程,请至:
http://www.cnblogs.com/laohaizei/p/6724250.html
复制完成之后,我们的demo目录应该是多了这些目录
至此,我们已经把所有需要的东西都复制到了我们的demo工程中。
首先我们打开我们工程的AndroidManifest.xml文件。
然后复制以下代码
点击(此处)折叠或打开
以上是需要添加在AndroidManifest.xml中的。(@xxx@部分请注意替换修改,具体有:@app_key@、@private_key@、@app_id@、@wx_app_id@)
然后到我们demo工程的AndroidManifest.xml全选替换粘贴
这样AndroidManifest.xml修改好了。
做完以上步骤,接下来,我们开始接入SDK的接口。
首先打开我们的MainActivity.java
打开的MainActivity.java应该是这个样子的
然后把下面的代码复制进去,注意别把第一行的代码覆盖了。
点击(此处)折叠或打开
再然后,我们需要新创建一个类:
如下图,我们在com.xxx这里右键
名字输入:QihooPayInfo
这样就会在这边多出一个类文件,我们打开他
把下面的代码复制到下图标记处
点击(此处)折叠或打开
至此我们就把所有360上线所需的接口完成了,添加UI并添加相应事件调用相应接口后,就是一个最简单的demo了
如果想要了解具体的接口作用,和相应参数的说明,请继续阅读以下内容,或查看官方文档
第一步初始化:
在Activity onCreate中调用360的初始化接口:(必须在UI线程调用)
private void init() {
// TODO Auto-generated method stub
MatrixCallBack mSDKCallback = new MatrixCallBack() {
@Override
public void execute(Context context, int functionCode, String
functionParams) {
// TODO Auto-generated method stub
if (functionCode == ProtocolConfigs.FUNC_CODE_SWITCH_ACCOUNT) {
// 调用 sdk 的切换帐号接口
doSdkSwitchAccount(getLandscape(context));
}else if (functionCode == ProtocolConfigs.FUNC_CODE_INITSUCCESS) {
//这里返回成功之后才能调用 SDK 其它接口 TypeSDKLogger.d( "initSDK success");
isInit = true;
}
}
};
// 调用其他SDK接口之前必须先调用init
Matrix.init(appActivity,mSDKCallback);
}
调用登录接口:
/**
* 使用 360SDK 的登录接口, 生成 intent 参数
*
* @param isLandScape 是否横屏显示登录界面
*/
private Intent getLoginIntent(boolean isLandScape) {
Intent intent = new Intent(this, ContainerActivity.class);
// 必需参数,使用 360SDK 的登录模块
intent.putExtra(ProtocolKeys.FUNCTION_CODE,
ProtocolConfigs.FUNC_CODE_LOGIN);
// 可选参数,360SDK 界面是否以横屏显示,默认为 true,横屏
intent.putExtra(ProtocolKeys.IS_SCREEN_ORIENTATION_LANDSCAPE,
isLandScape);
//可选参数,是否显示关闭按钮,默认不显示
intent.putExtra(ProtocolKeys.IS_LOGIN_SHOW_CLOSE_ICON,
getCheckBoxBoolean(R.id.isShowClose));
// 可选参数,是否支持离线模式,默认值为 false
intent.putExtra(ProtocolKeys.IS_SUPPORT_OFFLINE,
getCheckBoxBoolean(R.id.isSupportOffline));
// 可选参数,是否在自动登录的过程中显示切换账号按钮,默认为 false
intent.putExtra(ProtocolKeys.IS_SHOW_AUTOLOGIN_SWITCH,
getCheckBoxBoolean(R.id.isShowSwitchButton));
// 可选参数,是否隐藏欢迎界面
intent.putExtra(ProtocolKeys.IS_HIDE_WELLCOME,
getCheckBoxBoolean(R.id.isHideWellcome));
/*
* 指定界面背景(可选参数):
* 1.ProtocolKeys.UI_BACKGROUND_PICTRUE 使用的系统路径,如/sdcard/1.png
* 2.ProtocolKeys.UI_BACKGROUND_PICTURE_IN_ASSERTS 使用的 assest 中的图片
* 资源,
* 如传入 bg.png 字符串,就会在 assets 目录下加载这个指定的文件
* 3.图片大小不要超过 5M,尺寸不要超过 1280x720,后缀只能是 jpg、jpeg 或 png
*/
// 可选参数,登录界面的背景图片路径,必须是本地图片路径
intent.putExtra(ProtocolKeys.UI_BACKGROUND_PICTRUE,
getUiBackgroundPicPath());
// 可选参数,指定 assets 中的图片路径,作为背景图
intent.putExtra(ProtocolKeys.UI_BACKGROUND_PICTURE_IN_ASSERTS,
getUiBackgroundPathInAssets());
// 可选参数,是否需要用户输入激活码,用于游戏内测阶段。
// 如果不需激活码相关逻辑,客户传 false 或者不传入该参数。
intent.putExtra(ProtocolKeys.NEED_ACTIVATION_CODE,
getCheckBoxBoolean(R.id.isNeedActivationCode));
//-- 以下参数仅仅针对自动登录过程的控制
// 可选参数,自动登录过程中是否不展示任何 UI,默认展示。
intent.putExtra(ProtocolKeys.IS_AUTOLOGIN_NOUI,
getCheckBoxBoolean(R.id.isAutoLoginHideUI));
// 可选参数,静默自动登录失败后是否显示登录窗口,默认不显示
intent.putExtra(ProtocolKeys.IS_SHOW_LOGINDLG_ONFAILED_AUTOLOGIN,
getCheckBoxBoolean(R.id.isShowDlgOnFailedAutoLogin));
// 社交分享测试参数,发布时要去掉,具体说明见分享接口
// intent.putExtra(ProtocolKeys.IS_SOCIAL_SHARE_DEBUG,
// getCheckBoxBoolean(R.id.isDebugSocialShare));
return intent;
}
// 调用接口
protected void doSdkLogin(boolean isLandScape) {
mIsInOffline = false;
Intent intent = getLoginIntent(isLandScape);
IDispatcherCallback callback = mLoginCallback;
if (getCheckBoxBoolean(R.id.isSupportOffline)) {
callback = mLoginCallbackSupportOffline; //离线模式
}
Matrix.execute(this, intent, callback);
}
// 登录接口回调(不支持离线模式)
// 登录、注册的回调
privateIDispatcherCallback mLoginCallback = newIDispatcherCallback() {
@Override
publicvoid onFinished(String data) {
// press back
if (isCancelLogin(data)) {
return;
}
// 显示一下登录结果
Toast.makeText(SdkUserBaseActivity.this, data,
Toast.LENGTH_LONG).show();
mIsInOffline = false;
mQihooUserInfo = null;
// 解析 access_token
mAccessToken = parseAccessTokenFromLoginResult(data);
if (!TextUtils.isEmpty(mAccessToken)) {
// 需要去应用的服务器获取用 access_token 获取一下用户信息
getUserInfo();
} else {
Toast.makeText(SdkUserBaseActivity.this, "get access_token
failed!", Toast.LENGTH_LONG).show();
}
}
};
// 登录结果回调(支持离线模式)
private IDispatcherCallback mLoginCallbackSupportOffline
= new IDispatcherCallback() {
@Override
public void onFinished(String data) {
if (isCancelLogin(data)) {
return;
}
Log.d(TAG, "mLoginCallbackSupportOffline, data is " + data);
try {
JSONObject joRes = new JSONObject(data);
JSONObject joData = joRes.getJSONObject("data");
String mode = joData.optString("mode", "");
if (!TextUtils.isEmpty(mode) && mode.equals("offline")) 、
{
Toast.makeText(SdkUserBaseActivity.this,
"login success in offline mode",
Toast.LENGTH_SHORT).show();
mIsInOffline = true;
// 显示一下登录结果
Toast.makeText(SdkUserBaseActivity.this, data,
Toast.LENGTH_LONG).show();
} else {
mLoginCallback.onFinished(data);
}
} catch (Exception e) {
Log.e(TAG, "mLoginCallbackSupportOffline exception", e);
}
}
};
private boolean isCancelLogin(String data) {
try {
JSONObject joData = new JSONObject(data);
int errno = joData.optInt("errno", -1);
if (-1 == errno) {
// Toast.makeText(appActivity, data, Toast.LENGTH_LONG).show();
return true;
}
} catch (Exception e) {
}
return false;
}
private String parseAccessTokenFromLoginResult(String loginRes) {
try {
JSONObject joRes = new JSONObject(loginRes);
JSONObject joData = joRes.getJSONObject("data");
return joData.getString("access_token");
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
调用支付接口:
注意:
1、 必选参数不能为空, 不能为 0,否则支付失败。
2、 参数名,以 ProtocolKeys 中定义的常量为准。
3、 请务必对 case 0、1、-1 加入处理语句,如果为空的会导致游戏崩溃。
/**
* 使用 360SDK 的支付接口
*
* @param isLandScape 是否横屏显示支付界面
* @param isFixed 是否定额支付
* @param functioncode 标示支付模块类型。
*/
protected void doSdkPay(QihooUserInfo usrinfo, boolean isLandScape,int functionCode) {
if(!isAccessTokenValid) {
Toast.makeText(SdkUserBaseActivity.this, R.string.access_token_invalid,
Toast.LENGTH_SHORT).show();
return;
}
if(!isQTValid) {
Toast.makeText(SdkUserBaseActivity.this, R.string.qt_invalid,
Toast.LENGTH_SHORT).show();
return;
}
boolean isFixed = getCheckBoxBoolean(R.id.isPayFixed);
// 支付基础参数
QihooPayInfo payInfo = getQihooPay(
price,//_in_pay.GetData(AttName.REAL_PRICE)
_in_pay.GetData(AttName.ITEM_NAME).isEmpty()?"商品
":_in_pay.GetData(AttName.ITEM_NAME),
userInfo.GetData(AttName.ROLE_NAME).isEmpty() ? "玩家" :
userInfo.GetData(AttName.ROLE_NAME),
userInfo.GetData(AttName.ROLE_ID).isEmpty()?"1":
userInfo.GetData(AttName.ROLE_ID),
_in_pay.GetData(AttName.ITEM_SERVER_ID).isEmpty()?"1":
_in_pay.GetData(AttName.ITEM_SERVER_ID),
_in_pay.GetData(AttName.BILL_NUMBER),
platform.GetData(AttName.PAY_CALL_BACK_URL),
userInfo.GetData(AttName.USER_ID));
Intent intent = getPayIntent(isLandScape, isFixed, functionCode);
// 必需参数,使用 360SDK 的支付模块:CP 可以根据需求选择使用 带有收银台的支付模
// 块 或者 直接 调用微信支付模块或者直接调用支付宝支付模块。
// functionCode 对应三种类型的支付模块:
// ProtocolConfigs.FUNC_CODE_PAY;//支付模块。(有收银台,显示多种支付方式) // ProtocolConfigs.FUNC_CODE_WEIXIN_PAY;//微信支付模块。
//(无收银台,直接用微信进行支付)
//ProtocolConfigs.FUNC_CODE_ALI_PAY;
//支付宝支付模块。(无收银台,直接用支付宝进行支付)
intent.putExtra(ProtocolKeys.FUNCTION_CODE, functionCode);
// 可选参数,登录界面的背景图片路径,必须是本地图片路径
intent.putExtra(ProtocolKeys.UI_BACKGROUND_PICTRUE, "");
Matrix.invokeActivity(this, intent, mPayCallback);
}
/**
* @param moneyAmount
*金额数,使用者可以自由设定数额。金额数为100的整数倍,360SDK运行定额支付流程;
*金额数为0,360SDK运行不定额支付流程。
* @return QihooPay
*/
private QihooPayInfo getQihooPay(String moneyAmount, String itemName,
String userName, String roleId, String productId,
String billNumber, String pauBackUrl, String userId) {
// String qihooUserId = (mQihooUserInfo != null) ?
// mQihooUserInfo.getId() : null;
// 创建QihooPay
QihooPayInfo qihooPay = new QihooPayInfo();
qihooPay.setQihooUserId(userId);
qihooPay.setMoneyAmount(moneyAmount);
qihooPay.setAccessToken(mAccessToken);
qihooPay.setExchangeRate("1");
qihooPay.setProductName(itemName);
qihooPay.setProductId(productId);
qihooPay.setNotifyUri(pauBackUrl);
qihooPay.setAppName(platform.GetData(AttName.CP_ID));
qihooPay.setAppUserName(userName);
qihooPay.setAppUserId(roleId);
// 可选参数
qihooPay.setAppExt1("ext1");
qihooPay.setAppExt2("ext2");
qihooPay.setAppOrderId(billNumber);
return qihooPay;
}
/**
* 生成调用 360SDK 支付接口基础参数的 Intent
*
* @param isLandScape 是否横屏显示登录界面
* @param isFixed 是否定额支付
*
* @return Intent
*/
protected Intent getPayIntent(boolean isLandScape, boolean isFixed) {
Bundle bundle = new Bundle();
QihooPayInfo pay = getQihooPayInfo(isFixed);
// 界面相关参数,360SDK 界面是否以横屏显示。
bundle.putBoolean(ProtocolKeys.IS_SCREEN_ORIENTATION_LANDSCAPE, isLandScape);
// 可选参数,登录界面的背景图片路径,必须是本地图片路径
bundle.putString(ProtocolKeys.UI_BACKGROUND_PICTRUE, "");
// *** 以下非界面相关参数 ***
// 设置 QihooPay 中的参数。
// 必需参数,用户 access token,要使用注意过期和刷新问题,最大 64 字符。 bundle.putString(ProtocolKeys.ACCESS_TOKEN, pay.getAccessToken());
// 必需参数,360 账号 id。
bundle.putString(ProtocolKeys.QIHOO_USER_ID, pay.getQihooUserId());
//必需参数,所购买商品金额, 以分为单位。金额大于等于 100 分,360SDK 运行定额支
//付流程; 金 额数为 0,360SDK 运行不定额支付流程。
bundle.putString(ProtocolKeys.AMOUNT, pay.getMoneyAmount());
// 必需参数,所购买商品名称,应用指定,建议中文,最大 10 个中文字。
bundle.putString(ProtocolKeys.PRODUCT_NAME, pay.getProductName());
// 必需参数,购买商品的商品 id,应用指定,最大 16 字符。
bundle.putString(ProtocolKeys.PRODUCT_ID, pay.getProductId());
// 必需参数,应用方提供的支付结果通知 uri,最大 255 字符。360 服务器将把支付接口
//回调给该 uri, 具体协议请查看文档中,支付结果通知接口–应用服务器提供接口。
bundle.putString(ProtocolKeys.NOTIFY_URI, pay.getNotifyUri());
// 必需参数,游戏或应用名称,最大 16 中文字。
bundle.putString(ProtocolKeys.APP_NAME, pay.getAppName());
// 必需参数,应用内的用户名,如游戏角色名。 若应用内绑定 360 账号和应用账号,则
//可用 360 用户 名,最大 16 中文字。(充值不分区服,充到统一的用户账户,各区服角
//色均可使用)。
bundle.putString(ProtocolKeys.APP_USER_NAME, pay.getAppUserName());
// 必需参数,应用内的用户 id。 // 若应用内绑定 360 账号和应用账号,充值
//不分区服,充到统一的用户账户,各区服角色均可使用, 则可用 360 用户 ID 最大 32 //字符。
bundle.putString(ProtocolKeys.APP_USER_ID, pay.getAppUserId());
// 必需参数,应用订单号,应用内必须唯一,最大 32 字符。
bundle.putString(ProtocolKeys.APP_ORDER_ID, pay.getAppOrderId());
// 可选参数,应用扩展信息 1,原样返回,最大 255 字符。
bundle.putString(ProtocolKeys.APP_EXT_1, pay.getAppExt1());
// 可选参数,应用扩展信息 2,原样返回,最大 255 字符。
bundle.putString(ProtocolKeys.APP_EXT_2, pay.getAppExt2());
Intent intent = new Intent(this, ContainerActivity.class);
intent.putExtras(bundle);
return intent;
}
/**
* 支付的回调
*/
protected IDispatcherCallback mPayCallback = new IDispatcherCallback() {
@Override
public void onFinished(String data) {
Log.d(TAG, "mPayCallback, data is " + data);
if(TextUtils.isEmpty(data)) {
return;
}
boolean isCallbackParseOk = false;
JSONObject jsonRes;
try {
jsonRes = new JSONObject(data);
// error_code 状态码:0 支付成功,-1 支付取消,1 支付失败,-2 支付进行中。
// 请务必对 case 0、1、-1 加入处理语句,如果为空会导致游戏崩溃 // error_msg 状态描述
int errorCode = jsonRes.optInt("error_code");
isCallbackParseOk = true;
switch (errorCode) {
case 0:
case 1:
case -1:
case -2: {
isAccessTokenValid = true;
String errorMsg = jsonRes.optString("error_msg");
String text = getString(R.string.pay_callback_toast, errorCode, errorMsg);
Toast.makeText(SdkUserBaseActivity.this, text, Toast.LENGTH_SHORT).show();
}
break;
case 4010201:
isAccessTokenValid = false;
Toast.makeText(SdkUserBaseActivity.this, R.string.access_token_invalid,
Toast.LENGTH_SHORT).show();
break;
case 4009911:
//QT 失效
isQTValid = false;
Toast.makeText(SdkUserBaseActivity.this, R.string.qt_invalid,
Toast.LENGTH_SHORT).show();
break;
default:
break;
}
} catch (JSONException e) {
e.printStackTrace();
}
// 用于测试数据格式是否异常。
if (!isCallbackParseOk) {
Toast.makeText(SdkUserBaseActivity.this, getString(R.string.data_format_error),
Toast.LENGTH_LONG).show();
}
}
};
接入提交游戏角色数据信息:(可选客户端接入还是服务端接入,以下只展示客户端接入示例)
数据提交时机:
1、玩家进入游戏区服时调用该接口。
2、角色创建时调用该接口。
3、角色升级时调用该接口。
4、角色退出游戏时调用该接口。
/**
角色信息采集接口
*/
protected void doSdkGetUserInfoByCP() {
HashMap eventParams=new HashMap();
//----------------------------参数设置说明--------------------
//以下列出的五项只是作为参考,请按照上述表格中的参数说明进行补充添加
eventParams.put("zoneid",1);//当前角色所在游戏区服 id
eventParams.put("zonename","刀塔传奇 1 区");//当前角色所在游戏区服名称 eventParams.put("roleid","12345678");//当前角色 id
eventParams.put("rolename","三国风吹来的鱼");//当前角色名称 eventParams.put("type","levelUp");//角色信息接口触发的场景
//----------------------------------------------------------
Matrix.statEventInfo(getApplicationContext(), eventParams);
}
参数说明:
接入切换账号接口:
/**
* 使用 360SDK 的切换账号接口
*
* @param isLandScape 是否横屏显示登录界面
*/
protected void doSdkSwitchAccount(boolean isLandScape) {
Intent intent = getSwitchAccountIntent(isLandScape);
if (isSupportOffline) {
callback = mAccountSwitchSupportOfflineCB;//离线模式
}
Matrix.invokeActivity(this, intent, mAccountSwitchCallback);
}
/***
* 生成调用360SDK切换账号接口的Intent
*
* @param isLandScape
* 是否横屏
* @param isBgTransparent
* 是否背景透明
* @param clientId
* 即AppKey
* @return Intent
*/
private Intent getSwitchAccountIntent(boolean isLandScape) {
Intent intent = new Intent(appActivity, ContainerActivity.class);
// 界面相关参数,360SDK界面是否以横屏显示。
intent.putExtra(ProtocolKeys.IS_SCREEN_ORIENTATION_LANDSCAPE,
isLandScape);
// 必需参数,使用360SDK的切换账号模块。
intent.putExtra(ProtocolKeys.FUNCTION_CODE,
ProtocolConfigs.FUNC_CODE_SWITCH_ACCOUNT);
// 是否显示关闭按钮
intent.putExtra(ProtocolKeys.IS_LOGIN_SHOW_CLOSE_ICON, isShowClose);
// 可选参数,是否支持离线模式,默认值为false
intent.putExtra(ProtocolKeys.IS_SUPPORT_OFFLINE, isSupportOffline);
// 可选参数,是否在自动登录的过程中显示切换账号按钮
intent.putExtra(ProtocolKeys.IS_SHOW_AUTOLOGIN_SWITCH,
isShowSwitchButton);
// 可选参数,是否隐藏欢迎界面
intent.putExtra(ProtocolKeys.IS_HIDE_WELLCOME, isHideWellcome);
// 可选参数,登录界面的背景图片路径,必须是本地图片路径
// intent.putExtra(ProtocolKeys.UI_BACKGROUND_PICTRUE,
// getUiBackgroundPicPath());
// 可选参数,指定assets中的图片路径,作为背景图
// intent.putExtra(ProtocolKeys.UI_BACKGROUND_PICTURE_IN_ASSERTS,
// getUiBackgroundPathInAssets());
// -- 以下参数仅仅针对自动登录过程的控制
// 可选参数,自动登录过程中是否不展示任何UI,默认展示。
intent.putExtra(ProtocolKeys.IS_AUTOLOGIN_NOUI, isAutoLoginHideUI);
// 可选参数,静默自动登录失败后是否显示登录窗口,默认不显示
intent.putExtra(ProtocolKeys.IS_SHOW_LOGINDLG_ONFAILED_AUTOLOGIN,
isShowDlgOnFailedAutoLogin);
// 测试参数,发布时要去掉
intent.putExtra(ProtocolKeys.IS_SOCIAL_SHARE_DEBUG, isDebugSocialShare);
return intent;
}
// 切换账号的回调
private IDispatcherCallback mAccountSwitchCallback = new IDispatcherCallback() {
@Override
public void onFinished(String data) {
// press back
if (isCancelLogin(data)) {
return;
}
// 显示一下登录结果
// Toast.makeText(appActivity, data, Toast.LENGTH_LONG).show();
// TypeSDKLogger.d( "mAccountSwitchCallback, data is " + data);
// 解析access_token
mAccessToken = parseAccessTokenFromLoginResult(data);
}
};
// 支持离线模式的切换账号的回调
private IDispatcherCallback mAccountSwitchSupportOfflineCB = new IDispatcherCallback() {
@Override
public void onFinished(String data) {
// press back
if (isCancelLogin(data)) {
return;
}
// 显示一下登录结果
// Toast.makeText(appActivity, data, Toast.LENGTH_LONG).show();
// TypeSDKLogger.d( "mAccountSwitchSupportOfflineCB, data is " + data);
// 解析access_token
mAccessToken = parseAccessTokenFromLoginResult(data);
}
};
parseAccessTokenFromLoginResult (String data) 此函数登录时就有用到,解析TOKEN
接入退出接口:
/**
* 使用 360SDK 的退出接口
*
* @param isLandScape 是否横屏显示支付界面
*/
protected void doSdkQuit(boolean isLandScape) {
Bundle bundle = new Bundle();
// 界面相关参数,360SDK 界面是否以横屏显示。
bundle.putBoolean(ProtocolKeys.IS_SCREEN_ORIENTATION_LANDSCAPE, isLandScape);
// 可选参数,登录界面的背景图片路径,必须是本地图片路径
bundle.putString(ProtocolKeys.UI_BACKGROUND_PICTRUE, "");
// 必需参数,使用 360SDK 的退出模块。
bundle.putInt(ProtocolKeys.FUNCTION_CODE, ProtocolConfigs.FUNC_CODE_QUIT);
Intent intent = new Intent(this, ContainerActivity.class);
intent.putExtras(bundle);
Matrix.invokeActivity(this, intent, mQuitCallback);
}
// 退出的回调
private IDispatcherCallback mQuitCallback = new IDispatcherCallback() {
@Override
public void onFinished(String data) {
// TODO your job
}
};
接入销毁接口:
@Override
protected void onDestroy() {
super.onDestroy();
Matrix.destroy(this);
}
游戏 activity 生命周期接口:
//游戏 Activity 必接 生命周期接口
public static void onStart(Activity activity)
//游戏 Activity 必接生命周期接口
public static void onResume(Activity activity)
//游戏 Activity 必接生命周期接口
public static void onPause(Activity activity)
//游戏 Activity 必接生命周期接口
public static void onStop(Activity activity)
//游戏 Activity 必接生命周期接口
public static void onReStart(Activity activity)
//游戏 Activity 必接生命周期接口
public static void onActivityResult (Activity activity,int requestCode, int resultCode, Intent data)
//游戏 Activity 必接生命周期接口
public static void onNewIntent (Activity activity,Intent intent)
代码混淆要求
如果游戏发布时采用proguard进行代码混淆,请在proguard配置文件加入以下代码,以避免对SDK进行混淆,否则会造成SDK部分功能不正常。
-keep class a.a.a.** { *; }
-keep class cn.pp.** { *; }
-keep class com.alipay.** {*;}
-keep class com.qihoo.** {*;}
-keep class com.qihoo360.** { *; }
-keep class com.qihoopp.** { *; }
-keep class com.yeepay.safekeyboard.** { *; }
-keep class com.amap.** {*;}
-keep class com.aps.** {*;}
-keep class com.iapppay.** {*;}
-keep class com.ipaynow.** {*;}
-keep class com.junnet.heepay.** {*;}
-keep class com.tencent.mm.** {*;}
-keep class com.ta.utdid2.** {*;}
-keep class com.ut.device.** {*;}
-keep class com.qihoo.sdkplugging.host.** {*;}
-keep public class com.qihoo.gamecenter.sdk.matrix.PluggingHostProxy {*;}
-dontwarn cn.pp.**
-dontwarn com.alipay.android.app.**
-dontwarn com.qihoo.**
-dontwarn com.qihoo360.**
-dontwarn com.qihoopp.**
-dontwarn com.yeepay.safekeyboard.**
-dontwarn com.amap.**
-dontwarn org.apache.http.conn.ssl.SSLSocketFactory
如果想了解更多,请联系我们或关注官网
了解更多:www.typesdk.com
问题解答:1771930259
联系邮箱:qianyuzhou@typesdk.com
项目地址:https://github.com/typesdk