溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

iOS iOS8注冊通知

發(fā)布時間:2020-05-29 18:23:56 來源:網(wǎng)絡 閱讀:2022 作者:周衛(wèi)斌123 欄目:移動開發(fā)

目前分為四個推送:用戶推送,本地推送,遠程推送,地理位置推送。

iOS iOS8注冊通知

用戶推送

我們先開始講這個用戶推送,我們要使用之前必須先注冊這個推送,用戶要允許這個程序進行推送

注冊過程:


[objc] view plaincopyiOS iOS8注冊通知iOS iOS8注冊通知

  1. if (IS_IOS8) {  

  2.         //1.創(chuàng)建消息上面要添加的動作(按鈕的形式顯示出來)  

  3.         UIMutableUserNotificationAction *action = [[UIMutableUserNotificationAction alloc] init];  

  4.         action.identifier = @"action";//按鈕的標示  

  5.         action.title=@"Accept";//按鈕的標題  

  6.         action.activationMode = UIUserNotificationActivationModeForeground;//當點擊的時候啟動程序  

  7.         //    action.authenticationRequired = YES;  

  8.         //    action.destructive = YES;  

  9.           

  10.         UIMutableUserNotificationAction *action2 = [[UIMutableUserNotificationAction alloc] init];  

  11.         action2.identifier = @"action2";  

  12.         action2.title=@"Reject";  

  13.         action2.activationMode = UIUserNotificationActivationModeBackground;//當點擊的時候不啟動程序,在后臺處理  

  14.         action.authenticationRequired = YES;//需要解鎖才能處理,如果action.activationMode = UIUserNotificationActivationModeForeground;則這個屬性被忽略;  

  15.         action.destructive = YES;  

  16.           

  17.         //2.創(chuàng)建動作(按鈕)的類別集合  

  18.         UIMutableUserNotificationCategory *categorys = [[UIMutableUserNotificationCategory alloc] init];  

  19.         categorys.identifier = @"alert";//這組動作的唯一標示,推送通知的時候也是根據(jù)這個來區(qū)分  

  20.         [categorys setActions:@[action,action2] forContext:(UIUserNotificationActionContextMinimal)];  

  21.           

  22.         //3.創(chuàng)建UIUserNotificationSettings,并設置消息的顯示類類型  

  23.         UIUserNotificationSettings *notiSettings = [UIUserNotificationSettings settingsForTypes:(UIUserNotificationTypeBadge | UIUserNotificationTypeAlert | UIRemoteNotificationTypeSound) categories:[NSSet setWithObjects:categorys, nil nil]];  

  24.         [application registerUserNotificationSettings:notiSettings];  

  25.           

  26.     }else{  

  27.         [application registerForRemoteNotificationTypes: UIRemoteNotificationTypeAlert | UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound];  

  28.     }  





[objc] view plaincopyiOS iOS8注冊通知iOS iOS8注冊通知

  1. - (void)application:(UIApplication *)application didRegisterUserNotificationSettings:(UIUserNotificationSettings *)notificationSettings  

  2. {  

  3. //    UIUserNotificationSettings *settings = [application currentUserNotificationSettings];  

  4. //    UIUserNotificationType types = [settings types];  

  5. //    //只有5跟7的時候包含了 UIUserNotificationTypeBadge  

  6. //    if (types == 5 || types == 7) {  

  7. //        application.applicationIconBadgeNumber = 0;  

  8. //    }  

  9.     //注冊遠程通知  

  10.     [application registerForRemoteNotifications];  

  11. }  



我們現(xiàn)在僅僅是注冊了通知的設置,還要注冊推送通知的行為,在iOS8中,行為能直接在推送消息進行,如回復消息,拒絕消息等總結就是三個方法進行注冊

iOS iOS8注冊通知


我們如何能進行這些行為,首先我們需注冊這些行為。

  • Actions


    [objc] view plaincopyiOS iOS8注冊通知iOS iOS8注冊通知


  1. UIMutableUserNotificationAction *acceptAction = [[UIMutableUserNotificationAction alloc] init];  

  2. acceptAction.identifier = @"RickAction";  

  3. acceptAction.title = @"Accept";  

  4. acceptAction.activationMode = UIUserNotificationActivationModeBackground;  

  5. acceptAction.destructive = NO;  

  6. acceptAction.authenticationRequired = NO;  

Categories[objc] view plaincopy我們需要注意這個UIUserNotificationActionContextDefault,如果我們使用這個,我們會得到這個推送行為,Maybe和Accept我們還可以使用UIUserNotificationActionContextMinimal得到的是Decline和Accept行為
  1. UIMutableUserNotificationCategory *inviteCategory = [[UIMutableUserNotificationCategory alloc] init];  

  2. inviteCategory.identifier = @"INVITE_CATEGORY";  

  3. [inviteCategory setActions:@[acceptAction] forContext:UIUserNotificationActionContextDefault];  

Settings在這些行為注冊之后,我們加上之前提到的推送設置就完成了注冊推送的這個流程了[objc] view plaincopy遠程推送遠程推送,所有消息大小不超過2KB,我們獲取遠程推送的json格式的消息,解析這個消息就是我們的遠程推送了:[html] view plaincopy若要使用遠程推送,滿足兩個條件:一、用戶需要調用注冊用戶推送registerUserNotificationSettings;二、在info.plist文件中UIBackgroundModes必須包含遠程通知。[objc] view plaincopy[objc] view plaincopy[objc] view plaincopyiOS7通知代理方法后來又增加了本地通知的代理方法iOS8的推送代理方法只有兩個了[objc] view plaincopy地理位置推送這個推送是新的API才有的特性,必須配合CLLocation定位一起使用。[objc] view plaincopy如果沒有開啟Core Location 那么上面的didReceiveLocalNotification不會被調用最后再總結一下,整個推送流程我覺得是這樣子的,先注冊推送,然后推送消息,客戶端接收推送消息,執(zhí)行推送行為。如果有錯誤,還請在文章下面評論,歡迎指正。
  1. //Location Notification  

  2.     CLLocationManager *locMan = [[CLLocationManager alloc] init];  

  3.     locMan.delegate = self;  

  4.     [locMan requestWhenInUseAuthorization];  

  5.   

  6. #pragma mark - CLLocationManager  

  7.   

  8. - (void)locationManager:(CLLocationManager *)manager didChangeAuthorizationStatus:(CLAuthorizationStatus)status  

  9.   

  10. {  

  11.     BOOL canUseLocationNotifications = (status == kCLAuthorizationStatusAuthorizedWhenInUse);  

  12.     if (canUseLocationNotifications) {  

  13.         [self startShowLocationNotification];  

  14.     }  

  15. }  

  16. - (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification  

  17.   

  18. {  

  19.     CLRegion *region = notification.region;  

  20.     if (region) {  

  21.     }  

  22. }  

  23.   

  24. - (void)startShowLocationNotification  

  25.   

  26. {  

  27.     CLLocationCoordinate2D local2D ;  

  28.     local2D.latitude = 123.0;  

  29.     local2D.longitude = 223.0;  

  30.     UILocalNotification *locNotification = [[UILocalNotification alloc] init];  

  31.     locNotification.alertBody = @"你接收到了";  

  32.     locNotification.regionTriggersOnce = YES;  

  33.     locNotification.region = [[CLCircularRegion alloc] initWithCenter:local2D radius:45 identifier:@"local-identity"];  

  34.     [[UIApplication sharedApplication] scheduleLocalNotification:locNotification];  

  35. }  

  1. - (void)application:(UIApplication *)application handleActionWithIdentifier:(NSString *)identifier forLocalNotification:(UILocalNotification *)notification completionHandler:(void (^)())completionHandler  

  2. {  

  3. }  

  4.   

  5. - (void)application:(UIApplication *)application handleActionWithIdentifier:(NSString *)identifier forRemoteNotification:(NSDictionary *)userInfo completionHandler:(void (^)())completionHandler  

  6. {  

  7. }  

  8.   

  9. - (void)application:(UIApplication *)application handleActionWithIdentifier:(NSString *)identifier forLocalNotification:(UILocalNotification *)notification completionHandler:(void (^)())completionHandler  

  10. {  

  11.     if ([identifier isEqualToString:@"RickAction"]) {  

  12.         [self handleAcceptActionWithNotification:notification];  

  13.     }  

  14.     completionHandler();  

  15. }  

  16.   

  17. - (void)handleAcceptActionWithNotification:(UILocalNotification*)notification  

  18. {  

  19. }  

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

  2.      

  3. }  

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

  2.     NSString *token=[NSString stringWithFormat:@"%@",deviceToken];  

  3.     token=[token stringByReplacingOccurrencesOfString:@"<" withString:@""];  

  4.     token=[token stringByReplacingOccurrencesOfString:@">" withString:@""];  

  5.     token=[token stringByReplacingOccurrencesOfString:@" " withString:@""];  

  6.       

  7. }  

  1. <span style="font-family: Helvetica, Arial, Geneva, sans-serif;">[[UIApplication sharedApplication] registerForRemoteNotifications];</span>  

  1. {  

  2.     “aps”: {  

  3.         "content-available": 1,  

  4.         "alert": "This is the alert text",  

  5.         "badge": 1,  

  6.         "sound": "default"  

  7.     }  

  8. }  

  1. NSSet *categories = [NSSet setWithObjects:inviteCategory, nil nil];  

  2. UIUserNotificationType  types = UIUserNotificationTypeBadge | UIUserNotificationTypeSound | UIUserNotificationTypeAlert ;  

  3. UIUserNotificationSettings  *mySettings  = [UIUserNotificationSettings settingsForTypes:types categories:categories];  

  4. [[UIApplication sharedApplication] registerUserNotificationSettings:mySettings];  


向AI問一下細節(jié)

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內容。

AI