信鸽推送集成
UDID是设备唯一设备识别符,移动广告运营商和游戏网络运营商可以通过这个udid识别玩家用户并对用户活动进行跟踪,苹果可能是因为安全原因拒绝。
device token是苹果返回给我们的NSData数据。通过Bundle Identifier 区分 deviceToken
iOS远端推送原理
服务端把要发送的消息和目标iOS设备的DeviceToken打包,发送给APNS;DeviceToken不是一成不变的
APNS在自身的已注册Push服务的IOS设备列表中,根据DeviceToken查找对应iOS设备,并将消息发送到IOS设备
iOS设备把发送的消息传递给对应的应用程序。
iOS推送证书设置
再需要设置信鸽推送的Demo上,先用开发者账号去运行,将Demo在模拟机上运行一遍。这样可以在apple developer -> acconut 中直接查找到项目的App ID.
运行过后刷新apple developer -> account -> Certificates...
找到后,由于未添加push notification 所以选项都为disable 点击edit进行更改。
创建推送证书,接下来会需要导入Certificate Signing Request。
生成 .certSigningRequest文件,然后导入到 4 中。
5 中上传完成的后的效果图。
推送证书生成完毕,点击下载。
下载后如图所示,双击进行安装
推送证书安装完毕后的效果。
Provisioning Profiles (配置概要文件)
如图所示,添加新profile
选中ios App Developer
Development(开发状态下) Distribution(生产状态下)
选择需要进行推送的应用的Bundle id
按照图示进行选中。
选中需要推送的设备
给描述文件命名。
下载用于推送的描述文件。
腾讯信鸽平台设置
登录信鸽平台。选中接入推送应用
填写需要设置推送的应用的信息
进行该应用的信鸽平台的配置
需要进行设置的2项:开发证书和测试设备
再次打开钥匙串。选中Push证书导出,选中一行。导出的格式为p12。
打开终端,进入到p12文件所在执行以下命令
openssl pkcs12 -in Name.p12 -out Name.pem -nodes
将生成的CertificateName.pem证书,上传到信鸽配置信息 -> iOS证书配置 -> 开发证书。 进行 pem 证书上传验证。
Xcode设置
双击 .mobileprovision 文件,进行安装。
设置Provisioning Profile
代码实现
在信鸽平台下载Demo后,将XGSetting.h 和 XGPush.h 和 libXG-SDK.a添加到Xcode工程
添加对以下libraries的引用。包括CFNetwork.framework , SystemConfiguration.framework , CoreTelephony.framework , libz.dylib , libXG-SDK.a,Security.framework。
初始化push信息
注册用户
// 设置账号
[XGPush setAccount:@"zhoujian"];
获取deviceToken,拷贝至信鸽平台 接入配置 -> 测试设备 -> 新增设备
- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken{
[XGPush registerDevice:deviceToken];//信鸽获取Token
NSLog(@"远程推送能力注册成功,deviceToken:%@",deviceToken);
}
信鸽平台 -> 创建通知
注意:推送环境和用户范围设置好,注意是当前应用设置的是开发环境还是生产环境。
输入测试内容,点击确认推送,手机端就可以收到推送的信息。
设置点击推送栏跳转至指定页面
点击通知操作使用自定义参数
收到远程推送消息时调用
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo{
//推送
NSLog(@"推送内容是:%@",userInfo);
}
得到userInfo字典
推送内容是:{
aps = {
alert = "\U6d4b\U8bd5";
sound = default;
};
info = 333;
xg = {
bid = 0;
ts = 1472197503;
};
}
故可以设置通知,当 info 有值时候,发送通知给指定页面,执行相应的跳转事件。
设置APP 通知未读角标
信鸽平台 -> 创建通知
在 useInfo 中
//设置APP的bageValue
NSString *bageValue = [[userInfo objectForKey:@"aps"] objectForKey:@"bageValue"];
int i = [bageValue intValue];
[UIApplication sharedApplication].applicationIconBadgeNumber = i;
判断应用处于前台 or 后台
//处于前台
[UIApplication sharedApplication].applicationState == UIApplicationStateActive
//处于后台
[UIApplication sharedApplication].applicationState == UIApplicationStateBackground