2015-03-10 2 views
1

Я разрабатываю приложение для обмена сообщениями для iOS.iOS Push код уведомления о приеме

Я сохраняю номера телефонов пользователей на сервере, но я не сохраняю имена контактов на стороне сервера.

Когда пользователь получает push-уведомление от сервера, сервер отправляет номер телефона и содержимое сообщения пользователю в полезной нагрузке уведомления. Я внедрил приложение : didReceiveRemoteNotification: fetchCompletionHandler способ показать локальное уведомление. Я ищу в локальной базе данных для phoneContactName: номер телефона и показываю локальное уведомление в формате:% phoneContactName%:% messageContent%

Однако препятствие в том, что я не сейчас, как выполнить этот код, когда приложение не бегать. Я пытался реализовать приложения: didFinishLaunchingWithOptions и проверить там

NSDictionary *userInfo = [launchOptions valueForKey:UIApplicationLaunchOptionsRemoteNotificationKey]; 

но этот код не вызывается.

Чтобы решить проблему, я хотел бы спросить вас, какую архитектурную модель мне следует использовать. Должен ли я сохранять имена контактов на стороне сервера, чтобы отправить уведомление. С сервера с именем контакта (пока мой сервер не знает имя контактного телефона) или есть способ выполнить код, когда приложение не работает?

P.S. Кроме того, я рассчитываю номер значка на стороне клиента при получении уведомления. Таким образом, решение по выполнению кода будет лучше, если это возможно.

Спасибо

ответ

-1

вы должны управлять условием для приложения активным или неактивным как

UIApplicationState state = [application applicationState]; 
if (state == UIApplicationStateActive) { 

    // Below Code Shows Message While Your Application is in Active State 



    else { 
//for app recieving notification in background and tap on notification 
} 
0

Я думаю, что ваша архитектура правильно. Ваша проблема сводится к одному из приложений, в котором находится ваше приложение.

Если ваше приложение завершено или никогда не было открыто, выдается вышеуказанный код в application:didFinishLaunchingWithOptions, если ваше приложение находится в фоновом режиме или приостановленное состояние, тогда будет вызываться метод ниже.

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo` 

Поэтому вам также необходимо реализовать это в делете приложения.

Я надеюсь, что это помогает

+0

Моя проблема заключается в том, что применение: didFinishLaunchingWithOptions не вызывается в моем случае. Я делаю что-то неправильно? –

+0

'application: didFinishLaunchingWithOptions' вызывается только тогда, когда приложение было прервано. Обычно это первый раз, когда приложение запускается при включении устройства или когда операционная система iOS убила процесс. Я предполагаю, что приложение открывается из приостановленного состояния, что означает, что 'application: didFinishLaunchingWithOptions' не будет вызываться. Если пользователь открывает ваше приложение из уведомления, пока приложение находится в этом состоянии, «приложение: didReceiveRemoteNotification» - это метод, который вызывается. –

+1

спасибо. Как я понял из соответствующего ответа, приложение: didFinishLaunchingWithOptions вызывается, когда пользователи нажимают значок. Мой сервер не знает имя phoneContactName и отправляет только номер телефона и messageContent в полезную нагрузку. Приложение: метод didReceiveRemoteNotification вызывается, когда приложение находится на переднем плане или в фоновом режиме, но ни этот метод, ни приложение: didFinishLaunchingWithOptions вызывается, когда приложение было приостановлено.Как заменить номер телефона на phoneContactName, если приложение было приостановлено? –

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