React Native Ios 推送通知不起作用

Posted

技术标签:

【中文标题】React Native Ios 推送通知不起作用【英文标题】:React Native Ios Push Notification Not Working 【发布时间】:2019-12-29 09:31:13 【问题描述】:

我使用'@react-native-firebase/messaging' 模块发送通知。在 android 上一切正常,以下是我在 ios 设备上尝试 const fcmToken = await firebase.messaging().getToken(); 时得到的错误日志。

NativeFirebaseError: [messaging/unknown] 操作无法完成。 (com.firebase.iid 错误 1001。)

我已经实现了“react-native-permissions”来授予通知权限。

我的 AppDelegate.m 包含:

if ([FIRApp defaultApp] == nil) 
    [FIRApp configure];
 

我应该添加其他东西吗? 任何帮助或建议都会非常有帮助。 提前致谢

【问题讨论】:

如果没有解决,请告诉我。 @AnkitPatidar 我已经发布了我的解决方案,希望对您有所帮助 查看解决方案here by jacobp100 the Workaround.m 【参考方案1】:

在 iOS 中获取 fcm 令牌之前,您需要检查并询问消息权限

 /**
   * Check is notification showing permission enabled if not ask the permission.
   */
   async checkFcmPermission() 
    firebase
      .messaging()
      .hasPermission()
      .then(enabled => 
        if (enabled) 
          // User has permissions
          this.getFcmToken(); // const fcmToken = await firebase.messaging().getToken();
         else 
          // User doesn't have permission
          firebase
            .messaging()
            .requestPermission()
            .then(() => 
              // User has authorized
              this.getFcmToken(); // const fcmToken = await firebase.messaging().getToken();
            )
            .catch(error => 
              // User has rejected permissions
              console.log(
                'PERMISSION REQUEST :: notification permission rejected',
              );
            );
        
      );
  

【讨论】:

【参考方案2】:

这个问题有很多解决方案。由于一些 *** 用户要求,我发布了我的答案。 这是我的代码

  const sleep = ms => 
    return new Promise(resolve => setTimeout(resolve, ms));
  ;

  async function requestPermissionForNotification() 
    try 
      const permission = await requestNotifications(["alert", "badge", "sound"]);
      if (permission.status === "granted") 
        setupNotification();
      
     catch (e) 
      console.log(e)
    
  ;
  async function setupNotification() 
    try 

      await sleep(5000)
      // TODO no need token for now, Will be used for future releases 
      const enabled = await firebase.messaging().hasPermission();
      await requestNotifications(['alert', 'badge', 'sound']);
      await firebase.messaging().registerForRemoteNotifications();
      const token = await firebase.messaging().getToken();
     
      firebase.messaging().onMessage(async (remoteMessage) => 
   
      );
     catch (e) 
      console.log(e)

    
  

我还在 Info.plist 中添加了以下内容

<key>UIBackgroundModes</key>
<array>
    <string>remote-notification</string>
</array>

总结一下,我使用react权限来授予权限,而sleep方法是等待firebase准备好。最后卸载了几次应用程序以获得结果。 当它开始工作时,我花了好几天的时间都不敢碰代码。

【讨论】:

权限在 5 秒后而不是之前询问,用户不会收到任何通知

以上是关于React Native Ios 推送通知不起作用的主要内容,如果未能解决你的问题,请参考以下文章

React Native Push Notifications 在 Android 中不起作用,但在 iOS 上运行良好

React Native iOS,前台通知不起作用

Ionic 3.x:iOS 上的推送通知不起作用(适用于 Android?) Ionic Native Plugin Push

React Native:推送通知正在冻结 iOS 上的应用程序(白屏)

使用 react-native 创建本地推送通知 - IOS

反应本机推送通知 onNotification 事件不起作用