IOS 推送

  • (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;
    }

  • (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] 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] 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;
    }

  • (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开发之获取最上层 Window


下一篇:iOS开发之注册推送通知权限