推送模块提供了远程推送和本地通知的功能。
注意一:目前支持谷歌推送。
注意二:请在接入前,删除原游戏中已经添加的第三方推送 SDK 和相关 API 接口,防止发生冲突和闪退情况。
说明:游戏需要先找 SuperSDK 对外接口人开通该功能,申请 WePush 参数(江流儿:yuhc@yoozoo.com 二二:hanlj@yoozoo.com)。
1. 下载推送模块资源 。
2. 导入资源,将 module-push.jar 导入到游戏工程的libs目录下(与 supersdk.jar 同目录)。
接口描述:注册推送服务,在初始化完成后调用。
接口调用:
Map<String, String> map = new HashMap<String, String>();
map.put("showType","1"); // 必传,显示类型,0:表示应用在前台也需要弹出通知,1:表示应用在前台不需要弹出通知
map.put("lang","zh"); // 必传,推送语言,固定传 zh,此处为占位符
SuperSDK.invoke("push", "registerPush", map);
说明:远程推送提供了服务端推送的功能。
接口描述:绑定推送用户,登录完成后调用。
注意: 传入的用户 ID 必须是 SuperSDK 获取到的带前缀的 osdk_user_id。
接口调用:
Map<String, String> map = new HashMap<String, String>();
map.put("osdk_user_id", osdkUserId); // 必传,用户 ID,必须是带前缀的用户 ID,如 000016_123456
SuperSDK.invoke("push", "bindUser", map);
说明:当游戏调用注册推送服务、绑定用户两个接口后,就可以收到服务端推送过来的消息。接收的地方为 SuperSDK 的统一回调里面,如下所示:
接口回调:
private OnSuperSDKListener mSuperSDKListener = new OnSuperSDKListener() {
@Override
public void onSuperSDK(String moduleName, String funcName, String result) {
// 调用接口异步监听结果。
Log.d(TAG, "moduleName:" + moduleName + "\nfuncName:" + funcName + "\nresult:" + result);
// 判断这是平台模块("push")内的方法,并且方法为接收远程推送("receiveRemoteNotification")
if("push".equals(moduleName) && "receiveRemoteNotification".equals(funcName)) {
// 接收服务端推送消息,建议调用独立的处理方法
receive(result);
}else {
Log.d("supersdk", "其他模块方法的监听结果");
}
}
};
// 这个方法处理服务端推送消息
privite void receive(String result) {
String data = JsonUtils.parseObject(result).getJSONObject("data");
// 推送的消息放在 data 里面,为 json 格式的字符串
Log.e(TAG, "data=" + data);
}
说明:推送模块提供了本地通知的功能。
接口描述:当游戏需要接入本地推送,调用存储本地推送的接口,如下所示:
注意:在游戏被结束进程以后无法获取。
接口调用:
Map<String, Object> map = new HashMap<>();
map.put("identifier", "1"); // 本地推送的唯一标识符,纯数字类型的字符串,长度不超过 8 位
map.put("alertTitle", "通知栏显示的推送标题"); // 通知栏显示的推送标题
map.put("alertBody", "通知栏显示的推送内容"); // 通知栏显示的推送内容
map.put("isSound", "1"); // 通知到达时是否需要开启声音,1 开启,0 关闭
map.put("soundName", "l9398l"); // 通知声音文件名称,该文件放置在游戏包体的 res/raw 文件夹下,传入名称不能带有后缀,例如 res/raw/local.mp3,应该传入 local
map.put("fireDate", "1513652820"); // 推送触发时间,为时间戳,单位为秒
map.put("repeat", "0"); // 0 表示不重复,1 表示每天重复,2 表示每小时重复
map.put("showType", "1"); // 0 表示应用在前台也需要弹出通知,1 表示应用在前台不需要弹出通知,注意:必须和注册接口传的值保持一致!
map.put("vibrate", "1"); // 0 表示不需要震动, 1 表示默认震动,2 表示自定义震动,即震动 3 下,每次震动 0.5 秒,每次间隔 0.5 秒
map.put("iconName", "local_icon"); // 显示的 icon 名称,该文件放置在 res/drawable 下,并且值不带后缀,一般不能超过 521*512 像素,并且背景为透明,显示时安卓会去掉 RGB 值,显示为灰色
JSONObject json = new JSONObject();
try {
json.put("key" : "value");
} catch (JSONException e) {
e.printStackTrace();
}
map.put("userInfo", json); // 透传信息
SuperSDK.invoke("push", "addLocalNotification", map);
接口回调:
private OnSuperSDKListener mSuperSDKListener = new OnSuperSDKListener() {
@Override
public void onSuperSDK(String moduleName, String funcName, String result) {
// 调用接口异步监听结果。
Log.d(TAG, "moduleName:" + moduleName + "\nfuncName:" + funcName + "\nresult:" + result);
// 判断这是平台模块("push")内的方法,并且方法为添加本地推送("addLocalNotification")
if("push".equals(moduleName) && "addLocalNotification".equals(funcName)) {
receive(result);
}else {
Log.d("supersdk", "其他模块方法的监听结果");
}
}
};
// 这个方法处理添加本地推送消息
privite void receive(String result) {
JSONObject json=JsonUtils.parseObject(result);
int code=json.getIntValue("code");
if(code==1){
Log.d(TAG,"添加本地推送成功");
}else if(code == -2){
Log.d(TAG,"本地已存在该 identifier 的任务,请根据 id 调用删除本地接口后,再添加");
}else{
Log.d(TAG,"本地推送添加失败,原因为:"+json.getString("msg"));
}
JSONObject data=json.getJSONObject("data");
// 推送的消息放在 data 里面,为 json 格式的字符串
Log.e(TAG, "data=" + data);
}
日志打印:
moduleName : push,
funcName : addLocalNotification,
result : {
"msg" : "本地推送添加成功",
"data" : {
"repeat" : 0,
"alertTitle" : "通知栏显示的推送标题",
"isSound":1,
"alertBody" : "通知栏显示的推送内容",
"identifier" : 1,
"fireDate" : 1513652820,
"userInfo" : {
"key" : "value"
}
},
"code" : 1
}
说明:当游戏调用注册推送服务、添加本地通知两个接口后,就可以接收本地通知消息。接收的地方为 SuperSDK 的统一回调里面,如下所示: 接口回调:
private OnSuperSDKListener mSuperSDKListener = new OnSuperSDKListener() {
@Override
public void onSuperSDK(String moduleName, String funcName, String result) {
// 调用接口异步监听结果。
Log.d(TAG, "moduleName:" + moduleName + "\nfuncName:" + funcName + "\nresult:" + result);
// 判断这是平台模块("push")内的方法,并且方法为查询本地推送("receiveLocalNotification")
if("push".equals(moduleName) && "receiveLocalNotification".equals(funcName)) {
receive(result);
}else {
Log.d("supersdk", "其他模块方法的监听结果");
}
}
};
// 这个方法处理接收本地推送消息
privite void receive(String result) {
JSONObject json=JsonUtils.parseObject(result);
JSONObject data=json.getJSONObject("data");
// 推送的消息放在 data 里面,为 json 格式的字符串
Log.d(TAG, "收到本地推送消息,消息为:" + data);
}
日志打印:
moduleName : push,
funcName : receiveLocalNotification,
result : {
"msg" : "收到本地推送消息",
"data" : {
"repeat" : 0,
"alertTitle" : "通知栏显示的推送标题",
"isSound":1,
"alertBody" : "通知栏显示的推送内容",
"identifier" : 1,
"fireDate" : 1513652820,
"userInfo" : {
"key" : "value"
}
},
"code" : 1
}
接口描述:当游戏需要接入本地推送,需要查询该 identifier 的本地推送是否存在,如下所示:
接口调用:
Map<String, String> map = new HashMap<String, String>();
map.put("identifier", "1"); //本地推送的唯一标识符,根据这个参数来查询
SuperSDK.invoke("push", "fetchLocalNotification", map);
接口回调:
private OnSuperSDKListener mSuperSDKListener = new OnSuperSDKListener() {
@Override
public void onSuperSDK(String moduleName, String funcName, String result) {
// 调用接口异步监听结果。
Log.d(TAG, "moduleName:" + moduleName + "\nfuncName:" + funcName + "\nresult:" + result);
// 判断这是平台模块("push")内的方法,并且方法为查询本地推送("fetchLocalNotification")
if("push".equals(moduleName) && "fetchLocalNotification".equals(funcName)) {
receive(result);
}else {
Log.d("supersdk", "其他模块方法的监听结果");
}
}
};
// 这个方法处理查询本地推送消息
privite void receive(String result) {
JSONObject json=JsonUtils.parseObject(result);
JSONObject data=json.getJSONObject("data");
// 推送的消息放在 data 里面,为 json 格式的字符串
Log.d(TAG, "data=" + data);
int code=json.getIntValue("code");
if(code==1){
Log.d(TAG,"该本地推送存在,推送的详细信息为:"+data);
}else{
Log.d(TAG,"本地推送添加失败,原因为:"+json.getString("msg"));
}
}
日志打印:
moduleName : push,
funcName : fetchLocalNotification,
result : {
"msg" : "本地有该推送",
"data" : {
"repeat" : 0,
"alertTitle" : "通知栏显示的推送标题",
"isSound":1,
"alertBody" : "通知栏显示的推送内容",
"identifier" : 1,
"fireDate" : 1513652820,
"userInfo" : {
"key" : "value"
}
},
"code" : 1
}
接口描述:根据 identifier 删除本地推送,如下所示:
接口调用:
Map<String, String> map = new HashMap<String, String>();
map.put("identifier", "1"); // 本地推送的唯一标识符,根据这个参数来删除
SuperSDK.invoke("push", "deleteLocalNotification", map);
接口描述:删除存在的所有本地推送,如下所示:
接口调用:
SuperSDK.invoke("push", "deleteAllLocalNotifications", null);