2017-12-05 1 views
0

Objective-c의 새로운 기능입니다. 두 가지 조치가있는 대화식 원격 알림을 만들고 싶습니다. 하나는 'OK', 다른 하나는 'VIEW'입니다. 사용자가 APNS를 통해 알림을받을 때 그 사용자가 '확인'을 클릭하면 알림을 닫아야하고 사용자가 '보기'를 클릭하면 내 앱의 특정 페이지가 열립니다. 그게 전부 야.iOS에서 대화 형 원격 알림을 구현하는 방법 Objective-c

많은 웹 문서를 살펴보고 알림 페이로드의 개념을 파악했습니다. 하지만이 단계를 현명하게 구현할 수는 없습니다. 어느 누구라도 나를 도울 수 있습니까? 어떻게이 기능을 구현할 수 있습니까? 그리고 누구든지 중복 된 질문으로 표시하지 마십시오. 감사합니다

+0

https://stackoverflow.com/a/29118483/4601900 확인 –

+0

https://stackoverflow.com/questions/29484951/how-to-handle-action -buttons-in-push-notifications 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

@Swarup 나는 그걸 가지고 있지 않다. 사과 문서를 참조하십시오. –

+0

샘플 코드에서 몇 개의 액션 (버튼)이 있는지 이해할 수 없습니다. 너와 나에게도 말해 줄 수 있니? 그래서 그것은 나를 위해 매우 도움이 될 것입니다. 감사합니다 – Swarup

관련 문제