2017-12-05 5 views
0

Objective-cの新機能です。私は2つのアクションを持つ対話型のリモート通知を作成したい、1つは「OK」と呼ばれ、もう1つは「VIEW」と呼ばれます。ユーザーが「OK」をクリックするとAPNSを介して通知を受け取ると、その通知は消されなければならず、ユーザーが「VIEW」をクリックするとその時間内に自分のアプリケーションの特定のページが開きます。それでおしまい。iOSでインタラクティブなリモート通知を実装する方法Objective-c

私は多くのWeb文書を読んで、通知ペイロードの概念を取り上げました。しかし、私はこのステップを賢明に実装することができません。誰でも私を助けることができます、どのように私はこの機能を実装することができます。そして誰でも重複した質問としてマークしてください。おかげ

+0

https://stackoverflow.com/a/29118483/4601900チェック –

+0

https://stackoverflow.com/questions/29484951/how-to-handle-actionプッシュ通知ボタン https://makeapppie.com/2017/01/09/actions-in-push-notifications/ –

+0

@Prashant、提供されたドキュメントは、iOSの上位バージョンに適用されます。 iOS10,11のように? – Swarup

答えて

1

注:私はあなたがアクションを処理する方法プッシュ

- (void) registerPushNotification { 

    UIUserNotificationType type = UIUserNotificationTypeAlert | UIUserNotificationTypeBadge | UIUserNotificationTypeSound; 
    UIUserNotificationSettings *setting = [UIUserNotificationSettings settingsForTypes:type categories:[NSSet setWithObjects:[self createActionNotificationsSettingForApproveBID],[self createActionNotificationsSettingForCancelingRequest ], nil]]; 
    [[UIApplication sharedApplication] registerUserNotificationSettings:setting]; 
    [[UIApplication sharedApplication] registerForRemoteNotifications]; 

} 


- (UIMutableUserNotificationCategory *) createActionNotificationsSettingForApproveBID { 

    UIMutableUserNotificationAction *actionApproveBID = [[UIMutableUserNotificationAction alloc] init]; 
    [actionApproveBID setIdentifier:KNotificatoin_IDENTIFER_ACTION_APPROVEBID]; 
    actionApproveBID.activationMode = UIUserNotificationActivationModeForeground; 
    actionApproveBID.title = @"Approve"; 
    actionApproveBID.authenticationRequired = true; 
    [actionApproveBID setDestructive: false]; 


    UIMutableUserNotificationAction *actionCancelDialog = [[UIMutableUserNotificationAction alloc] init]; 
    [actionCancelDialog setIdentifier:KNotificatoin_IDENTIFER_ACTION_DETAILS]; 
    actionCancelDialog.activationMode = UIUserNotificationActivationModeForeground; 
    actionCancelDialog.title = @"Details"; 
    actionCancelDialog.authenticationRequired = true; 
    [actionCancelDialog setDestructive: false]; 

    UIMutableUserNotificationCategory *cateogoryApproveBID = [[UIMutableUserNotificationCategory alloc] init]; 
    cateogoryApproveBID.identifier = KNotificatoin_IDENTIFIER_CATEGORY_NEW_BID; 
    [cateogoryApproveBID setActions:@[actionApproveBID,actionCancelDialog] forContext:UIUserNotificationActionContextDefault]; 
    [cateogoryApproveBID setActions:@[actionApproveBID,actionCancelDialog] forContext:UIUserNotificationActionContextMinimal]; 

    return cateogoryApproveBID; 
} 

- (UIMutableUserNotificationCategory *) createActionNotificationsSettingForCancelingRequest { 

    UIMutableUserNotificationAction *actionGetMoreBids = [[UIMutableUserNotificationAction alloc] init]; 
    [actionGetMoreBids setIdentifier:KNotificatoin_IDENTIFER_ACTION_APPROVEBID]; 
    actionGetMoreBids.activationMode = UIUserNotificationActivationModeForeground; 
    actionGetMoreBids.title = @"Get more bids"; 
    actionGetMoreBids.authenticationRequired = true; 
    [actionGetMoreBids setDestructive: false]; 


    UIMutableUserNotificationAction *actionEditRequest = [[UIMutableUserNotificationAction alloc] init]; 
    [actionEditRequest setIdentifier:KNotificatoin_IDENTIFER_ACTION_EDIT_REQUEST]; 
    actionEditRequest.activationMode = UIUserNotificationActivationModeForeground; 
    actionEditRequest.title = @"Edit request"; 
    actionEditRequest.authenticationRequired = true; 
    [actionEditRequest setDestructive: false]; 

    UIMutableUserNotificationCategory *categoryCancelRequest = [[UIMutableUserNotificationCategory alloc] init]; 
    categoryCancelRequest.identifier = KNotificatoin_IDENTIFER_ACTION_MORE_BIDS; 
    [categoryCancelRequest setActions:@[actionGetMoreBids,actionEditRequest] forContext:UIUserNotificationActionContextDefault]; 
    [categoryCancelRequest setActions:@[actionGetMoreBids,actionEditRequest] forContext:UIUserNotificationActionContextMinimal]; 

    return categoryCancelRequest; 
} 

のためにその場所

登録であなたを使用KNotificatoin_IDENTIFIER_CATEGORY_NEW_BIDのようなカテゴリにここに私自身の定数を使用する必要がありますか?

- (void) application:(UIApplication *)application handleActionWithIdentifier:(NSString *)identifier forRemoteNotification:(NSDictionary *)userInfo completionHandler:(void (^)())completionHandler { 
    NSLog(@" APPLICATION STATUS %ld",(long)[UIApplication sharedApplication].applicationState); 

    if ([[[userInfo objectForKey:@"aps"] objectForKey:kCategory] isEqualToString:KNotificatoin_IDENTIFIER_CATEGORY_NEW_BID]){ 
     if ([identifier isEqualToString:KNotificatoin_IDENTIFER_ACTION_APPROVEBID]) { 
      NSMutableDictionary *dictData = [NSMutableDictionary dictionaryWithDictionary:userInfo]; 
      [dictData setObject:@17 forKey:kType]; 

      if ([[UIApplication sharedApplication] applicationState] == UIApplicationStateActive || self.isApplicationIsInActiveState) { 
       [self saveDictionaryForPushActiveState:dictData]; 
      } else { 
       [self navigatateAsPerPush:dictData allowInActiveState:NO]; 
      } 
     } 
     else if ([identifier isEqualToString:KNotificatoin_IDENTIFER_ACTION_DETAILS]) { 
      NSLog(@"You chose action 2."); 
      if ([[UIApplication sharedApplication] applicationState] == UIApplicationStateActive || self.isApplicationIsInActiveState) { 
       [self saveDictionaryForPushActiveState:userInfo]; 
      } else { 
       [self navigatateAsPerPush:userInfo allowInActiveState:NO]; 
      } 
     } 
    } else if ([[[userInfo objectForKey:@"aps"] objectForKey:kCategory] isEqualToString:KNotificatoin_IDENTIFIER_NOTIFICATION_REQUEST]){ 

     NSMutableDictionary *dictData = [NSMutableDictionary dictionaryWithDictionary:userInfo]; 

     if ([identifier isEqualToString:KNotificatoin_IDENTIFER_ACTION_EDIT_REQUEST]) { 
      NSLog(@"You chose action 1."); 
      [dictData setObject:@16 forKey:kType]; 
      if ([[UIApplication sharedApplication] applicationState] == UIApplicationStateActive || self.isApplicationIsInActiveState) { 
       [self saveDictionaryForPushActiveState:dictData]; 
      } else { 
       [self navigatateAsPerPush:dictData allowInActiveState:NO]; 
      } 

     } 
     else if ([identifier isEqualToString:KNotificatoin_IDENTIFER_ACTION_MORE_BIDS]) { 
      NSLog(@"You chose action 2."); 
      if ([[UIApplication sharedApplication] applicationState] == UIApplicationStateActive || self.isApplicationIsInActiveState) { 
       [self saveDictionaryForPushActiveState:dictData]; 
      } else { 
       [self navigatateAsPerPush:dictData allowInActiveState:NO]; 
      } 

     } 

    } 

    if (completionHandler) { 
     completionHandler(); 
    } 
} 

が、それはあなたに役立つことを願う

+1

ありがとう。 JSONを提供していただけますか? – Swarup

+0

@スワップ私はそれを持っていません。あなたはAppleの文書を参照してください –

+0

私はあなたのサンプルコードでいくつのアクション(ボタン)を理解していない。私にも名前を教えてもらえますか?それは私にとって非常に役立つでしょう。ありがとう – Swarup

関連する問題