React Native 博览会推送通知无法在独立应用程序上运行

slhcrj9b  于 2022-12-27  发布在  React
关注(0)|答案(4)|浏览(166)

我使用Expo推送系统设置了推送通知,通过ExpoGo使用应用程序时效果很好。但在Play商店安装的应用程序中,它不起作用。调试应用程序时,我发现

token = (await Notifications.getExpoPushTokenAsync()).data;

不返回任何内容,因为它之后的警报从未运行。

async function registerForPushNotificationsAsync() {
    let token;
    const { status: existingStatus } = await Permissions.getAsync(Permissions.NOTIFICATIONS);
    let finalStatus = existingStatus;
    if (existingStatus !== 'granted') {
      const { status } = await Permissions.askAsync(Permissions.NOTIFICATIONS);
      finalStatus = status;
    }
    if (finalStatus !== 'granted') {
      alert('Failed to get push token for push notification!');
      return;
    }
    alert('1')
    token = (await Notifications.getExpoPushTokenAsync()).data;
    alert('2')
    if (Platform.OS === 'android') {
      Notifications.setNotificationChannelAsync('default', {
        name: 'default',
        importance: Notifications.AndroidImportance.MAX,
        vibrationPattern: [0, 250, 250, 250],
        lightColor: '#FF231F7C',
      });
    }

    //sending the token to my api
    api.put('xxx', {
      notification_token: token,
    });
  }

怎么办?有什么遗漏吗?我只是使用了docs https://docs.expo.io/push-notifications/overview/中的代码

jgovgodb

jgovgodb1#

我找到解决办法了。
问题是,在设置推送通知的文档中,由于某种原因,他们没有提到有必要设置一个firebase帐户来推送独立应用程序中的通知,即使我使用的是世博会系统。
在此链接中发现解决方案https://github.com/expo/expo/issues/9770
并使用此链接https://docs.expo.io/push-notifications/using-fcm/设置FCM

wgmfuz8q

wgmfuz8q2#

expo push notification documentation page并没有非常清楚地提到,在一个独立的android/ios应用程序中,推送通知只需要几个步骤,尽管它在文档中提到页面底部的“下一步”。但从第一段来看,他们是否将Expo应用通知与独立的Android/iOS应用通知区分开来并不明确。相反,它感觉Expo处理了所有的事情,就像独立应用程序不需要更多的步骤一样。这当然只适用于Expo应用程序。然而,当我们进入Next Steps页面时,我们在“凭据”部分找到了最重要的信息。
这就是Android独立应用程序的工作原理(我已经完成了)。我们需要设置我们自己的Firebase项目,就像这里所说的Using FCM for Push Notifications。如果你使用Expo服务器发送推送通知,请确保按照“上传服务器凭据”的步骤操作。你会看到FCM服务器密钥添加到你的Expo凭据中。
它不应该需要太多的时间,但对我来说,它花了1个小时左右,以设置这些额外的步骤,因为我是学习这些,第一次。

pw136qt2

pw136qt23#

android上的通知在我们的项目中不起作用,除了其他的答案,下面的一些答案对我们有帮助:

  • 我已将FCM服务密钥上载到Expo
  • 将SHA证书指纹放入Firebase项目
  • getExpoPushTokenAsync中显式设置experienceId
nlejzf6q

nlejzf6q4#

我在Android上也遇到过类似的问题,以下是帮助我解决这个问题的步骤。
1.创建firebase项目并添加sha键(不确定是否需要)
1.在firebase上启用云消息API,并将服务器密钥作为fcm密钥expo push:android:upload --api-key <server-key>上传到expo服务器
1.在目录中添加96x96px通知图标并在
app.json文件"通知":{"图标":" ./源代码/资产/通知图标. png ","颜色":"#ffffff"、"ios显示在前景中":真}
1.用expo prebuild --platform android创建android文件
1.在android/app/build.gradle文件中添加implementation platform('com.google.firebase:firebase-bom:30.2.0')
1.在清单文件中添加下列权限。

<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
<uses-permission android:name="android.permission.SCHEDULE_EXACT_ALARM"/>

1.重建了这个项目。

相关问题