推送模块提供了远程推送和本地通知的功能。
注意一:Android 目前支持谷歌推送。
注意二:请在接入前,删除原游戏中已经添加的第三方推送 SDK 和相关 API 接口,防止发生冲突和闪退情况。
说明:游戏需要先找 SuperSDK 对外接口人开通该功能,申请 WePush 参数(江流儿:yuhc@yoozoo.com 二二:hanlj@yoozoo.com)。
注意:Android 需要进行如下操作。
1. 下载推送模块资源 。
2. 导入资源,将 module-push.jar 导入到游戏工程的libs目录下(与 supersdk.jar 同目录)。
接口描述:注册推送服务,在初始化完成后调用。
接口调用:
Dictionary<string, object> paramsDic = new Dictionary<string, object>();
paramsDic.Add("showType","1"); // 必传,显示类型,0:表示应用在前台也需要弹出通知,1:表示应用在前台不需要弹出通知
paramsDic.Add("lang","zh"); // 必传,推送语言,固定传 zh,此处为占位符
SuperSDK.getInstance().Invoke("push", "registerPush", paramsDic);
说明:远程推送提供了服务端推送的功能。
接口描述:绑定推送用户,登录完成后调用。
注意: 传入的用户 ID 必须是 SuperSDK 获取到的带前缀的 osdk_user_id。
接口调用:
Dictionary<string, object> paramsDic = new Dictionary<string, object>();
paramsDic.Add("osdk_user_id", osdkUserId); // 必传,用户 ID,必须是带前缀的用户 ID,如 000016_123456
SuperSDK.getInstance().Invoke("push", "bindUser", paramsDic);
说明:当游戏调用注册推送服务、绑定用户两个接口后,就可以收到服务端推送过来的消息。接收的地方为 SuperSDK 的统一回调里面,如下所示:
接口回调:
public void OnCallBack(string moduleName, string funcName, string result)
{
Debug.Log("moduleName:" + moduleName);
Debug.Log("funcName:" + funcName);
Debug.Log("result:" + result);
if (moduleName.Equals("push"))
{
if (funcName.Equals("receiveRemoteNotification"))
{
// 处理服务端推送消息
// iOS 和 Android 的消息体不一样,请分别参考 iOS 和 Android 原生 推送消息内容
}
}
}
说明:推送模块提供了本地通知的功能。
接口描述:当游戏需要接入本地推送,调用存储本地推送的接口,如下所示:
注意:Android 在游戏被结束进程以后无法获取。
接口调用:
Dictionary<string, object> paramsDic = new Dictionary<string, object>();
paramsDic.Add("identifier", "1"); // 本地推送的唯一标识符,纯数字类型的字符串,长度不超过 8 位
paramsDic.Add("fireDate", "1234567890"); // 推送触发时间,为 10 位时间戳,秒
paramsDic.Add("alertTitle", "通知栏显示的推送标题"); // 通知栏显示的推送标题
paramsDic.Add("alertBody", "通知栏显示的推送内容"); // 通知栏显示的推送内容
paramsDic.Add("isSound", "1"); // 通知到达时是否需要开启声音,1:开启,0:关闭
paramsDic.Add("soundName", "default.caf"); // iOS:固定 default.caf, Android:通知声音文件名称,该文件放置在游戏包体的 res/raw 文件夹下,传入名称不能带有后缀,例如 res/raw/local.mp3,应该传入 local
paramsDic.Add("repeat", "0"); // 0:表示不重复,1:表示每天重复,2:表示每小时重复
paramsDic.Add("showType", "1"); // 0:表示应用在前台也需要弹出通知,1:表示应用在前台不需要弹出通知,注意:必须和注册接口传的值保持一致!
Dictionary<string, object> json = new Dictionary<string, object>();
json.Add("key" : "value");
paramsDic.Add("userInfo", json); // 透传信息
paramsDic.Add("badge", "1"); // 仅支持 iOS,应用上显示的消息条数
paramsDic.Add("vibrate", "1"); // 仅支持 Android,0:表示不需要震动,1:表示默认震动,2:表示自定义震动,即震动 3 下,每次震动 0.5 秒,每次间隔 0.5 秒
paramsDic.Add("iconName", "local_icon"); // 仅支持 Android,显示的 icon 名称,该文件放置在 res/drawable 下,并且值不带后缀,一般不能超过 521*512 像素,并且背景为透明,显示时安卓会去掉 RGB 值,显示为灰色
SuperSDK.getInstance().Invoke("push", "addLocalNotification", paramsDic);
接口回调:
public void OnCallBack(string moduleName, string funcName, string result)
{
Debug.Log("moduleName:" + moduleName);
Debug.Log("funcName:" + funcName);
Debug.Log("result:" + result);
if (moduleName.Equals("push"))
{
if (funcName.Equals("addLocalNotifcation"))
{
JsonData myData = JsonMapper.ToObject(result);
int code = (int)myData["code"];
if(code == SuperSDKConstants.SUCCESS){
// 添加本地推送成功
} else {
// 本地推送添加失败,原因为:"+ myData["msg"].ToString();
}
}
}
}
日志打印:
moduleName: push,
funcName: addLocalNotification,
result: {
"msg": "本地推送添加成功",
"data": {
"repeat": 0,
"alertTitle": "通知栏显示的推送标题",
"badge": 1,
"userInfo": {
"key": "value"
},
"isSound": "1",
"alertBody": "通知栏显示的推送内容",
"identifier": "1",
"soundName": "sound.caf",
"fireDate": "1543983420",
"showType": "0"
},
"code": 1
}
说明:当游戏调用注册推送服务、添加本地通知两个接口后,就可以接收本地通知消息。接收的地方为 SuperSDK 的统一回调里面,如下所示;
接口回调:
public void OnCallBack(string moduleName, string funcName, string result)
{
Debug.Log("moduleName:" + moduleName);
Debug.Log("funcName:" + funcName);
Debug.Log("result:" + result);
if (moduleName.Equals("push"))
{
if (funcName.Equals("receiveLocalNotification"))
{
// 推送的消息放在 data 里面,为 json 格式的字符串
Debug.Log("收到本地推送消息:" + result);
}
}
}
日志打印:
moduleName : push,
funcName : receiveLocalNotification,
result : {
"msg" : "收到本地推送消息",
"data" : {
"repeat" : "0",
"alertTitle" : "通知栏显示的推送标题",
"isSound" : "1",
"alertBody" : "通知栏显示的推送内容",
"identifier" : "1",
"fireDate" : "1513652820",
"userInfo" : {
"key" : "value"
}
},
"code" : 1
}
接口描述:当游戏需要接入本地推送,需要查询该 identifier 的本地推送是否存在,如下所示:
接口调用:
Dictionary<string, object> paramsDic = new Dictionary<string, object>();
paramsDic.Add("identifier", "1"); // 本地推送的唯一标识符,根据这个参数来查询
SuperSDK.getInstance().Invoke("push", "fetchLocalNotification", paramsDic);
接口回调:
public void OnCallBack(string moduleName, string funcName, string result)
{
Debug.Log("moduleName:" + moduleName);
Debug.Log("funcName:" + funcName);
Debug.Log("result:" + result);
if (moduleName.Equals("push"))
{
if (funcName.Equals("fetchLocalNotification"))
{
JsonData myData = JsonMapper.ToObject(result);
int code = (int)myData["code"];
if(code == SuperSDKConstants.SUCCESS){
JsonData data = JsonMapper.ToObject(JsonMapper.ToJson(myData["data"]));
// 该本地推送存在,推送的详细信息为 data 数据
}else{
// 本地推送查询失败,原因为:"+ myData["msg"].ToString();
}
}
}
}
日志打印:
moduleName : push,
funcName : fetchLocalNotification,
result : {
"msg" : "本地有该推送",
"data" : {
"repeat" : "0",
"alertTitle" : "通知栏显示的推送标题",
"isSound" : 1,
"alertBody" : "通知栏显示的推送内容",
"identifier" : "1",
"fireDate" : "1513652820",
"userInfo" : {
"key" : "value"
}
},
"code" : 1
}
接口描述:根据 identifier 删除本地推送,如下所示:
接口调用:
Dictionary<string, object> paramsDic = new Dictionary<string, object>();
paramsDic.Add("identifier", "1"); // 本地推送的唯一标识符,根据这个参数来删除
SuperSDK.getInstance().Invoke("push", "deleteLocalNotification", paramsDic);
接口描述:删除存在的所有本地推送,如下所示:
接口调用:
SuperSDK.getInstance().Invoke("push", "deleteAllLocalNotifications", null);