0

グーグルでリンゴの文書に従った後も、リモート(プッシュ)通知でアクションボタンを取得できませんが、ローカル通知ローカル通知のために同じコードを実行します。リモート通知iOS 10(目的C)の操作ボタンがIIViewDeckControllerに来ていない

- (void)triggerAndRegisterNotification { 

    if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"10.0")) { 
    // create actions 
     #if XCODE_VERSION_GREATER_THAN_OR_EQUAL_TO_8 
    UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter]; 
    // create actions 
    UNNotificationAction *acceptAction = [UNNotificationAction actionWithIdentifier:@"com.AG.yes" 
                       title:@"Save" 
                      options:UNNotificationActionOptionForeground]; 
    UNNotificationAction *declineAction = [UNNotificationAction actionWithIdentifier:@"com.AG.no" 
                       title:@"Decline" 
                      options:UNNotificationActionOptionDestructive]; 
    UNNotificationAction *snoozeAction = [UNNotificationAction actionWithIdentifier:@"com.AG.snooze" 
                       title:@"Snooze" 
                      options:UNNotificationActionOptionDestructive]; 
    NSArray *notificationActions = @[ acceptAction, declineAction, snoozeAction ]; 

    // create a category 
    UNNotificationCategory *inviteCategory = [UNNotificationCategory categoryWithIdentifier:CYLInviteCategoryIdentifier actions:notificationActions intentIdentifiers:@[] options:UNNotificationCategoryOptionNone]; 

    NSSet *categories = [NSSet setWithObject:inviteCategory]; 

    // registration 
    [center setNotificationCategories:categories]; 
    #endif 
    } else if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"8.0")) { 
    // create actions 
    UIMutableUserNotificationAction *acceptAction = 
    [[UIMutableUserNotificationAction alloc] init]; 
    acceptAction.identifier = @"com.AG.yes"; 
    acceptAction.title = @"Accept"; 
    acceptAction.activationMode = 
    UIUserNotificationActivationModeBackground; 
    acceptAction.destructive = NO; 
    acceptAction.authenticationRequired = NO; //If YES requies 
    passcode, but does not unlock the device 

    UIMutableUserNotificationAction *declineAction = 
    [[UIMutableUserNotificationAction alloc] init]; 
    declineAction.identifier = @"com.AG.no"; 
    acceptAction.title = @"Decline"; 
    acceptAction.activationMode = 
    UIUserNotificationActivationModeBackground; 
    declineAction.destructive = YES; 
    acceptAction.authenticationRequired = NO; 

    UIMutableUserNotificationAction *snoozeAction = 
    [[UIMutableUserNotificationAction alloc] init]; 
    snoozeAction.identifier = @"com.AG.snooze"; 
    acceptAction.title = @"Snooze"; 
    snoozeAction.activationMode = 
    UIUserNotificationActivationModeBackground; 
    snoozeAction.destructive = YES; 
    snoozeAction.authenticationRequired = NO; 

    // create a category 
    UIMutableUserNotificationCategory *inviteCategory = 
    [[UIMutableUserNotificationCategory alloc] init]; 
    inviteCategory.identifier = CYLInviteCategoryIdentifier; 
    NSArray *notificationActions = @[ acceptAction, declineAction, 
    snoozeAction ]; 

    [inviteCategory setActions:notificationActions 
    forContext:UIUserNotificationActionContextDefault]; 
    [inviteCategory setActions:notificationActions 
    forContext:UIUserNotificationActionContextMinimal]; 

    // registration 
    NSSet *categories = [NSSet setWithObject:inviteCategory]; 
    UIUserNotificationType types = UIUserNotificationTypeBadge | 
    UIUserNotificationTypeSound | UIUserNotificationTypeAlert; 
    UIUserNotificationSettings *settings = 
    [UIUserNotificationSettings settingsForTypes:types 
    categories:categories]; 
    [[UIApplication sharedApplication] 
    registerUserNotificationSettings:settings]; 
} 
/// 2. request authorization for localNotification 

     [self registerNotificationSettingsCompletionHandler:^(BOOL 
              granted, 
     NSError * _Nullable error) { 
         if (granted) { 
         NSLog(@"request authorization succeeded!"); 
     [[UIApplication sharedApplication] 
        registerForRemoteNotifications]; 
     } 
    }]; 

**COMMENTED CODE FOR LOCAL NOTIFICATION** 

    // if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"10.0")) { 
    //  #if XCODE_VERSION_GREATER_THAN_OR_EQUAL_TO_8 
    //   Deliver the notification at 08:30 everyday 
    // NSDateComponents *dateComponents = [[NSDateComponents 
                alloc] init]; 
    // dateComponents.hour = 8; 
    // dateComponents.minute = 30; 
    // UNCalendarNotificationTrigger *trigger = 
    // [UNCalendarNotificationTrigger 
       triggerWithDateMatchingComponents:dateComponents 
       repeats:YES];   
    //  UNMutableNotificationContent *content = 
       [[UNMutableNotificationContent alloc] init]; 
     //  content.title = [NSString 
     localizedUserNotificationStringForKey:@"AG said:" 
     arguments:nil]; 
     //  content.body = [NSString 
     localizedUserNotificationStringForKey:@"Hello Tom!Get up, 
      let's play with Jerry!" arguments:nil]; 
     //  content.sound = [UNNotificationSound 
             defaultSound]; 
     //  content.categoryIdentifier = 
          CYLInviteCategoryIdentifier; 
     /// 4. update application icon badge number 
     //  content.badge = @([[UIApplication sharedApplication] 
            applicationIconBadgeNumber] + 1); 
     //  content.launchImageName = @"any string is ok,such as 
                微博@iOS程序犭袁"; 
     // Deliver the notification in five seconds. 
     //*** Terminating app due to uncaught exception 
      'NSInternalInconsistencyException', reason: 'time interval 
      must be at least 60 if repeating' 
     //  UNTimeIntervalNotificationTrigger *trigger = 
            [UNTimeIntervalNotificationTrigger 
     // triggerWithTimeInterval:60.0f repeats:YES]; 
     //  UNNotificationRequest *request = [ 
       UNNotificationRequest 
         requestWithIdentifier:@"FiveSecond" 
    //   content:content trigger:trigger]; 
    //  UNUserNotificationCenter *center = 
       [UNUserNotificationCenter currentNotificationCenter]; 
    /// 3. schedule localNotification,The delegate must be set before 
       the application returns from 
       applicationDidFinishLaunching:. 
    // center.delegate = self; 
    //  [center addNotificationRequest:request 
       withCompletionHandler:^(NSError * _Nullable error) { 
    //   if (!error) { 
    //    NSLog(@"add NotificationRequest succeeded!"); 
    //   } 
    //  }]; 
    //#endif 
    // } else { 
    /// 3. schedule localNotification 
    //  UILocalNotification *localNotification = 
         [[UILocalNotification alloc] init]; 
    //  localNotification.fireDate = [NSDate 
          dateWithTimeIntervalSinceNow:5.f]; 
    //  localNotification.alertTitle = @"AG said:"; 
     //  localNotification.alertBody = @"Hello Tom!Get up, 
     let's play with Jerry!"; 
    //  localNotification.alertAction = @"play with Jerry"; 
    //Identifies the image used as the launch image when the user 
        taps (or slides) the action button (or slider). 
    //  localNotification.alertLaunchImage = 
             @"LaunchImage.png"; 
     //  localNotification.userInfo = @{ @"CategoryIdentifier" 
         : CYLInviteCategoryIdentifier }; 
    //   
    //  localNotification.timeZone = [NSTimeZone 
           defaultTimeZone]; 
    //repeat evey minute, 0 means don't repeat 
    //  localNotification.repeatInterval = NSCalendarUnitMinute; 
    /// 4. update application icon badge number 
    //  localNotification.applicationIconBadgeNumber = 
       [[UIApplication sharedApplication] 
        applicationIconBadgeNumber] + 1; 
    //  [[UIApplication sharedApplication] 
        scheduleLocalNotification:localNotification]; 
    //   
    // } 

    } 

/// 3. THIS IS THE METHOD TO AUTHORIZE THE NOTIFICATION 


- (void)registerNotificationSettingsCompletionHandler:(void (^)(BOOL 
      granted, NSError *__nullable error))completionHandler; { 
/// 2. request authorization for localNotification 
if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"10.0")) { 
#if XCODE_VERSION_GREATER_THAN_OR_EQUAL_TO_8 
    UNUserNotificationCenter *center = [UNUserNotificationCenter 
    currentNotificationCenter]; 
    [center requestAuthorizationWithOptions: 
      (UNAuthorizationOptionBadge | UNAuthorizationOptionSound 
            | UNAuthorizationOptionAlert) 
          completionHandler:completionHandler]; 
#endif 
     } else if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"8.0")) 
    { 
    //    UIUserNotificationSettings 
      *userNotificationSettings = [UIUserNotificationSettings 
      settingsForTypes:(UIUserNotificationTypeAlert | 
      UIUserNotificationTypeSound | 
         UIUserNotificationTypeBadge) 
    //                           
           categories:nil]; 
    //    UIApplication *application = [UIApplication 
           sharedApplication]; 
    //    [application 
      registerUserNotificationSettings:userNotificationSettings]; 
    //FIXME: 
    // !completionHandler ?: completionHandler(granted, error); 
    } 
    } 
**AND IN** APPDELEGATE.m 
- (BOOL)application:(UIApplication *)application 
didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{ 

if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"10.0")) { 
#if XCODE_VERSION_GREATER_THAN_OR_EQUAL_TO_8 
    /// schedule localNotification, the delegate must be set before 
// the application returns fromapplicationDidFinishLaunching:. 
    UNUserNotificationCenter *center = [UNUserNotificationCenter 
currentNotificationCenter]; 
    center.delegate = self; 
#endif 
    } 
[self triggerAndRegisterNotification]; 
} 

私はテスト目的でiphone 7を使用しています。 これを解決してください。

ペイロードJSON

   aps =  { 
    alert =   { 
     "artist_id" = 16912; 
     body = "Kurt Rosenwinkel is playing at Joe Henderson Lab at 
     SFJAZZ Center"; 
     eventid = 149687805; 
     sound = default; 
     timestamp = "810b6035-e4d7-4722-81db-7455e81a48fe"; 
     title = "Kurt Rosenwinkel"; 
     tracks = "itunes,spotify"; 
     type = 2; 
    }; 
    category = "com.wcities.notification"; 
    }; 

は、私は私のアプリで設定したカテゴリ識別子をチェックする事前に感謝もペイロードJSONの場合と同じです。

UPDATE

私はデバッグや子供であるコントローラを表示するコードの上から、私はアクションボタンとプッシュ通知を取得していますが、いくつかの場所でdid finish launching後、私は私の窓のルートビューコントローラを変更していた点に来たようIIViewDeckControllerの この行にコメントしたら、プッシュ通知にアクションボタンが表示されます。なぜ私はそれが起こっているのか全くわかりません。なぜなら、自分の知る限り、ビューコントローラを設定したり表示したりプッシュしたりするとプッシュ通知に影響を与えてはならないからです。

ここに間違いがある場合は教えてください。上記のコードとシナリオをすべて共有しました。 おかげ

答えて

0

私はdockviewライブラリを使用していますように、ドックビューコントローラに追加されたviewcontrollerには、setting categories as nilに関連するコードがいくつかありました。リモート通知でアクションボタンを取得できなかったため、この余分なコードを削除してすべて正常に動作しています。私はまだこのコードを書いたその愚かな人を見つけています。ヘルプを付ける

-1

IOSの10通知作業と - (無効)userNotificationCenter:(UNUserNotificationCenter *)中央willPresentNotification:(UNNotification *)通知withCompletionHandler:(無効(^)(UNNotificationPresentationOptionsオプション))completionHandler { //コード completionHandler (UNNotificationPresentationOptionAlert); }

- (無効)userNotificationCenter:(UNUserNotificationCenter *)中央didReceiveNotificationResponse:(UNNotificationResponse *)応答withCompletionHandler:(無効(^)())completionHandler { }