Как отправить веб-запрос после удаленного Push-уведомления, полученного в Ios? - PullRequest
0 голосов
/ 08 марта 2019

Я хочу отправить автоматически простой запрос в веб-службу после того, как пользователь, получивший push-уведомление, щелкнет пользовательскую кнопку в самом уведомлении. На самом деле это работает, только если приложение находится на переднем плане или если я установил действие уведомления на:

UNNotificationActionOptionForeground

Но я не хочу открывать приложение после нажатия кнопки, поэтому мне нужна следующая опция:

UNNotificationActionOptionNone

Я уже установил фоновые режимы и уведомления в приложении. Само уведомление работает хорошо. enter image description here

enter image description here

пример конфигурации для уведомления:

-(void)register_notification{

    UNNotificationAction *Send_no_open_Action = [UNNotificationAction actionWithIdentifier:@"ACTION_NO_OPEN"
                                                                           title:@"Send request without open"
                                                                         options:UNNotificationActionOptionNone];
    UNNotificationAction *Send_open_Action = [UNNotificationAction actionWithIdentifier:@"ACTION_OPEN"
                                                                               title:@"Send request opening app"
                                                                             options:UNNotificationActionOptionForeground];
    NSArray *notificationActions = @[ Send_no_open_Action, Send_open_Action ];

    UNNotificationCategory* generalCategory = [UNNotificationCategory
                                               categoryWithIdentifier:@"GENERAL"
                                               actions:notificationActions
                                               intentIdentifiers:@[]
                                               options:UNNotificationCategoryOptionNone];

    UNUserNotificationCenter* center = [UNUserNotificationCenter currentNotificationCenter];
    [center setNotificationCategories:[NSSet setWithObjects:generalCategory, nil]];

    [[UIApplication sharedApplication] registerForRemoteNotifications];
}

тип обнаружения:

- (void)userNotificationCenter:(UNUserNotificationCenter *)center didReceiveNotificationResponse:(UNNotificationResponse *)response withCompletionHandler:(void (^)(void))completionHandler
{

    NSString *Category_identifier=[NSString stringWithFormat:@"%@",response.notification.request.content.categoryIdentifier];
    NSString *Action_identifier=[NSString stringWithFormat:@"%@",response.actionIdentifier];
    if([Action_identifier isEqualToString:@"ACCEPT_ACTION"]){

        [self nsurl_try];
    }

    if([Action_identifier isEqualToString:@"DECLINE_ACTION"]){

        [self nsurl_try];
    }
}

Я использую NSURlsession, потому что это совет от Apple:

-(void)nsurl_try{
    NSLog(@"NSURL START");
    // 1
    NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:@"%@%@",PATHSERVER,@"test_insert.php"]];
    NSURLSessionConfiguration *config = [NSURLSessionConfiguration defaultSessionConfiguration];
    NSURLSession *session = [NSURLSession sessionWithConfiguration:config];

    // 2
    NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:url];
    request.HTTPMethod = @"POST";

    // 3
    NSDictionary *dictionary = @{@"email": @"",@"password": @""};
    NSError *error = nil;
    NSData *data = [NSJSONSerialization dataWithJSONObject:dictionary
                                                   options:kNilOptions error:&error];

    if (!error) {
        // 4
        NSURLSessionUploadTask *uploadTask = [session uploadTaskWithRequest:request
                                                                   fromData:data completionHandler:^(NSData *data,NSURLResponse *response,NSError *error) {
                                                                       // Handle response here
                                                                       NSLog(@"response %@",response);
                                                                   }];

        // 5
        [uploadTask resume];
    }


}

Это полезная нагрузка уведомления:

aps, value: {
    alert =     {
        body = "notification body";
        title = "notification title";
    };
    category = GENERAL;
    "content-available" = 1;
}

Я не могу понять, чего не хватает, чтобы получить ответ от nsurl_try даже с опцией UNNotificationActionOptionNone. С этой опцией код останавливается на NSLog(@"NSURL START");. Кто-нибудь может мне помочь?

...