2016-06-20 4 views
0

Я искал ответ в течение 2 дней и до сих пор не получил ответа. Требование - наш сервер отправляет APNS на мой APP с некоторыми данными, и я должен правильно использовать данные в userDefaults для дальнейшего использования.Как обрабатывать удаленное уведомление в фоновом режиме IOS 8?

, что я сделал до сих пор, делает работу didReceiveRemoteNotification. Таким образом, это означает, что когда APP находится в фоновом режиме, я могу получить только процесс сохранения, когда пользователь получает предупреждение.

Я пытаюсь использовать didReceiveRemoteNotification: fetchCompletionHandler. , но я действительно не могу понять, как это работает. И делегата никогда не называют? Я читал документы разработчиков Apple, которые пока не помогают. Пожалуйста, может кто-нибудь дать мне пример кода. и особенно сказать мне, что именно APNS-контент будет. Большое спасибо

+0

Даже если вы используете didReceiveRemoteNotification: fetchCompletionHandler, вам все равно потребуется, чтобы пользователь использовал уведомление, чтобы вызвать метод. –

ответ

0

Я нашел решение, вот код:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 
//push notification 
UIUserNotificationSettings *settings=[UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeBadge|UIUserNotificationTypeSound|UIUserNotificationTypeAlert categories:nil]; 
[application registerUserNotificationSettings:settings]; 
[application registerForRemoteNotifications]; 
return YES; 
} 

- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken { 
//because our sever guy only wants a string, so i send him a string without brackets 
NSString * token = [[[deviceToken description] stringByReplacingOccurrencesOfString: @"<" withString: @""] stringByReplacingOccurrencesOfString: @">" withString: @""]; 
//because they only want the token to be uploaded after user login, so i save it in a variable. 
VAR_MANAGER.APNSToken = token; 
} 

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(nonnull NSDictionary *)userInfo fetchCompletionHandler:(nonnull void (^)(UIBackgroundFetchResult))completionHandler{ 
NSLog(@"userInfo: %@", userInfo); 
if (userInfo != nil) { 
    [self updateNotificationData:userInfo]; 
} 
completionHandler(UIBackgroundFetchResultNoData); 
} 

- (void)updateNotificationData: (NSDictionary *)userInfo { 
NSMutableArray *notificationDataArray = [NSMutableArray arrayWithArray:VAR_MANAGER.notificationDataArray]; 
//the app will add the userInfo into the array silently, but when user clicked on the notification alert, the delegate will run again, so I check if the previous added entry is the same as current one. 
for (int i = 0; i < notificationDataArray.count; i++) { 
    if ([userInfo isEqualToDictionary:notificationDataArray[i]]) return; 
} 
[notificationDataArray addObject:userInfo]; 
VAR_MANAGER.notificationDataArray = notificationDataArray; 
} 

VAR_MANAGER является NSObject я хранить все глобальные переменные, которые используются КВО, при изменении значения, он будет хранить в userDefault ,

//here is the userInfo i obtained from push notification, remember the content-available = 1, that is the most important part 
{ 
    aps =   { 
     alert = success; 
     badge = 1; 
     "content-available" = 1; 
     sound = default; 
    }; 
    status = 1; 
    "time_stamp" = "1466407030.006493"; 
} 

И наконец, благодаря всем поставщикам ответов.

0

Когда приложение в фоновом режиме, вы не можете сделать что-нибудь с уведомлением толчка. Вы можете выполнять дальнейшие операции, когда пользователь нажимает на него. я также столкнулся с тем же проблемами, но я должен был принял API во внимание при этом, что мы сделали

  • Мы создали один API
  • Это будет вызывать каждый раз, когда ваше приложение появляется на передний план
  • Тогда это будет проверка на конкретное уведомление - это ЧТЕНИЕ или НЕЗАВИСИМО, а затем в отношении этого ответа я изменил флаги NSUserDefaults

Мы можем иметь несколько сценариев для обработки таких ситуаций.

+0

Спасибо Pushkraj, с ответом Айхарудина и твоей, я выполнил эту функцию. –

+0

Приветствия !!! Добро пожаловать! Если бы это сработало для вас, вы можете поддержать мой ответ;) – Pushkraj

Смежные вопросы