成就系统SDK接入指南更新时间:2024-10-08 17:52:00
一、使用前提
小米成就SDK目前处于内测阶段,接入成就功能必须先按照小米游戏SDK,接入登录功能,支持的小米游戏SDK版本必须为3.3.0.6及以上,获取成就功能必须同时接入小米游戏SDK和成就系统SDK。
二、SDK接入
1、引入资源
完成小米游戏SDK登录功能接入后,请参考集成小米游戏SDK中的操作,并按照以下示例添加小米成就SDK依赖。
dependencies {
...
//小米网游SDK,成就SDK必须使用3.3.0.6及以上版本
def lastVersion = "3.3.0.6"
implementation "com.google.code.gson:gson:2.8.6"
implementation "com.google.zxing:core:3.2.0"
implementation "com.alipay.sdk:alipaysdk-android:15.8.09@aar"
implementation "com.xiaomi.gamecenter.sdk:mioauth:$lastVersion"
implementation "com.xiaomi.gamecenter.sdk:onetrack-sdk:1.2.7"
//小米成就SDK start
implementation "com.xiaomi.gamecenter.sdk:miAchievement:1.0.1"
implementation "com.google.protobuf:protobuf-java:3.12.0"
implementation "org.greenrobot:eventbus:3.0.0"
//小米成就SDK end
}a、混淆
-keep class com.xiaomi.gamecenter.sdk.achievement.** {*;}
-keep class com.google.protobuf.** {*;}
-keep class org.greenrobot.eventbus.** {*;}
-keep class com.mi.milink.** {*;}2、注册监听回调
成就SDK中包含多个监听回调,分别会在初始化数据成功、初始化数据失败以及成就进度更新时被调用,请特别注意初始化数据成功的回调,这是成就SDK调用其他接口的前提,初始化数据失败时请提示用户或者在合适的时候重新初始化数据 。(错误码见附录3.2)。
MiAchievement.registerCallback(new MiAchievementCallback() {
@Override
public void onAchievementSDKInitSuccess() {
//初始化成功
}
@Override
public void onAchievementSDKInitFail(int code, String msg) {
// 初始化失败
}
@Override
public void onAchievementStatusUpdate(MIAchievementBean miAchievementBean, int code, String msg) {
if (code == MiAchievementErrorCode.ACHIEVEMENT_SUCCESS) {
//成就更新成功
}else {
// 成就更新失败
}
}
});3、初始化数据
由于SDK会在本地记录用户的成就数据,所以请在务必在登录成功后初始化数据。此操作为异步操作,需要确认收到初始化成功回调时才能进行成就上报等其他操作。
MiAchievement.initData(); //初始化4、获取全部成就数据
全部成就数据分为本地数据和服务端数据两种。本地数据是记录在内存与磁盘缓存中,本地数据会在调用初始化数据接口成功后更新。主动调用服务端数据接口时也会更新本地数据。如果对成就数据的实时性要求比较高,可以调用获取服务端数据接口,正常情况下使用本地数据即可。(错误码见附录3.2)。
// 获取本地数据
List<MIAchievementBean> allAchievementList= MiAchievement.getLocalAllAchievementList();
// 获取服务器数据
MiAchievement.fetchAllAchievementList((list, code, msg) -> {
if (code == MiAchievementErrorCode.ACHIEVEMENT_SUCCESS) {
//获取成就数据成功
} else {
//获取成就数据失败
}
});5、获取当前用户成就数据
用户数据也分为本地数据与服务端数据两种。如果对成就数据的实时性要求比较高,可以调用获取服务端数据接口,正常情况下使用本地数据即可。(错误码见附录3.2)。
// 获取本地数据
List<MIAchievementBean> userAchievementList=MiAchievement.getLocalUserAchievementList();
// 获取服务器数据
MiAchievement.fetchUserAchievementList((list, code, msg) -> {
if (code == MiAchievementErrorCode.ACHIEVEMENT_SUCCESS) {
//获取成就数据成功
} else {
//获取成就数据失败
}
});
6、达成某个成就
用于上报用户成就达成的数据和触发冒泡弹窗。 分步式与非分步式成就均可用reach来达成成就。
// achievementId 成就Id 在开发者平台自行配置的
MiAchievement.reach("achievementId");7、分步成就增长步数
分步式成就可以用增量与整体步数两种方式来上传。growSteps为增量方式,比如玩家新增了10步;makeSteps为整体步数方式,比如玩家目前累计完成了20步。
// achievementId 成就Id 在开发者平台自行配置的
MiAchievement.growSteps("achievementId", 10);
MiAchievement.makeSteps("achievementId", 20);8、设置冒泡开关
SDK会在成就达成时默认展示冒泡弹窗。若有关闭需要可以调用该接口。
MiAchievement.setShowToast(boolean isShow);三、附录
1、成就信息 MIAchievementBean
| 参数 | 类型 | 说明 |
| achievementId | String | 成就id |
| achievementName | String | 成就名称 |
| achievementDesc | String | 成就描述 |
| achievementIcon | String | 成就icon地址 |
| achievementType | Integer | 成就类型 0:非分步骤 1:分步骤 |
| achievementTotalStep | Integer | 成就总步骤(achievementType = 0 时,值为1) |
| unlockNum | Integer | 解锁该成就的人数 |
| unlockScale | Double | 解锁该成就的人数比例 |
| unlockStatus | Integer | 解锁状态 1:解锁成就 0:尚未解锁 |
| achievementFinishStep | Integer | 成就已完成的步数 |
| unlockProgress | Double | 成就解锁进度 |
2、异常码 MiAchievementErrorCode
| 异常码 | 含义 |
| 1000 | 服务器内部异常 |
| 1001 | 传入参数异常(例如成就id未空,上报成就不在游戏的发布的成就范围内等等) |
| 1002 | 重复上传成就(例如已经解锁的的成就再次上传) |
| 2001 | SDK未初始化或初始化失败 |
| 2002 | 网络未连接 |
| 2003 | 上报成就或者获取成就数据超时 |
| 2004 | 其他异常情况 |
| 3001 | 初始化失败,用户未登录 |
| 3002 | 初始化失败,获取全部成就数据为空 |
3、Demo
package com.sdk.unity.migame.payment;
/**
* desc : 成就demo
*/
public class AchievementActivity extends Activity {
private static final String TAG = "AchievementActivity";
private boolean showToast = true;
private MiAchievementCallback mMiAchievementCallback = new MiAchievementCallback() {
@Override
public void onAchievementSDKInitSuccess() {
//初始化成功
}
@Override
public void onAchievementSDKInitFail(int code, String msg) {
//初始化失败
}
@Override
public void onAchievementStatusUpdate(MIAchievementBean bean, int code, String msg) {
Log.i(TAG, "onAchievementStatusUpdate code=" + code + ",msg=" + msg + ",bean=" + bean);
if (code == MiAchievementErrorCode.ACHIEVEMENT_SUCCES) {
//成就上报成功
} else {
//成就上报失败
}
}
};
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//.......
MiAchievement.setShowToast(true);//设置显示冒泡弹窗
}
/**
* 成就初始化
*
* @param view }
*/
public void achievementInit(View view) {
MiAchievement.initData(); //SDK初始化,在登录后调用
}
/**
* 获取本地游戏成就信息
*
* @param view
*/
public void getLocalAllAchievementList(View view) {
List<MIAchievementBean> allAchievementList = MiAchievement.getLocalAllAchievementList();
}
/**
* 拉取服务游戏成就信息
*
* @param view
*/
public void fetchAllAchievementList(View view) {
MiAchievement.fetchAllAchievementList((list, code, msg) -> {
Log.i(TAG, "fetchAllAchievementList code=" + code + ",msg=" + msg + ",list=" + list);
if (code == MiAchievementErrorCode.ACHIEVEMENT_SUCCESS) {
//获取成就数据成功
Toast.makeText(AchievementActivity.this, "拉取游戏所有成就数据成功", Toast.LENGTH_SHORT).show();
} else {
//获取成就数据失败
Toast.makeText(AchievementActivity.this, "拉取游戏所有成就数据失败 code=" + code + ",msg=" + msg, Toast.LENGTH_SHORT).show();
}
});
}
/**
* 获取玩家本地游戏成就信息
*
* @param view
*/
public void getLocalUserAchievementList(View view) {
List<MIAchievementBean> localUserAchievementList = MiAchievement.getLocalUserAchievementList();
Log.i(TAG, "getLocalUserAchievementList=" + localUserAchievementList);
}
/**
* 拉取玩家服务端游戏成就信息
*
* @param view
*/
public void fetchUserAchievementList(View view) {
MiAchievement.fetchUserAchievementList(new GetAchievementListCallBack() {
@Override
public void onGetAchievementList(List<MIAchievementBean> list, int code, String msg) {
Log.i(TAG, "fetchUserAchievementList code=" + code + ",msg=" + msg + ",list=" + list);
if (code == MiAchievementErrorCode.ACHIEVEMENT_SUCCESS) {
Toast.makeText(AchievementActivity.this, "拉取玩家游戏所有成就数据成功", Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(AchievementActivity.this, "拉取玩家游戏所有成就数据失败 code=" + code + ",msg=" + msg, Toast.LENGTH_SHORT).show();
}
}
});
}
/**
* 达成成就
*
* @param view
*/
public void reachAchievement(View view) {
MiAchievement.reach("achievementId");
}
/**
* 上报增量分步式成就
*
* @param view
*/
public void growSteps(View view) {
MiAchievement.growSteps("achievementId", 10);
}
/**
* 上报分步式整体进度
*
* @param view
*/
public void makeSteps(View view) {
MiAchievement.makeSteps("achievementId", 20);
}
/**
* 设置冒泡开关
*
* @param view
*/
public void setShowToast(View view) {
MiAchievement.setShowToast(showToast);
}
}文档内容是否有帮助?
有帮助
无帮助