React-native-onesignal: didReceiveRemoteNotification não funciona em AppDelegate.m

Criado em 30 out. 2018  ·  4Comentários  ·  Fonte: OneSignal/react-native-onesignal

Descrição:

Estou tentando usar Freschat SDK para lidar com as notificações push dentro do AppDelegate.m, mas não parece funcionar com a extensão de serviço de um sinal.

Ambiente

  1. Qual versão do OneSignal React-Native SDK você está usando? 3.2.7
  2. Como você adicionou o SDK ao seu projeto (por exemplo, npm) npm

Etapas para reproduzir o problema:

  • Instale o OneSignal SDK usando npm em seu projeto

  • Inicialize o SDK no iOS AppDelegate
  • Tentar receber uma notificação push
  • Algo mais:

    (traços de pilha de travamento, bem como qualquer outra informação aqui)

    Comentários muito úteis

    Desculpe pela (muito) demora na resposta aqui, mas há algumas coisas.

    Em primeiro lugar, application:didReceiveRemoteNotification: está obsoleto. Você vai querer usar application:didReceiveRemoteNotification:fetchCompletionHandler: vez disso. Mas eu não recomendaria usar isso também, você definitivamente deve usar os métodos UNUserNotificationCenterDelegate se quiser executar o código nativo quando uma notificação for recebida.

    A extensão do serviço de notificação não substitui este método.

    Para usar UNUserNotificationCenterDelegate , edite AppDelegate.h e adicione:

    #import <UserNotifications/UserNotifications.h>
    

    Em seguida, altere a interface AppDelegate para implementar o protocolo UNUserNotificationCenterDelegate :

    <strong i="18">@interface</strong> AppDelegate : UIResponder <UIApplicationDelegate, UNUserNotificationCenterDelegate>
    

    Em AppDelegate.m dentro do método didFinishLaunchingWithOptions: , você deve adicionar a seguinte linha:

    UNUserNotificationCenter.currentNotificationCenter.delegate = self;
    

    Finalmente, você pode adicionar o seguinte método, que agora será chamado sempre que uma notificação for recebida:

    -(void)userNotificationCenter:(UNUserNotificationCenter *)center willPresentNotification:(UNNotification *)notification withCompletionHandler:(void (^)(UNNotificationPresentationOptions))completionHandler {
      //do stuff
    }
    

    Fechando uma vez que não é um problema com nosso SDK

    Todos 4 comentários

    @ nitish1099 O que você quer dizer quando diz "parece não funcionar com a extensão de serviço OneSignal" ...?

    Além disso, o SDK do Freschat é um código fechado, então, infelizmente, não há muito que possamos fazer em termos de depurar a incompatibilidade. Quando você remove o SDK do projeto, o método AppDelegate é chamado?

    Você pode precisar usar os métodos UNUserNotificationCenterDelegate vez de receber chamadas de método de evento de notificação

    @ Nightsd01 Não sendo um desenvolvedor nativo, você pode me dizer se a extensão do serviço de notificação substitui o didReceiveRemoteNotification? Você também poderia me dizer como usar UNUserNotificationCenterDelegate ou se você pode compartilhar um guia que posso consultar.

    @ Nightsd01 Alguma atualização?

    Desculpe pela (muito) demora na resposta aqui, mas há algumas coisas.

    Em primeiro lugar, application:didReceiveRemoteNotification: está obsoleto. Você vai querer usar application:didReceiveRemoteNotification:fetchCompletionHandler: vez disso. Mas eu não recomendaria usar isso também, você definitivamente deve usar os métodos UNUserNotificationCenterDelegate se quiser executar o código nativo quando uma notificação for recebida.

    A extensão do serviço de notificação não substitui este método.

    Para usar UNUserNotificationCenterDelegate , edite AppDelegate.h e adicione:

    #import <UserNotifications/UserNotifications.h>
    

    Em seguida, altere a interface AppDelegate para implementar o protocolo UNUserNotificationCenterDelegate :

    <strong i="18">@interface</strong> AppDelegate : UIResponder <UIApplicationDelegate, UNUserNotificationCenterDelegate>
    

    Em AppDelegate.m dentro do método didFinishLaunchingWithOptions: , você deve adicionar a seguinte linha:

    UNUserNotificationCenter.currentNotificationCenter.delegate = self;
    

    Finalmente, você pode adicionar o seguinte método, que agora será chamado sempre que uma notificação for recebida:

    -(void)userNotificationCenter:(UNUserNotificationCenter *)center willPresentNotification:(UNNotification *)notification withCompletionHandler:(void (^)(UNNotificationPresentationOptions))completionHandler {
      //do stuff
    }
    

    Fechando uma vez que não é um problema com nosso SDK

    Esta página foi útil?
    0 / 5 - 0 avaliações