UIApplicationDelegate中与apns推送相关的代理方法

提到的所有方法都是在UIApplicationDelegate中,默认实现这个代理的类是AppDelegate

获取token

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions中调用对应的方法向苹果服务器获取本机的deviceToken,不同版本有不同的方法.
获取成功后,苹果异步返回deviceToken,回调- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken返回给程序.

发送获取deviceToken请求

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    if ([UIDevice currentDevice].systemVersion.doubleValue <= 8.0) {
        // iOS8以下,不包括ios8
        UIRemoteNotificationType type = UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound | UIRemoteNotificationTypeAlert;
        // 当用户第一次启动程序时就获取deviceToke
        // 该方法在iOS8以及过期了
        // 只要调用该方法, 系统就会自动发送UDID和当前程序的Bunle ID到苹果的APNs服务器
        [application registerForRemoteNotificationTypes:type];
    }else
    {
        // iOS8及其以上,包括IOS8
        UIUserNotificationType type = UIUserNotificationTypeBadge | UIUserNotificationTypeAlert | UIUserNotificationTypeSound;
        
        UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:type categories:nil];
        // 注册通知类型
        [application registerUserNotificationSettings:settings];
        
        // 申请试用通知
        [application registerForRemoteNotifications];
    }
    return YES;
}

接收返回的deviceToken

- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken{
    NSLog(@"token:%@", deviceToken);
}

获取推送的内容

获取推送的内容有三种情况:

  • 程序在前台时,ios回调方法- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo返回provider(服务器推送消息的程序)推送到app的json数据.
  • 程序在后台时,provider推送到app的数据会弹出来,当用户点击后,在代理方法- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptionslaunchOptions参数里面.
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    // 1.取出数据
    NSDictionary *userInfo = launchOptions[UIApplicationLaunchOptionsRemoteNotificationKey];
}
  • 程序在后台时,推送的消息中包含{"aps":{"content-available":1}},表示开启slient.这时app需要在info.plist中配置 此时,推送的消息不必用户点击,app中的- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler会直接被调用,不过该方法需]在IOS7及其以后才被支持. 需要注意的是,苹果官方说的是调用此方法提供少量时间供app在后台进行下载操作,而且执行完以后要调用一个方法
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler{
    NSLog(@"didReceive_complete:%@",userInfo);
    completionHandler(UIBackgroundFetchResultNewData);//做完事情后回调方法
}

详情请仔细阅读apple apns文档

转载于:https://my.oschina.net/chzhuo/blog/509332

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值