открыть специальное приложение из кнопки действия уведомления на IOS?

Я работаю над частью функциональности приложения IOS (с целью C) с локальными уведомлениями, используя структуру UserNotification. К настоящему времени я смог запланировать уведомление, и оно отображается правильно. Когда я достигаю проблемы с активными типами уведомлений (с категориями и действиями), мне удается отобразить уведомление с действием. На самом деле я мог правильно реализовать UNUserNotificationCenterDelegate и проверить, вызывался ли метод didReceiveNotificationResponse, и это было так. Но моя проблема в том, что я пытался открыть приложение карт оттуда, используя схему URL, подобную этой

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

NSString * mapsURL = @"http://maps.apple.com/?saddr=35.6813023,139.7640529&daddr=33.4657901,132.6201192";

//if ( [response.actionIdentifier isEqualToString:@"GoToMaps" ]) {

    //Display the map with URL
    [[UIApplication sharedApplication] openURL:[NSURL URLWithString:mapsURL] options:@{}  completionHandler:^(BOOL success) {
        NSLog(@"BOOL value: %d",success);
    }];
//}

completionHandler();
}

ПРИМЕЧАНИЕ. Я тестирую это приложение в симуляторе.

Но это не работает, потому что, когда приложение находится в фоновом режиме, это дает мне 0 на success arg. Но когда я пробую это с помощью кнопки в моем приложении (приложение на переднем плане), это действительно работает. Итак, мой вопрос:

Есть ли способ открыть другое приложение (откуда уведомление было запланировано) с помощью кнопок действий в уведомлении, а не только карты, я имею в виду любое приложение, даже если оно закрыто или находится в фоновом режиме?

Я сказал закрытое приложение, но в документации Apple говорится, что когда пользователь выбирает и выполняет действие, система запускает приложение в фоновом режиме и уведомляет общий объект UNUserNotificationCenter, который уведомляет своего делегата. Так что он не будет по-настоящему закрыт (не запущен).


person Rafael    schedule 19.10.2019    source источник
comment
Как долго я исследовал. Я обнаружил, что невозможно открыть приложение с URL-схемой из другого, если оно не находится на переднем плане.   -  person Rafael    schedule 20.10.2019


Ответы (1)


Я только что нашел решение. В тот момент, когда вы определяете действие «Уведомление», вы устанавливаете идентификатор действия, заголовок и параметры. Аргумент options должен иметь параметр UNNotificationActionOptionForeground, который, согласно документации Apple, заставит приложение открываться на переднем плане, а затем в методе didReceiveNotificationResponse, если у вас есть openURL, вы будете перенаправлены в приложение или Safari в соответствии со схемой URL.

person Rafael    schedule 21.10.2019