记录iOS的消息推送

来源:互联网 发布:当代古琴大师知乎 编辑:程序博客网 时间:2024/05/02 11:55

最近在做iOS的推送,顺便整理记录一下,首先看下消息的流程,一图胜千言:

Provider将目的设备的唯一标识及消息体通过APNS传递到用户的手中。

那么,Provider如何获取到用户的设备唯一标识(DeviceToken)呢,看下图:


注,app首先要活的接受通知的权限。图中红色框区域是服务端开发需要处理的,可以通过第三方服务完成,如极光推送,百度推送等。

接下来,落实到代码上:

1、获取DeviceToken,注册远程通知,并指定类型,首次注册会提示申请权限。

    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions     {         ...                  [application registerForRemoteNotificationTypes:UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeAlert | UIRemoteNotificationTypeSound];         return YES;     } 

2、如果获取成功后,会回调这个方法完成与Provider的通信

  - (void)application:(UIApplication *)app didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {      NSLog(@"Receive DeviceToken: %@", deviceToken);      [APService registerDeviceToken:deviceToken]; //极光}
如果失败则回调下面方法

- (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *) error {    NSLog(@"did Fail To Register For Remote Notifications With Error: %@", error);}


对于远程通知 ,分两种情况讨论:

1、应用处于UIApplicationStateActive时,即应用处于开启状态时,接收到远程通知 下面这个方法会被响应

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler {处理userInfo}


2、应用处于关闭时,

①如果收到通知后点击icon进入,则无任何函数被触发

②如果是点击远程通知那一条目进入,则,有两个地方会或得到推送的内容

首先,

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{......NSDictionary* userInfo = [launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey];}

其次,下面函数也会被调用(NS_AVAILABLE_IOS(7_0) __TVOS_PROHIBITED;)
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler {处理userInfo}

对于本地通知:

1、应用处于UIApplicationStateActive时,即应用处于开启状态时,接收到本地通知 下面这个方法会被响应

- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification{    NSDictionary *NotDict = notification.userInfo;}

2、应用处于关闭时,

①如果收到通知后点击icon进入,则无任何函数被触发

②如果是点击本地通知那一条目进入,则,仅有一个地方会或得到推送的内容

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{   ......  UILocalNotification *theNotification = [launchOptions objectForKey:UIApplicationLaunchOptionsLocalNotificationKey];}


0 0
原创粉丝点击