从iOS8.0开始推送功能的实现在不断改变,功能也在不断增加,iOS10又出来了一个推送插件的开发(见最后图),废话不多说直接上代码:
#import- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { // Override point for customization after application launch. // 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
- (void)registerNotification{
UNNotificationAction *action1 = [UNNotificationAction actionWithIdentifier:@"action1" title:@"策略1行为1" options:UNNotificationActionOptionForeground];
UNTextInputNotificationAction *action2 = [UNTextInputNotificationAction actionWithIdentifier:@"action2" title:@"策略1行为2" options:UNNotificationActionOptionDestructive textInputButtonTitle:@"textInputButtonTitle" textInputPlaceholder:@"textInputPlaceholder"];
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");
}];
[[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);
}
- (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);
}
还有推送插件开发: 类似iOS tody widget插件开发
本文已被整理到了《iOS推送教程》,欢迎大家学习阅读。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持考高分网。



