国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > iOS > 正文

iOS10全新推送功能實現代碼

2020-07-26 03:14:00
字體:
來源:轉載
供稿:網友

從iOS8.0開始推送功能的實現在不斷改變,功能也在不斷增加,iOS10又出來了一個推送插件的開發(見最后圖),廢話不多說直接上代碼: 

#import <UserNotifications/UserNotifications.h> - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { // Override point for customization after application launch.  /* APP未啟動,點擊推送消息的情況下 iOS10遺棄UIApplicationLaunchOptionsLocalNotificationKey,使用代理UNUserNotificationCenterDelegate方法didReceiveNotificationResponse:withCompletionHandler:獲取本地推送 */// NSDictionary *localUserInfo = launchOptions[UIApplicationLaunchOptionsLocalNotificationKey];// if (localUserInfo) {// NSLog(@"localUserInfo:%@",localUserInfo);// //APP未啟動,點擊推送消息// } NSDictionary *remoteUserInfo = launchOptions[UIApplicationLaunchOptionsRemoteNotificationKey]; if (remoteUserInfo) { NSLog(@"remoteUserInfo:%@",remoteUserInfo); //APP未啟動,點擊推送消息,iOS10下還是跟以前一樣在此獲取 } [self registerNotification]; return YES;}
 

注冊推送方法的改變:

新增庫 #import <UserNotifications/UserNotifications.h>  推送單列UNUserNotificationCenter 等API 

- (void)registerNotification{ /* identifier:行為標識符,用于調用代理方法時識別是哪種行為。 title:行為名稱。 UIUserNotificationActivationMode:即行為是否打開APP。 authenticationRequired:是否需要解鎖。 destructive:這個決定按鈕顯示顏色,YES的話按鈕會是紅色。 behavior:點擊按鈕文字輸入,是否彈出鍵盤 */ UNNotificationAction *action1 = [UNNotificationAction actionWithIdentifier:@"action1" title:@"策略1行為1" options:UNNotificationActionOptionForeground]; /*iOS9實現方法 UIMutableUserNotificationAction * action1 = [[UIMutableUserNotificationAction alloc] init]; action1.identifier = @"action1"; action1.title=@"策略1行為1"; action1.activationMode = UIUserNotificationActivationModeForeground; action1.destructive = YES; */  UNTextInputNotificationAction *action2 = [UNTextInputNotificationAction actionWithIdentifier:@"action2" title:@"策略1行為2" options:UNNotificationActionOptionDestructive textInputButtonTitle:@"textInputButtonTitle" textInputPlaceholder:@"textInputPlaceholder"]; /*iOS9實現方法 UIMutableUserNotificationAction * action2 = [[UIMutableUserNotificationAction alloc] init]; action2.identifier = @"action2"; action2.title=@"策略1行為2"; action2.activationMode = UIUserNotificationActivationModeBackground; action2.authenticationRequired = NO; action2.destructive = NO; action2.behavior = UIUserNotificationActionBehaviorTextInput;//點擊按鈕文字輸入,是否彈出鍵盤 */  UNNotificationCategory *category1 = [UNNotificationCategory categoryWithIdentifier:@"Category1" actions:@[action2,action1] minimalActions:@[action2,action1] intentIdentifiers:@[@"action1",@"action2"] options:UNNotificationCategoryOptionCustomDismissAction]; // UIMutableUserNotificationCategory * category1 = [[UIMutableUserNotificationCategory alloc] init]; // category1.identifier = @"Category1"; // [category1 setActions:@[action2,action1] forContext:(UIUserNotificationActionContextDefault)];  UNNotificationAction *action3 = [UNNotificationAction actionWithIdentifier:@"action3" title:@"策略2行為1" options:UNNotificationActionOptionForeground]; // UIMutableUserNotificationAction * action3 = [[UIMutableUserNotificationAction alloc] init]; // action3.identifier = @"action3"; // action3.title=@"策略2行為1"; // action3.activationMode = UIUserNotificationActivationModeForeground; // action3.destructive = YES;  UNNotificationAction *action4 = [UNNotificationAction actionWithIdentifier:@"action4" title:@"策略2行為2" options:UNNotificationActionOptionForeground]; // UIMutableUserNotificationAction * action4 = [[UIMutableUserNotificationAction alloc] init]; // action4.identifier = @"action4"; // action4.title=@"策略2行為2"; // action4.activationMode = UIUserNotificationActivationModeBackground; // action4.authenticationRequired = NO; // action4.destructive = NO;  UNNotificationCategory *category2 = [UNNotificationCategory categoryWithIdentifier:@"Category2" actions:@[action3,action4] minimalActions:@[action3,action4] intentIdentifiers:@[@"action3",@"action4"] options:UNNotificationCategoryOptionCustomDismissAction]; // UIMutableUserNotificationCategory * category2 = [[UIMutableUserNotificationCategory alloc] init]; // category2.identifier = @"Category2"; // [category2 setActions:@[action4,action3] forContext:(UIUserNotificationActionContextDefault)];   [[UNUserNotificationCenter currentNotificationCenter] setNotificationCategories:[NSSet setWithObjects:category1,category2, nil]]; [[UNUserNotificationCenter currentNotificationCenter] requestAuthorizationWithOptions:UNAuthorizationOptionBadge | UNAuthorizationOptionSound | UNAuthorizationOptionAlert completionHandler:^(BOOL granted, NSError * _Nullable error) { NSLog(@"completionHandler"); }]; /*iOS9實現方法 UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:(UIUserNotificationTypeAlert|UIUserNotificationTypeBadge|UIUserNotificationTypeSound) categories:[NSSet setWithObjects: category1,category2, nil]]; [[UIApplication sharedApplication] registerUserNotificationSettings:settings]; */ [[UIApplication sharedApplication] registerForRemoteNotifications];   [UNUserNotificationCenter currentNotificationCenter].delegate = self;}

代理方法的改變:

 一些本地和遠程推送的回調放在了同一個代理方法

#pragma mark -- (void)application:(UIApplication *)application didRegisterUserNotificationSettings:(UIUserNotificationSettings *)notificationSettings NS_AVAILABLE_IOS(8_0) __TVOS_PROHIBITED{ NSLog(@"didRegisterUserNotificationSettings");}- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken NS_AVAILABLE_IOS(3_0){ NSLog(@"deviceToken:%@",deviceToken); NSString *deviceTokenSt = [[[[deviceToken description]   stringByReplacingOccurrencesOfString:@"<" withString:@""]  stringByReplacingOccurrencesOfString:@">" withString:@""]  stringByReplacingOccurrencesOfString:@" " withString:@""]; NSLog(@"deviceTokenSt:%@",deviceTokenSt);}- (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error NS_AVAILABLE_IOS(3_0){ NSLog(@"didFailToRegisterForRemoteNotificationsWithError:%@",error);}/*iOS9使用方法- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo NS_DEPRECATED_IOS(3_0, 10_0, "Use UserNotifications Framework's -[UNUserNotificationCenterDelegate willPresentNotification:withCompletionHandler:] or -[UNUserNotificationCenterDelegate didReceiveNotificationResponse:withCompletionHandler:] for user visible notifications and -[UIApplicationDelegate application:didReceiveRemoteNotification:fetchCompletionHandler:] for silent remote notifications"){ }*/- (void)userNotificationCenter:(UNUserNotificationCenter *)center willPresentNotification:(UNNotification *)notification withCompletionHandler:(void (^)(UNNotificationPresentationOptions))completionHandler{ NSLog(@"willPresentNotification:%@",notification.request.content.title);  // 這里真實需要處理交互的地方 // 獲取通知所帶的數據 NSString *notMess = [notification.request.content.userInfo objectForKey:@"aps"]; }- (void)userNotificationCenter:(UNUserNotificationCenter *)center didReceiveNotificationResponse:(UNNotificationResponse *)response withCompletionHandler:(void (^)())completionHandler{ //在沒有啟動本App時,收到服務器推送消息,下拉消息會有快捷回復的按鈕,點擊按鈕后調用的方法,根據identifier來判斷點擊的哪個按鈕 NSString *notMess = [response.notification.request.content.userInfo objectForKey:@"aps"]; NSLog(@"didReceiveNotificationResponse:%@",response.notification.request.content.title);// response.notification.request.identifier}//遠程推送APP在前臺- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler{ NSLog(@"didReceiveRemoteNotification:%@",userInfo);}/*- (void)application:(UIApplication *)application handleActionWithIdentifier:(nullable NSString *)identifier forRemoteNotification:(NSDictionary *)userInfo completionHandler:(void(^)())completionHandler NS_DEPRECATED_IOS(8_0, 10_0, "Use UserNotifications Framework's -[UNUserNotificationCenterDelegate didReceiveNotificationResponse:withCompletionHandler:]") __TVOS_PROHIBITED{ }*//*// 本地通知回調函數,當應用程序在前臺時調用- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification NS_DEPRECATED_IOS(4_0, 10_0, "Use UserNotifications Framework's -[UNUserNotificationCenterDelegate willPresentNotification:withCompletionHandler:] or -[UNUserNotificationCenterDelegate didReceiveNotificationResponse:withCompletionHandler:]") __TVOS_PROHIBITED{ NSLog(@"didReceiveLocalNotification:%@",notification.userInfo);   // 這里真實需要處理交互的地方 // 獲取通知所帶的數據 NSString *notMess = [notification.userInfo objectForKey:@"aps"]; UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"本地通知(前臺)"    message:notMess    delegate:nil   cancelButtonTitle:@"OK"   otherButtonTitles:nil]; [alert show];  // 更新顯示的徽章個數 NSInteger badge = [UIApplication sharedApplication].applicationIconBadgeNumber; badge--; badge = badge >= 0 ? badge : 0; [UIApplication sharedApplication].applicationIconBadgeNumber = badge;  // 在不需要再推送時,可以取消推送 [FirstViewController cancelLocalNotificationWithKey:@"key"];}- (void)application:(UIApplication *)application handleActionWithIdentifier:(nullable NSString *)identifier forLocalNotification:(UILocalNotification *)notification completionHandler:(void(^)())completionHandler NS_DEPRECATED_IOS(8_0, 10_0, "Use UserNotifications Framework's -[UNUserNotificationCenterDelegate didReceiveNotificationResponse:withCompletionHandler:]") __TVOS_PROHIBITED{ //在非本App界面時收到本地消息,下拉消息會有快捷回復的按鈕,點擊按鈕后調用的方法,根據identifier來判斷點擊的哪個按鈕,notification為消息內容 NSLog(@"%@----%@",identifier,notification); completionHandler();//處理完消息,最后一定要調用這個代碼塊}*/

 還有推送插件開發: 類似iOS tody widget插件開發

 

本文已被整理到了《iOS推送教程》,歡迎大家學習閱讀。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 绥滨县| 桐城市| 涞源县| 崇礼县| 凤阳县| 正蓝旗| 南郑县| 甘德县| 津南区| 宾阳县| 大冶市| 五河县| 灵璧县| 行唐县| 渝中区| 中宁县| 黑龙江省| 岱山县| 铜梁县| 彰化市| 大洼县| 明溪县| 渝北区| 博野县| 工布江达县| 正定县| 聂拉木县| 赤峰市| 宁国市| 常宁市| 丰原市| 武强县| 勃利县| 天长市| 高平市| 孝昌县| 拉孜县| 闽侯县| 武鸣县| 昌宁县| 科尔|