• iOS:APNS推送主要代码


    首先,在AppDelegate.m 中:

    1,注册通知

    //[objc] view plaincopyprint?在CODE上查看代码片派生到我的代码片
    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {  
        // Override point for customization after application launch.  
        ViewController *mainCtrl=[[ViewController alloc] init];  
        self.window.rootViewController=mainCtrl;  
          
        //注册通知  
        if ([UIDevice currentDevice].systemVersion.doubleValue<8.0) {  
            [[UIApplication sharedApplication] registerForRemoteNotificationTypes:(UIRemoteNotificationTypeAlert | UIRemoteNotificationTypeSound | UIRemoteNotificationTypeBadge)];  
        }  
        else {  
            [[UIApplication sharedApplication] registerForRemoteNotifications];  
            [[UIApplication sharedApplication] registerUserNotificationSettings:[UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeBadge|UIUserNotificationTypeSound|UIUserNotificationTypeAlert categories:nil]];  
        }  
          
        //判断是否由远程消息通知触发应用程序启动  
        if (launchOptions) {  
            //获取应用程序消息通知标记数(即小红圈中的数字)  
            NSInteger badge = [UIApplication sharedApplication].applicationIconBadgeNumber;  
            if (badge>0) {  
                //如果应用程序消息通知标记数(即小红圈中的数字)大于0,清除标记。  
                badge--;  
                //清除标记。清除小红圈中数字,小红圈中数字为0,小红圈才会消除。  
                [UIApplication sharedApplication].applicationIconBadgeNumber = badge;  
                NSDictionary *pushInfo = [launchOptions objectForKey:@"UIApplicationLaunchOptionsRemoteNotificationKey"];  
                  
                //获取推送详情  
                NSString *pushString = [NSString stringWithFormat:@"%@",[pushInfo  objectForKey:@"aps"]];  
                UIAlertView *alert=[[UIAlertView alloc] initWithTitle:@"finish Loaunch" message:pushString delegate:nil cancelButtonTitle:@"cancel" otherButtonTitles:nil, nil nil];  
                [alert show];  
            }  
        }  
          
        return YES;  

    2,注册通知后,获取device token

    - (void)application:(UIApplication *)app didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {  
        NSString *token = [NSString stringWithFormat:@"%@", deviceToken];  
        NSLog(@"My token is:%@", token);  
        //这里应将device token发送到服务器端  
    }  
      
    - (void)application:(UIApplication *)app didFailToRegisterForRemoteNotificationsWithError:(NSError *)error {  
        NSString *error_str = [NSString stringWithFormat: @"%@", error];  
        NSLog(@"Failed to get token, error:%@", error_str);  
    }  

    3,接收推送通知

    - (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo  
    {  
        [UIApplication sharedApplication].applicationIconBadgeNumber=0;  
        for (id key in userInfo) {  
            NSLog(@"key: %@, value: %@", key, [userInfo objectForKey:key]);  
        }  
        /* eg. 
        key: aps, value: { 
            alert = "U8fd9U662fU4e00U6761U6d4bU8bd5U4fe1U606f"; 
            badge = 1; 
            sound = default; 
        } 
         */  
        UIAlertView *alert=[[UIAlertView alloc] initWithTitle:@"remote notification" message:userInfo[@"aps"][@"alert"] delegate:nil cancelButtonTitle:@"cancel" otherButtonTitles:nil, nil nil];  
        [alert show];  
    }  

    注意:app 前台运行时,会调用 remote notification;app后台运行时,点击提醒框,会调用remote notification,点击app 图标,不调用remote notification,没反应;app 没有运行时,点击提醒框,finishLaunching   中,launchOptions 传参,点击app 图标,launchOptions 不传参,不调用remote notification。

  • 相关阅读:
    jQuery火箭图标返回顶部代码
    jQuery火箭图标返回顶部代码
    jQuery火箭图标返回顶部代码
    jQuery火箭图标返回顶部代码
    jQuery火箭图标返回顶部代码
    jQuery火箭图标返回顶部代码
    jQuery火箭图标返回顶部代码
    jQuery火箭图标返回顶部代码
    jQuery火箭图标返回顶部代码
    jQuery火箭图标返回顶部代码
  • 原文地址:https://www.cnblogs.com/XYQ-208910/p/5132759.html
Copyright © 2020-2023  润新知