Я хочу отправить автоматически простой запрос в веб-службу после того, как пользователь, получивший push-уведомление, щелкнет пользовательскую кнопку в самом уведомлении. На самом деле это работает, только если приложение находится на переднем плане или если я установил действие уведомления на:
UNNotificationActionOptionForeground
Но я не хочу открывать приложение после нажатия кнопки, поэтому мне нужна следующая опция:
UNNotificationActionOptionNone
Я уже установил фоновые режимы и уведомления в приложении. Само уведомление работает хорошо.
пример конфигурации для уведомления:
-(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");
.
Кто-нибудь может мне помочь?