iOS开发,推送消息 steps

概述:推送过程简介


一、App启动过程中,使用UIApplication::registerForRemoteNotificationTypes函数与苹果的APNS服务器通信,发出注册远程推送的申请。若注册成功,回调函数application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken 会被触发,App可以得到deviceToken,该token就是一个与设备相关的字符串.

二、App获取到DeviceToken后,将DeviceToken发送给自己的服务端。

三、服务端拿到DeviceToken以后,使用证书文件,向苹果的APNS服务器发起一个SSL连接。连接成功之后,发送一段JSON串,该JSON串包含推送消息的类型及内容。

四、苹果的APNS服务器得到JSON串以后,向App发送通知消息,使得App的回调函数application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo被调用,App从userInfo中即可得到推送消息的内容。


1、前期准备

在学习推送开发之前,开发者需要两样东西,(1)、iPhone真机,因为模拟器不支持推送(2)、付费的开发者账号。

2、新建项目,选择Single View Application模板。

3、注册通知(Registration Notification)

(1)在AppDelegate文件的application:didFinishLaunchingWithOptions:方法中添加“注册推送”的代码。

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

    // Register for Remote Notifications

    if (iOS8_OR_LATER) {

        [[UIApplication sharedApplication] registerForRemoteNotifications];

        UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes: UIUserNotificationTypeAlert | UIUserNotificationTypeSound categories:nil];

        [[UIApplication sharedApplication] registerUserNotificationSettings:settings];

    } else {

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

    }

}

这样iOS操作系统就知道该应用程序将需要处理推送消息方面的内容。


通过上面的代码,iOS操作系统与苹果的APNS服务器联系,并且获得一个device token,这个device token用于区别运行该App的每一个硬件设备。这个device token是用于你自己的服务器给该设备发送推送信息,具体的实现方式就是你的服务器将device token以及需要推送的信息打包发送给苹果的服务器,然后苹果的APNS服务器负责将推送的内容分发到对应的设备。


需要了解的是device token在每一个App上面都不一样,并且在同一个App上面会因为时间改变而不同。所以苹果推荐在每一次App启动的时候将device token发送到你的服务器后台,以确保device token是最新的。


4、判断注册通知失败还是成功

- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {

    NSLog(@"Did Register for Remote Notifications with Device Token (%@)", deviceToken);

}

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

    NSLog(@"Did Fail to Register for Remote Notifications");

    NSLog(@"%@, %@", error, error.localizedDescription);

     

}

5、收到通知消息,进行消息处理

如果收到了通知事件,那么UIApplicationDelegate接口中的application:didReceiveRemoteNotification将会执行,你可以在这里获取推送的信息,然后做出相应的处理。

- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken

{

    NSString *deviceTokenStr = [[[[deviceToken description]

                                  stringByReplacingOccurrencesOfString: @"<" withString: @""]

                                 stringByReplacingOccurrencesOfString: @">" withString: @""]

                                stringByReplacingOccurrencesOfString: @" " withString: @""];

    NSLog(@"去除device token中的空格和<>字符:%@",deviceTokenStr);//仅仅是我参与的项目中这样处理,见仁见智

}

6、制作证书,使用真机进行推送消息开发

这时候如果运行项目,那么application:didFailToRegisterForRemoteNotificationsWithError将会执行,因为模拟器不支持推送,需要制作证书,使用真机做推送开发。


7、SSL Certificate证书制作

在苹果的开发者中心,创建App Id

推送的证书必须使用精确(Explicit)的App ID,而不能使用模糊(Wildcard) App ID。

如下图所示,

143519_vMC2_2361492.png

勾选上Push Notifications服务,如下图所示,

143601_fS3n_2361492.png

然后按照创建证书的流程,使用创建的App ID,因为需要截图较多,此处不再赘述。


转载于:https://my.oschina.net/u/2361492/blog/472895

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值