首页 > 代码库 > IOS推送
IOS推送
1、要注意顺序问题,一定要按照这个顺序来:
生成钥匙串请求 -->配置下载开发证书--> 配置App ID ,配置、下载SSL证书-->Provisioning证书
生成钥匙串请求
1)在应用程序里的使用工具中找到钥匙串访问。
2)填写你的邮箱和常用名称,常用名要记一下,CA电子邮件地址保持默认,并选择保存到硬盘。
3)点击继续。
4)保存位置在桌面,点击存储。
到这里点击完成后我们会在桌面上看到一个Push.certSigningRequest的请求文件,也就是我们说的CSR文件。在我们生成CSR文件的同时,会在钥匙串访问中生成一对秘钥,名称为刚才我们填写的常用名。
配置App ID ,配置、下载SSL证书
1) 使用开发者帐号登录IOS Provisioning ,选择或新建一个App Id
2) 创建完后,进入App Id列表,可以看到新建的App Id默认是没有激活推送功能的,点击Edit进入编辑页面,
3)点击Development Push SSL Certificate一行后的Create Certificate...,进入推送功能激活页面
4)点击Continue:
5)选择前面生成好的Push.certSigningRequest文件,点击Generate
6)点击Continue
7)点击Download,文件名为aps_developer.cer,我们把他放在桌面。
8)点击Done,你会发现状态变成了Enabled:
现在我们的开发证书已经配置并下载好了,发布证书的配置过程和开发证书是一致的。
下载完后双击,会跳到钥匙串访问里。这就是我们之后要进行测的证书。
下载Provisioning证书
1)到Provisioning标签下查看证书是否支持Push Notification
2)重新下载Provisioning证书并导入到Xcode中,如果调试是出现“未找到应用程序的授权字符串”。
而且Bundle Identifier、Code Signing指定的开发证书绑定的AppId要和推送证书绑定的AppId一致
p12文件
1)导出密钥
2)右键选择导出
3)导出的文件名我们叫做Push
4)在这里需要输入一个密码来对文件进行加密。这里我们选择123321,当然你也可以自己选择是什么,但是这个密码必须要铭记,切记!
5)然后输入你电脑的密码,点击允许。
这样我们就在桌面上生成了一个Push.p12文件
到此为止,我们在桌面上一共生成了三个文件。一个是CSR请求文件,一个是aps_development .cer的SSL证书文件,还有一个刚才生成的Push.p12秘钥文件。
测试代码:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{
if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 8.0){
settingsForTypes(UIUserNotificationTypeSound | UIUserNotificationTypeAlert | UIUserNotificationTypeBadge) categories:nil]];
}
else
{
[[UIApplication sharedApplication] registerForRemoteNotificationTypes:
(UIUserNotificationTypeBadge | UIUserNotificationTypeSound | UIUserNotificationTypeAlert)];
}
return YES;
}
- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)pToken {
NSLog(@"regisger success:%@", pToken);
//注册成功,将deviceToken保存到应用服务器数据库中
}
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo{
// 处理推送消息
UIAlertView *alert=[[UIAlertView alloc]initWithTitle:@"通知" message:@"我的信息" delegate:self cancelButtonTitle:@"取消" otherButtonTitles:nil, nil];
[alert show];
[alert release];
NSLog(@"%@", userInfo);
}
- (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error {
NSLog(@"Regist fail%@",error);
}
到这里一切顺利的话我们就可以在真机运行了,注册成功我们会得到iphone 的deviceToken
处理证书
现在我们的准备工作已经做完了。要开始对生成的文件进行处理了。原因上面已经解释过,因为我们的服务链接苹果服务器也是需要证书的,但是我们直接生成的证书windows系统(我们一般的服务器都是win系统的)是不识别的,所以我们需要生成一个后缀为pem的带证书带秘钥的文件。
打开终端,cd到我们那三个文件所在的位置
1)把.cer的SSL证书转换为.pem文件,执行命令:
openssl x509 -in aps_development.cer -inform der -out PushChatCert.pem
2)把私钥Push.p12文件转化为.pem文件:
openssl pkcs12 -nocerts -out PushChatKey.pem -in Push.p12
3)对生成的这两个pem文件再生成一个pem文件,来把证书和私钥整合到一个文件里:
cat PushChatCert.pem PushChatKey.pem > ck.pem
为了测试证书是否工作,执行下面的命令:
telnet gateway.sandbox.push.apple.com 2195
Trying 17.172.232.226…
Connected to gateway.sandbox.push-apple.com.akadns.net.
Escape character is ‘^]’.
它将尝试发送一个规则的,不加密的连接到APNS服务。如果你看到上面的反馈,那说明你的MAC能够到达APNS。
按下Ctrl+C 关闭连接。如果得到一个错误信息,那么你需要确保你的防火墙允许2195端口。
下面我们要使用我们生成的SSL证书和私钥来设置一个安全的链接去链接苹果服务器:
openssl s_client -connect gateway.sandbox.push.apple.com:2195 -cert PushChatCert.pem -key PushChatKey.pem
执行完这一句命令后需要我们输入密语
Enter pass phrase for PushChatKey.pem:
我们输入123321按回车
当你在最后的时候你看到这样说明你已经成功了:
CONNECTED(00000003)
depth=1 /C=US/O=Entrust, Inc./OU=www.entrust.net/rpa isincorporated by reference/OU=(c) 2009 Entrust, Inc./CN=Entrust CertificationAuthority - L1C
verify error:num=20:unable to get local issuercertificate
verify return:0
……省略……
SSL-Session:
Protocol : TLSv1
Cipher : AES256-SHA
Session-ID:
Session-ID-ctx:
Master-Key:C7A47EED5E1F5……省略……369D4
Key-Arg : None
Start Time:1361862882
Timeout : 300 (sec)
Verify return code: 0 (ok)
在这里提醒一下,也许你会看到像我这样的提示:verify error:num=20:unable to get local issuercertificate
verify return:0
其实是没问题的。
另外去除标记的方法为,在viewDidApper中加入
int badge = [UIApplication sharedApplication].applicationIconBadgeNumber;
if(badge > 0)
{
badge--;
[UIApplication sharedApplication].applicationIconBadgeNumber = badge;
}
IOS推送