supersdk

文档中心

文档中心

下载文档

WePush 推送模块


推送模块提供了远程推送和本地通知的功能。

注意一:目前支持谷歌推送。

注意二:请在接入前,删除原游戏中已经添加的第三方推送 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);

三、远程推送

说明:远程推送提供了服务端推送的功能。

1. 设置用户标识接口(必接)

接口描述:绑定推送用户,登录完成后调用。

注意: 传入的用户 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);

2. 收到远程推送回调(选接)

说明:当游戏调用注册推送服务、绑定用户两个接口后,就可以收到服务端推送过来的消息。接收的地方为 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);
}

四、本地通知

说明:推送模块提供了本地通知的功能。

1. 添加本地通知(必接)

接口描述:当游戏需要接入本地推送,调用存储本地推送的接口,如下所示:

注意:在游戏被结束进程以后无法获取。

接口调用:

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
}

2. 收到本地通知回调(选接)

说明:当游戏调用注册推送服务、添加本地通知两个接口后,就可以接收本地通知消息。接收的地方为 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
}

3. 查询指定标识符的本地通知(选接)

接口描述:当游戏需要接入本地推送,需要查询该 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
}

4. 删除指定标识符的本地通知(选接)

接口描述:根据 identifier 删除本地推送,如下所示:

接口调用:

Map<String, String> map = new HashMap<String, String>();
map.put("identifier", "1"); // 本地推送的唯一标识符,根据这个参数来删除
SuperSDK.invoke("push", "deleteLocalNotification", map);

5. 删除所有本地通知(选接)

接口描述:删除存在的所有本地推送,如下所示:

接口调用:

SuperSDK.invoke("push", "deleteAllLocalNotifications", null);