一、功能描述
根据业务需求,对IOS APP定时推送消息,点击通知栏的推送内容,跳转到APP内指定界面。
二、准备工作
1. 参照友盟消息推送官方文档,获取 appkey 和 appMasterSecret:
官方文档链接:https://developer.umeng.com/docs/66632/detail/68343
我是在阅读此官方文档的基础上进行集成的,现针对文档上一些必要的干货和我踩过的坑和大家分享一下:
1). 必须获取 Appkey 和 App Master Secret,IOS和java后台可以用一套,我们是项目经理帮着申请的。
2). 关于“IP白名单”:不是必须设置,我在集成的时候没有管,都是默认状态。
3). Device Token:IOS小伙伴在用户登录的时候根据设备获取的,并发送给友盟,使用单播或者列播的时候才需要此字段,但这两种模式有一个bug,比如同一个设备,用两个不同的账号登录过app,两个账号对应的推送消息该设备都能接收到,不符合常理。所以、我开始和小伙伴用的这种方式,发现这个bug后果断放弃了。
4). Alias:根据别名的方式推送消息,每一个设备上接到的推送就是最后一个登录的账号应该收到的消息。我采用的是这一种。setAlias(alias, alias_type),也是IOS小伙伴在登录的时候注册到友盟的,比如我这边和IOS小伙伴约定好了,alias取的就是userId的值,alias_type为“push”,后面代码中有提到。
5). unicast、listcast、customizedcast等模式的选择:鉴于3)/4)两条的分析,我选择的是customizedcast。
2. 相关jar包及类的导入:
如下,是我是在官网Java SDK v1.5(2015-11-13)的基础上进行修改后的,仅供参考。
链接:https://pan.baidu.com/s/1_BUcSwcru01bC49apJdfxQ 提取码:tvvr
三、实现示例
1. PushHandler.java
package com.test.push;
import java.util.HashMap;
import java.util.Map;
public class PushHandler {
private static PushClient client = new PushClient();
// setBadge 推送角标数
public static Map<String, Integer> badgeMap;
static {
badgeMap = new HashMap<String, Integer>();
}
public static Map<String, Integer> getbadgeMap() {
return badgeMap;
}
public static void setbadgeMap(Map<String, Integer> badgeMap) {
PushHandler.badgeMap = badgeMap;
}
/**
*
* @param userId
* @return
*/
public static int getBadge(String userId)
{
//条数统计
String badgeKey = userId;
if(badgeMap.get(badgeKey) == null){
badgeMap.put(badgeKey, 0);
}
int badge = badgeMap.get(badgeKey);
return badge;
}
/**
*
* @param userId
* @param badge
* @return
*/
public static int setBadge(String userId,int badge)
{
//条数统计
String BadgeKey = userId;
badge++;
badgeMap.put(BadgeKey, badge)