我正在尝试实现博览会推送通知!我按照文档所说的做了一切。 创建了一个 Firebase 项目并下载了
google-services.json
并使用 expo push:android:upload --api-key <your-token-here>
将云消息传递上的服务器密钥上传到世博服务器!所以基本上我做了他们文档中提到的所有事情!当我在 Expo GO 上测试时,我的通知工作得非常好!但是当我使用 eas build -p android --profile preview
构建了一个 apk 后
通知不弹出!我发送的 api 说通知已发送,但它没有显示在设备上!
我读到通知在 expo go 上工作,而不是在 apk 上工作,因为凭据的原因!我错过了什么步骤吗?
当我转到博览会构建并转到项目凭据时,会弹出两个选项,一个是 com.company.app 的路径,另一个是:通过 Legacy(经典构建)!
app.json
{
"expo": {
"name": "myapp",
"slug": "myapp",
"version": "1.0.0",
"orientation": "portrait",
"icon": "./assets/icon.png",
"userInterfaceStyle": "light",
"splash": {
"image": "./assets/splash.png",
"resizeMode": "contain",
"backgroundColor": "#ffffff"
},
"updates": {
"fallbackToCacheTimeout": 0
},
"assetBundlePatterns": ["**/*"],
"ios": {
"supportsTablet": true
},
"android": {
"googleServicesFile": "./google-services.json",
"adaptiveIcon": {
"foregroundImage": "./assets/adaptive-icon.png",
"backgroundColor": "#FFFFFF"
},
"package": "com.hyrix.myapp",
"useNextNotificationsApi": true
},
"web": {
"favicon": "./assets/favicon.png"
},
"extra": {
"eas": {
"projectId": "ee001501-c3b5-402f-8a1d-914144496965"
}
}
}
}
将 Android 智能手机连接到 PC 后,您可以查看 Android Studios 的 logcat。
我尝试在 Android Studio 的 logcat 中调试应用程序并收到以下错误消息:
'[expo-notifications] 使用服务器更新设备推送令牌时遇到错误:', '{"errors":[{"code":"VALIDATION_ERROR","message":"\"appId\" 必须是字符串。","isTransient":false}]}'
我为解决这个问题所做的就是在
Notifications.getExpoPushTokenAsync()
方法中手动设置“applicationId”。例如:
Notifications.getExpoPushTokenAsync({applicationId: "xxxxxx..."})
可以在应用程序的 firebase 配置中找到
applicationId
作为 appId
。
方法getExpoPushTokenAsync()
可以接收一些参数,也许其中一些参数设置不正确。
您可能忘记在方法中设置
projectId
Notifications.getExpoPushTokenAsync
所以检查这个方法是否是这样调用的
token = await Notifications.getExpoPushTokenAsync({
projectId: Constants.expoConfig.extra.eas.projectId,
});
注意:您也可以手动设置projectId,而不是从expo-constants模块获取它