远程推送

APNS的推送机制
首先我们看一下苹果官方给出的对iOS推送机制的解释。如下图
Provider就是我们自己程序的后台服务器,APNS是Apple Push Notification Service的缩写,也就是苹果的推送服务器。


上图可以分为三个阶段:
第一阶段:应用程序的服务器端把要发送的消息、目的iPhone的标识打包,发给APNS。
第二阶段:APNS在自身的已注册Push服务的iPhone列表中,查找有相应标识的iPhone,并把消息发送到iPhone。
第三阶段:iPhone把发来的消息传递给相应的应用程序,并且按照设定弹出Push通知。

APNS推送通知的详细工作流程
下面这张图是说明APNS推送通知的详细工作流程:

根据图片我们可以概括一下:
1、应用程序注册APNS消息推送。
2、iOS从APNS Server获取devicetoken,应用程序接收device token。
3、应用程序将device token发送给程序的PUSH服务端程序。
4、服务端程序向APNS服务发送消息。
5、APNS服务将消息发送给iPhone应用程序。


准备工作
首先要有一台苹果的设备,模拟器是不支持推送的,所以你需要一台iphone,ipod touch或者ipad。
我们的客户端与苹果服务器之间和我们自己的服务器与苹果服务器之间都需要证书来进行链接。下面我们来开始进入证书的制作过程。

用开发者账号登陆苹果开发者中心
选择证书......

选择ios证书创建

创建推送证书的过程中需要一个CSR文件和一个app ID,
先创建一个CSR文件,打开钥匙串

选择存储到磁盘,本地桌面

起个名字



完成

创建app ID,点击加号添加新的app  ID

注册app ID---continue

这时的推送状态为可配置的,创建完推送证书后就会变成激活状态,点击submit

submit后继续点done,就创建完成了.

现在CSR和app ID都准备好了,就开始创建远程推送证书


选择证书,点击加号添加(创建证书)

选择证书类型,上面是开发证书,下面是发布证书,选择完毕点击continue

选上相对应的app ID,然后continue

下一步需要一个CSR文件,这里直接点continue

点击choose file选中之前创建好的CSR文件然后generate

下载下来后点击done就创建完毕了

证书创建完毕后,下载下来双击添加进入钥匙串就可以了.

这个时候在回去app ID就可以看到推送状态已经是激活状态了

剩下的就是添加设备和创建配置文件了,创建完配置文件后双击就更新到xcode里面了,然后按下图的步骤设置一下就可以了.

还要注意bundle identifier也要保持一致

最后就是要注意证书的创建,工程的创建等等是不是在本机操作的,如果不是就不能直接使用证书,需要导出P12文件

五 从钥匙串访问中导出秘钥

打开钥匙串访问,找到我们的专用秘钥(专用秘钥的名称就是我们在最开始生成CSR请求的时候填写的常用名)

右键选择导出


 
导出的文件名我们叫做Push

在这里需要输入一个密码来对文件进行加密。这里我们选择abcabc,当然你也可以自己选择是什么,但是这个密码必须要铭记,切记!


 

 

然后输入你电脑的密码,点击允许。这样我们就在桌面上生成了一个Push.p12文件。到此为止,我们在桌面上一共生成了三个文件。一个是CSR请求文件,一个是aps_development .cer的SSL证书文件,还有一个刚才生成的Push.p12秘钥文件。

双击这些p12文件导入钥匙串就行了.

 


建立我们的推送的项目(注意BundleIdentifier必须和我们推送应用的App id一致

在AppDelegate里didFinishLaunchingWithOptions函数里写

- (BOOL)application:(UIApplication *)applicationdidFinishLaunchingWithOptions:(NSDictionary *)launchOptions

{

……

  //推送的形式:标记,声音,提示

   [[UIApplication sharedApplication] registerForRemoteNotificationTypes: UIRemoteNotificationTypeBadge |UIRemoteNotificationTypeSound | UIRemoteNotificationTypeAlert];

   return YES;

}

 

- (void)application:(UIApplication *)applicationdidRegisterForRemoteNotificationsWithDeviceToken:(NSData *)pToken {

   NSLog(@"regisger success:%@",pToken);

   //注册成功,将deviceToken保存到应用服务器数据库中

}

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo{

    // 处理推送消息

    NSLog(@"userinfo:%@",userInfo);

   

    NSLog(@"收到推送消息:%@",[[userInfo objectForKey:@"aps"] objectForKey:@"alert"]);

}

- (void)application:(UIApplication *)applicationdidFailToRegisterForRemoteNotificationsWithError:(NSError *)error {

   NSLog(@"Registfail%@",error);

}

我们运行程序的时候会有提示,说我们的程序要发送推送通知。

 



 


 

 



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值