我使用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/中的代码
4条答案
按热度按时间jgovgodb1#
我找到解决办法了。
问题是,在设置推送通知的文档中,由于某种原因,他们没有提到有必要设置一个firebase帐户来推送独立应用程序中的通知,即使我使用的是世博会系统。
在此链接中发现解决方案https://github.com/expo/expo/issues/9770
并使用此链接https://docs.expo.io/push-notifications/using-fcm/设置FCM
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个小时左右,以设置这些额外的步骤,因为我是学习这些,第一次。
pw136qt23#
android上的通知在我们的项目中不起作用,除了其他的答案,下面的一些答案对我们有帮助:
getExpoPushTokenAsync
中显式设置experienceId
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.在清单文件中添加下列权限。
1.重建了这个项目。