Expo 推送通知适用于 expo go,但不适用于 apk(生产)

问题描述 投票:0回答:2

我正在尝试实现博览会推送通知!我按照文档所说的做了一切。 创建了一个 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 react-native push-notification expo
2个回答
0
投票

将 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()
可以接收一些参数,也许其中一些参数设置不正确。


0
投票

您可能忘记在方法中设置

projectId
Notifications.getExpoPushTokenAsync

所以检查这个方法是否是这样调用的

token = await Notifications.getExpoPushTokenAsync({
  projectId: Constants.expoConfig.extra.eas.projectId,
});

注意:您也可以手动设置projectId,而不是从expo-constants模块获取它

© www.soinside.com 2019 - 2024. All rights reserved.