#ios #objective-c #push-notification #apple-push-notifications #salesforce-marketing-cloud
#iOS #objective-c #push-уведомление #apple-push-уведомления #salesforce-маркетинг-облако
Вопрос:
Я заметил, что didReceiveNotificationResponse
этот метод вызывается, когда я повторно запускаю приложение в фоновом режиме с помощью прокрутки push-уведомления. Но он не вызывается, когда я закрываю приложение и повторно запускаю с помощью прокрутки push-уведомлений.
- (void)userNotificationCenter:(UNUserNotificationCenter *)center
didReceiveNotificationResponse:(UNNotificationResponse *)response
withCompletionHandler:(void (^)())completionHandler
{
// Sending analytics to my server
}
Я проверяю это через свой сервер аналитики, и я вижу, что все запуски в фоновом режиме с помощью прокрутки уведомлений отражаются, а другой — нет. В обоих случаях я использую один и тот же API, поэтому в идеале он должен обновляться.
Ниже приведен мой didFinishLaunchingWithOptions
метод:
-(BOOL)application:(UIApplication*) application didFinishLaunchingWithOptions:(NSDictionary*) launchOptions
{
dispatch_async(dispatch_get_main_queue(), ^(void){
//Run UI Updates
if (@available(iOS 10, *)) {
UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter];
center.delegate = self;
[center requestAuthorizationWithOptions:(UNAuthorizationOptionSound | UNAuthorizationOptionAlert | UNAuthorizationOptionBadge) completionHandler:^(BOOL granted, NSError * _Nullable error) {
if( !error ) {
// required to get the app to do anything at all about push notifications
dispatch_async(dispatch_get_main_queue(), ^{
[[UIApplication sharedApplication] registerForRemoteNotifications];
});
NSLog( @"Push registration success." );
} else {
NSLog( @"Push registration FAILED" );
NSLog( @"ERROR: %@ - %@", error.localizedFailureReason, error.localizedDescription );
NSLog( @"SUGGESTIONS: %@ - %@", error.localizedRecoveryOptions, error.localizedRecoverySuggestion );
}
}];
}
});
Добавление содержимого моего уведомления, которое я получаю от стороннего поставщика услуг (Salesforce):
{
"_h" = "V6bdjs7jjkqv/POIIIII";
"_m" = MjJhJkKkK;
"_mt" = 1;
"_r" = "9dsdsjkk-3344dd-4edd-ade33-jhdj999";
"_sid" = SFMC;
aps = {
alert = {
body = test;
subtitle = "Push Test";
title = "Push Test";
};
"mutable-content" = 1;
sound = default;
};
}
Я Remote Notifications
Background Modes
также включил from.
Комментарии:
1. В каком состоянии находилось приложение в момент нажатия на уведомление?
2. Оно не было запущено?
3. Вам нужно использовать опцию запуска, чтобы проверить, запущено приложение через уведомление или нет, и на основе этого просто проверьте данные уведомления.
4. Я видел пару ответов с этим решением. Но, чтобы заставить мою аналитику работать, мне нужно пройти
notification.response.notification.request
. Я не получу эти данныеlaunchOptions[UIApplicationLaunchOptionsRemoteNotificationKey]
, верно? Есть ли какой-нибудь способ получить это? Тогда я могу обработать это с помощью пользовательской функции.5. Что внутри
notification.response.notification.request
? Вы можете получить всю информацию о своем уведомлении внутри опции запуска.