2016-08-03 3 views
0

Моего толчок уведомление работает правильно в обычном случае, но у меня есть проблема с следующим случаем:После получения уведомления, как я могу получить полезную нагрузку при нажатии на значок приложения?

1), когда мое приложение удалить из фона и получить уведомление о & нажмите на значке приложения, то я хочу, чтобы подтолкнуть контроллер представления и отображение полезной нагрузку данных в этом представлении.

2), когда мое приложение в фоновом режиме и получать уведомления & нажмите на значок приложения, то я хочу, чтобы подтолкнуть вид контроллера и отображения полезной нагрузки данных в этой точке зрения контроллера.

следующий мой USERINFO

{ 
    aps =  { 
     alert = "Call from rohan panchal"; 
     appointmentId = 220; 
     badge = 0; 
     "call_token" = "T1==cGFydG5lcl9pZD00NTI1ODY1MiZzaWc9MzM1MmM0M2E2MjkwN2JiYWMzNjgyNjk0MjFlZWMyNWEzNTZmZmM3MjpzZXNzaW9uX2lkPTJfTVg0ME5USTFPRFkxTW41LU1UUTNNREl3TVRBd01qVXdOWDV3WXpCRFMyWTRlR2xhUWpGdU1YbFpNamhvV0hoNFVHTi1VSDQmY3JlYXRlX3RpbWU9MTQ3MDIwMTAwMiZyb2xlPXB1Ymxpc2hlciZub25jZT0xNDcwMjAxMDAyLjUyMDM0NDAzNjQzMjMmZXhwaXJlX3RpbWU9MTQ3MDgwNTgwMg=="; 
     doctorId = 238; 
     "doctor_country" = US; 
     "doctor_name" = "John smith"; 
     patientId = 239; 
     "patient_country" = US; 
     "patient_name" = "Lottry patel"; 
     sessionId = "2_MX40NTI1ODY1Mn5-MTQ3MDIwMTAwMjUwNX5wYzBDS2Y4eGlaQjFuMXlZMjhoWHh4UGN-UH4"; 
     sound = default; 
    }; 
} 

после моего кода.

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 

// when i remove app from background & click on notification then following code run. 
     NSDictionary *notificationPayload = launchOptions[UIApplicationLaunchOptionsRemoteNotificationKey]; 

     if(notificationPayload) 
     { 
       NSLog(@"%@",notificationPayload); 
       WebViewController *DashBoard = [[WebViewController alloc]initWithNibName:@"WebViewController" bundle:nil]; 
       self.navcntrl=[[UINavigationController alloc]initWithRootViewController:DashBoard]; 

     } 

     else 
     { 

       DoctorMenuViewController *DoctorVC = [[DoctorMenuViewController alloc]initWithNibName:@"DoctorMenuViewController" bundle:nil]; 
      self.navcntrl=[[UINavigationController alloc]initWithRootViewController:DoctorVC]; 
     } 

} 

Когда я получил уведомление, вызывается следующий метод.

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

    NSLog(@"%@",userInfo); 

    WebViewController *DashBoard = [[WebViewController alloc]initWithNibName:@"WebViewController" bundle:nil]; 

    [self.navcntrl pushViewController:DashBoard animated:YES]; 


} 

Помогите. Помогите оценить.

+0

Пожалуйста, поделитесь своими USERINFO, в основном вы должны проверить с WebAPI ребятами, что USERINFO они посылают затем с помощью навигационного контроллера навигации к желаемому контроллеру – gurmandeep

+0

@gurmandeep, пожалуйста, проверьте информацию о пользователе. Я обновил свой вопрос. –

+0

В каком поле вы нуждаетесь и на каком контроллере вы хотите перемещаться. Подберите его - (void) application: (UIApplication *) application didReceiveRemoteNotification: (NSDictionary *) userInfo { Состояние UIApplicationState = [[UAppication sharedApplication] applicationState]; если (состояние == UIApplicationStateBackground || состояние == UIApplicationStateInactive) {// получения уведомления, когда приложение находится в фоновом режиме // открыть контроллер вида вы ожидали } еще если (состояние == UIApplicationStateActive) {// уведомление получено, когда ваше приложение находится на переднем плане // ничего не делать } }} – gurmandeep

ответ

1

Полезная нагрузка толчок уведомление состоит из:

предупреждения - предупреждения строки и действия

значок

звук

Доступный контент

Ключевой контент - это новая функция, и именно эта клавиша позволяет молчать.

Для включения вы также должны добавить удаленное оповещение в качестве своего UIBackgroundModes для приложения, как описано здесь.

Это то, что происходит, когда контент-доступный в полезной нагрузке:

Если приложение приостановлено, система приведения его в фоновый режим

Если приложение было убито пользователем, ничего не происходит, и приложение остается в Не работает Ознакомьтесь с изменениями состояния приложения.

Потенциальный является ловушкой:

Вы разрешаете с содержанием доступного = 1. Но, НЕПРАВИЛЬНО отключиться с content-available = 0. Чтобы отключить, вы должны УДАЛИТЬ ключ в полезной нагрузке.

плз использовать этот

-(void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler 
    { 
     if(application.applicationState == UIApplicationStateInactive) 
    { 
      NSLog(@"Inactive"); 

     //do your things when you click on notification 
    } 
    else if (application.applicationState == UIApplicationStateBackground) 
    { 

        NSLog(@"Background"); 


    } 
     else if (application.applicationState == UIApplicationStateActive) 
     { 
     NSLog(@"Active"); 
     } 
    } 

для получения дополнительной информации плз прочитать эту ссылку http://samwize.com/2015/08/07/how-to-handle-remote-notification-with-background-mode-enabled/

+0

спасибо, я проверяю его и дам вам знать –

+0

привет, он работает, но когда мое приложение завершается с фона, то оно не работает –

+0

вы проверяете удаленное уведомление в фоновом режиме @Maulik? –

0
application: didReceiveRemoteNotification: 

вызывается, когда ОС получает RemoteNotification и приложение работает (в фоновом режиме/приостановлено или на переднем плане.)

и

application:(UIApplication *)application didFinishLaunchingWithOptions 

вызывается, когда приложение не и вы нажмете на значок приложения.

1), когда мое приложение удалить из фона и получить уведомления & нажмите на значок приложения -

TestViewController *testVC = your_test_vc; 
UINavigationController *navVC = [[UINavigationController alloc]initWithRootViewController:testVC]; 

В TestViewController вы можете нажать контроллер для отображения данных полезной нагрузки.

2) Все, что вы написали, является правильным. Надеюсь, это вам поможет.

+0

вы правы. Но когда я удаляю приложение из фона, тогда уведомление приходит от сервера, затем я нажимаю на приложение, а затем вызываю это приложение метода: (UIApplication *) приложение didFinishLaunchingWithOptions ... но полезная нагрузка не получает никаких данных –

+0

Да. Этот метод будет вызван. Вы можете написать как self.window.rootViewController = self.navcntrl. Но если вы хотите, чтобы анимация push отображала ваш WebViewController, вам нужен еще один контроллер просмотра, на котором вы можете нажать ваш контроллер. – Sujit

+0

уже пишет, но не работает –

0

Приложения имеют данные извещения, переданные в определенных обстоятельствах. Если взаимодействие пользователя не совпадает с одним из них, данные недоступны. Исключений нет.

  1. пользователь удаляет баннер уведомлений (или предупреждение). Неважно, было ли приложение запущено или нет.
  2. полезная нагрузка имеет поле content-available, установленное в истинное значение, и iOS принимает решение о доставке уведомления.

Примечание: этот ответ не объясняет, как вызывать или обрабатывать любой из сценариев.

+0

это означает, что мне нужно добавить контент, доступный в информации о пользователе, правильно? –

0

Значение поля из UserInfo является то, что вам требуется, то под

-(void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo 
{ 
    UIApplicationState state = [[UIApplication sharedApplication] applicationState]; 
    if (state == UIApplicationStateBackground || state == UIApplicationStateInactive) 
    {  //notification is received when your app is in background 
      //open the view controller you expected 
    } 
    else if(state == UIApplicationStateActive) 
    { 
     //notification is received when your app is in foreground 
     //do nothing 
    } 
} 
+0

не работает. Когда я нажимаю на appicon, тогда этот метод не вызывается - (void) приложение: (UIApplication *) application didReceiveRemoteNotification: (NSDictionary *) userInfo –

+0

Метод вызывается, когда приходит уведомление, вам нужно сохранить чек в приложение, в котором было какое-либо последнее уведомление. Затем, когда вы открываете проверку приложения в файле didFinishLaunchingWithOptions для любого уведомления. См. Http://stackoverflow.com/questions/16393673/detect-if-the-app-was-launched-opened-from-a-push-notification – gurmandeep

+0

Я работаю, но не работаю, когда я нажимаю на appicon –

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