最近一直在弄推送,趁着还记得,把它整理一下。
1.生成推送证书,现在说一下开发证书。在appStore申请一个推送证书。这个应该都知道就不细说了。然后下载。在钥匙串中找到该证书。
然后单机“Apple Development Push Services”,导出p12文件,保存为 apns-dev-cert.p12 文件,
扩展“Apple Development Push Services” 对“Private Key”做同样操作,保存为 apns-dev-key.p12 文件
在终端写命令openssl pkcs12 -clcerts -nokeys -out apns-dev-cert.pem -in apns-dev-cert.p12
openssl pkcs12 -nocerts -out apns-dev-key.pem -in apns-dev-key.p1 将这些文件转换为PEM格式。
如果你想要移除密码,要么在导出/转换时不要设定或者执行 openssl rsa -in apns-dev-key.pem -out apns-dev-key-noenc.pem
最后,你需要将键和许可文件合成为apns-dev.pem文件,此文件在连接到APNS时需要使用
cat apns-dev-cert.pem apns-dev-key-noenc.pem > apns-dev.pem
最后生成的这个证书发给后台就可以,然后不出意外你的程序就可以接受推送消息了
推送消息处理:
在appdelegate的这个方法didReceiveRemoteNotification处理推动消息,也可以用这个方法didReceiveRemoteNotification 因为我们做的是类似微信的聊天
所以我全部用的通知来完成。例如这个方法处理中
- (void)application:(UIApplication*)application didReceiveRemoteNotification:(NSDictionary*)userInfo{
//处理推送消息
NSLog(@"收到推送消息:%@",[[userInfoobjectForKey:@"aps"]objectForKey:@"alert"]);
if(userInfo && [userInfoisKindOfClass:[NSDictionaryclass]]){
[UIApplicationsharedApplication].applicationIconBadgeNumber= 0;
NSDictionary*dicMessage =userInfo[@"aps"][@"alert"];
NSUserDefaults*userDefault = [NSUserDefaultsstandardUserDefaults];
NSIntegercurrentPage = [userDefaultintegerForKey:@"CurrentPage"];
NSString*topic_id = [userDefaultobjectForKey:@"topicid"];
if(currentPage == 1&&[dicMessage[@"topic_id"]isEqualToString:topic_id]) {
//创建通知
NSNotification* notice = [NSNotificationnotificationWithName:@"push_text"object:niluserInfo:dicMessage];
//通过通知中心发送通知
[[NSNotificationCenterdefaultCenter]postNotification:notice];
}
elseif(![LDCommonUtilisBlankString:dicMessage[@"title"]]) {
NSNotification*notification = [NSNotificationnotificationWithName:@"go_out"object:niluserInfo:dicMessage];
[[NSNotificationCenterdefaultCenter]postNotification:notification];
[LDCommonUtilalertWithTitle:dicMessage[@"title"]msg:dicMessage[@"body"]];
}
elseif(currentPage == 2&& [userDefaultintegerForKey:@"background"]==1){
NSNotification*notification = [NSNotificationnotificationWithName:@"open_page"object:niluserInfo:dicMessage];
[[NSNotificationCenterdefaultCenter]postNotification:notification];
NSUserDefaults*defaulets = [NSUserDefaultsstandardUserDefaults];
[defauletssetInteger:0forKey:@"background"];
[defauletssynchronize];
}
}
}
创建通知,然后再消息界面处理通知。怎么样,其实很简单吧!