【iOS】 推送服务的配置和实现

本文介绍了iOS推送服务的配置和实现过程,包括原理分析和功能实现。在原理部分,解释了app如何与Apple Push Notification Service (APNs)交互。功能实现部分详细阐述了配置app发布证书、推送服务器证书的步骤,以及在Xcode中设置代码以获取deviceToken。同时,提供了在终端中生成和验证APNs证书的命令。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

jpush http://docs.jpush.cn/display/dev/iOS

原文


前几天给app增加了推送服务,看了好多资料,最终实现了。在此整理一下,理清思路以便以后复习。

原理分析

================================

至于推送的原理,我大致提一下:

         大致如上图:

             1)、app 向苹果推送服务器(apns)注册,注册后获取deviceToken,

             2)、然后app 把这个deviceToken 发给我们自己的推送服务器,保存下来。

             3)、当需要推送时,我们就可以通过我们推送服务器,把需要的推送的目标设备的deviceToken、推送内容等等参数 发给apns,这样apns 就会把推送内容发给相应的设备。

             基本上,ios的推送就是这样的流程。

功能实现

==================================

实现这功能,要分两部分:

1、配置app发布证书,

2、配置我们的推送服务器用的推送证书

配置app发布证书

====================

需要到开发中心 iOS Provisioning Portal-》AppID栏把相应的app开通推送服务,最终结果如下图:

如果你不清楚什么是iOS Provisioning Portal什么是appid 那就看一下这个iOS应用的真机调试,为自己的app申请一个appid。

一般注册后appid中这个push notification是黄色的,并没有开通,需要配置。下面说说如何配置:

1、首先配置推送服务需要证书,跟配置真机测试时一样没,  先要用自己的mac电脑导出一个证书,

a、打开钥匙串访问

b、 生成Certificate Signing Request (CSR):

1 2

最终保存一个PushTest.certSigningRequest 保存于桌面

2、有了这个证书后,去开发者中心配置app的推送服务

3

a)在App IDs中选择自己对应的app ,然后发现 push Notification选项是黄色的,然后点击配置

注意:如果当初在添加appid时,使用了com.pan-apps.*  这种星号统配符的,将无法使用推送功能

b)然后配置推送服务

4

由于现在只是用于开发测试,就选择第一个项,点击configure

c)下面就需要上传我们在第一步中生成的PushTest.certSigningRequest了

89

可能需要点时间,现在已经生成成功了,再继续

10

11

点击下载,我这里名字是:aps_development.cer ,,然后你会发现,推送的状态变成了绿色了

12

d )然后需要在Provisioning栏中重新创建一个profile 用于真机测试或者打包ipa,如下:

13

完成后点击下载刚生成的profile文件,如下图:

下载之后双击导入到Xcode。这样我们的有推送功能的打包证书就配置好了,下面需要我们在工程种加入相关代码,

在我们的程序的Appdelegate 文件中加入下面代码:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
 
{
 
// Let the device know we want to receive push notifications
 
[[UIApplication sharedApplication] registerForRemoteNotificationTypes:
 
(UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound | UIRemoteNotificationTypeAlert)];
 
return YES;
 
}
 
/
 
- (void)application:(UIApplication*)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData*)deviceToken
 
{
 
NSLog(@"My token is: %@", deviceToken);
 
}
 
- (void)application:(UIApplication*)application didFailToRegisterForRemoteNotificationsWithError:(NSError*)error
 
{
 
NSLog(@"Failed to get token, error: %@", error);
 
}

然后在配置中code sign 字段中选择刚下载的profile 进行真机安装,有玩过真机测试的应该很清楚吧。

真机运行会获得deviceToken,

我的deviceToken如下:

现在前端的事情我们都完成了,下面剩下的就时配置一个推送服务器了。

===========================

配置我们的推送服务器用的推送证书 

1、首先导出p12文件

我们之前生成了PushTest.certSigningRequest文件,那么在钥匙串中会生成一个密钥,把它导出来

14

把它导出到桌面

15

2、生成php服务器连接苹果推送服务器APNS的证书

现在,我们已经有了3个文件:

PushTest.certSigningRequest

aps_development.cer

push.p12

我都是存在桌面的

现在我打开终端,cd到桌面,

a)、把.cer文件转换成.pem文件:

$ openssl x509 -in aps_development.cer -inform der -out PushChatCert.pem

     b)、把私钥Push.p12文件转换成.pem文件:这里需要输入3次密码

         $ openssl pkcs12 -nocerts -out PushChatKey.pem -in push.p12

         Enter Import Password:

         MAC verified OK

         Enter PEM pass phrase:

         Verifying – Enter PEM pass phrase:

c)、最后。把私钥和证书整合到一个.pem文件里:

$ cat PushChatCert.pem PushChatKey.pem > ck.pem

d)、为了测试证书是否工作,执行下面的命令

$ 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:

你会看到一个完整的输出,让你明白OpenSSL在后台做什么。如果连接是成功的,你可以键入一些字符。当你按下回车后,服务就会断开连接。如果 在建立连接时有问题,OpenSSL将会给你一个错误消息,

ck.pem文件就是我们需要得到php连接APNS 的文件,将ck.pem和push.php放入同一目录上传到服务器,push.php的代码如下:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

子木潇雨

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值