zoukankan      html  css  js  c++  java
  • iOS(本地通知与远程通知)

    iOS 推送通知有两种:本地推送、远程推送.

    本地推送 :  在不需要联网的情况下,由APP发出推送,常用于某一时刻的通知,如闹钟。本地通送有局限性在于当APP处于后台或者退出时就无法发出通知。

    远程推送:   APNs和第三方推送,第三方推送最终也需要APNs转发,

    本地推送实现
      注册通知: 

        

    float sysVer = [[UIDevice currentDevice].systemVersion floatValue];
    
        if (sysVer < 10) {
    
            //设置通知类型 弹框、脚标、声音
    
            UIUserNotificationSettings* setting = [UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeAlert | UIUserNotificationTypeBadge | UIUserNotificationTypeSound categories:nil];
    
            [[UIApplication sharedApplication] registerUserNotificationSettings:setting];
    
        }else{
    
            UNUserNotificationCenter* center =[UNUserNotificationCenter currentNotificationCenter];
    
            [center requestAuthorizationWithOptions:(UNAuthorizationOptionAlert | UNAuthorizationOptionBadge) completionHandler:^(BOOL granted, NSError * _Nullable error) {
    
                if (granted) {
    
                    NSLog(@"通知注册成功");
    
                }
    
            }];
    
        }
    

      

     

      发送通知:
        

          

    float sysVer = [[UIDevice currentDevice].systemVersion floatValue];
    
        if(sysVer < 10){
    
            UILocalNotification* local = [[UILocalNotification alloc] init];
    
            //给这些属性赋值才能让通知有特定的内容
    
            
    
            local.alertBody=@"航海王:One Piece";
    
            
    
            //特定的时间让显示出来()
    
            NSString* dateStr = @"2016-12-01 16:30:00";
    
            NSDateFormatter* dateFormatter = [[NSDateFormatter alloc]init];
    
            dateFormatter.dateFormat = @"yyyy-MM-dd hh:mm:ss";
    
            
    
            local.fireDate=[NSDate dateWithTimeIntervalSinceNow:60];
    
            
    
            //滑动解锁的文字(在推送通知信息的下面一小行字)
    
            
    
            local.alertAction =@" ";
    
            
    
            //有声音给声音,没声音用默认的
    
            
    
            local.soundName=@"UILocalNotificationDefaultSoundName";
    
            
    
            //设置图标右上角数字
    
            
    
            local.applicationIconBadgeNumber=1;
    
            
    
            //用户信息
    
            
    
            local.userInfo=@{@"name":@"航海王",@"content":@"One Piece",@"time":@"20161201"};
    
            
    
            //3:定制一个通知 
    
            
    
            [[UIApplication sharedApplication]scheduleLocalNotification:local];
    
            
    
        }else{
    
            UNMutableNotificationContent* content = [[UNMutableNotificationContent alloc] init];
    
            content.title = [NSString localizedUserNotificationStringForKey:@"Hello Title" arguments:nil];
    
            content.body = [NSString localizedUserNotificationStringForKey:@"Hello Body" arguments:nil];
    
            content.sound = [UNNotificationSound defaultSound];
    
            
    
            //设定通知时间
    
            UNTimeIntervalNotificationTrigger* trigger = [UNTimeIntervalNotificationTrigger triggerWithTimeInterval:5 repeats:NO];
    
            UNNotificationRequest* request = [UNNotificationRequest requestWithIdentifier:@"notificationIdentifier" content:content trigger:trigger];
    
            
    
            UNUserNotificationCenter* center = [UNUserNotificationCenter currentNotificationCenter];
    
            [center addNotificationRequest:request withCompletionHandler:^(NSError * _Nullable error) {
    
                
    
                
    
            }];
    
        }
    

    远程推送实现

      服务器向客户端发送推送的过程:

                      

       每个请求中都有设备令牌,APNs通过设备令牌去识别设备和APP,每次运行APP,都会向服务器发送设备令牌,服务器再使用设备令牌发送推送,只有当推送设置改变时设备令牌才会被改变 ,只有APNs 可以解码设备令牌.

        

      服务器与APNS 连接过程:

        

                                

    头晕,这个还是看官方的文档:https://developer.apple.com/library/prerelease/content/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/APNSOverview.html#//apple_ref/doc/uid/TP40008194-CH8-SW1

    信鸽 使用流程:

    1、配置真机调试证书, 推送测试证书 (度娘·······)

    2、注册iOS推送

     float sysVer = [[[UIDevice currentDevice] systemVersion] floatValue];
        if(sysVer < 8){
            [[UIApplication sharedApplication] registerForRemoteNotificationTypes:(UIRemoteNotificationTypeAlert | UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound)];
        }else{
    #if __IPHONE_OS_VERSION_MAX_ALLOWED >= _IPHONE80_
            UIMutableUserNotificationCategory *categorys = [[UIMutableUserNotificationCategory alloc] init];
            UIUserNotificationSettings *userSettings = [UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeBadge|UIUserNotificationTypeSound|UIUserNotificationTypeAlert
                                                                                         categories:[NSSet setWithObject:categorys]];
            [[UIApplication sharedApplication] registerUserNotificationSettings:userSettings];
            [[UIApplication sharedApplication] registerForRemoteNotifications];
    #endif
        }
    

    3、注册设备信息(deviceToken)

    - (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken { 
       //注册设备
    NSString * deviceTokenStr = [XGPush registerDevice: deviceToken];
         
       //打印获取的deviceToken的字符串
    NSLog(@"deviceTokenStr is %@",deviceTokenStr);
    }

    3、注册信鸽

    [XGPush startApp:@“10086” appKey:@"key"];

    //设置账户
    [XGPush setAccount:@"123456"];

    //推送统计

    - (void)application:(UIApplication*)application didReceiveRemoteNotification:(NSDictionary*)userInfo
    {
       [XGPush handleReceiveNotification:userInfo];
    }


     

     

  • 相关阅读:
    POJ 1659 Frogs' Neighborhood
    zoj 2913 Bus Pass(BFS)
    ZOJ 1008 Gnome Tetravex(DFS)
    POJ 1562 Oil Deposits (DFS)
    zoj 2165 Red and Black (DFs)poj 1979
    hdu 3954 Level up
    sgu 249 Matrix
    hdu 4417 Super Mario
    SPOJ (BNUOJ) LCM Sum
    hdu 2665 Kth number 划分树
  • 原文地址:https://www.cnblogs.com/air-liyan/p/6126559.html
Copyright © 2011-2022 走看看