【问题标题】:Expo android app, PushNotifications doesn't work in standalone apk?Expo android应用程序,PushNotifications在独立apk中不起作用?
【发布时间】:2020-05-11 16:08:53
【问题描述】:

我遇到了一个问题,当我通过 expo 客户端应用程序运行应用程序时,PushNotifications 有效。但是如果我正在构建一个独立的 .apk,我需要安装 expo 客户端,以获得 pushtoken。而且,当 expo 客户端未打开时,我无法获得 pushtoken。所以我的客户需要安装 2 个应用程序。一个是我的,构建了独立的 .apk,另一个是 expo 客户端。这是繁琐的流程..

【问题讨论】:

    标签: android react-native push-notification expo


    【解决方案1】:

    我能够在我的项目中修复博览会推送通知。这是我自己的错。 问题是这样的,甚至文档也提供了解决方案: 所以我用 Firebase 创建了一个帐户,然后我附加了新项目。 然后我运行了这个命令:

    expo push:android:upload --api-key <Server key>
    

    您可以从此部分获取服务器密钥:

    它看起来像这样:

    XXXSdasx665:APA91bFL2342342342342342342342RxDAUbCOP0IL32etVueLhnLtoFErsqHBhjW-SRPSZGdU18BBIltUx7Wm234234234sxdxzcasdSElRyTEdMR7vmLJHgVvbOGx-0-SWDasdzxzxzx
    
    

    这帮助我解决了我遇到的问题。希望它也会对某人有所帮助。

    这是一个 app.json 文件:

    {
      "expo": {
        "name": "workero",
        "slug": "workero",
        "privacy": "public",
        "sdkVersion": "36.0.0",
        "platforms": ["android"],
        "version": "1.0.0",
        "orientation": "portrait",
        "icon": "./assets/icon.png",
        "splash": {
          "image": "./assets/splash.png",
          "resizeMode": "contain",
          "backgroundColor": "#ffffff"
        },
        "updates": {
          "fallbackToCacheTimeout": 0
        },
        "assetBundlePatterns": ["**/*"],
        "ios": {
          "supportsTablet": true
        },
        "android": {
          "package": "com.workero.apper",
          "googleServicesFile": "./google-services.json"
        }
      }
    }
    
    

    【讨论】:

    • 你现在正确理解了吗?就像弹出通知一样?
    • 当我测试它时,它工作正常,而且使用应用程序的人也不会抱怨它,因为我修复了它。通知正在弹出
    • 哦,它没有为我弹出:/但在应用程序中我检测到通知即将到来。您是否设置了任何特殊权限?你还需要在 app.json 中做任何额外的步骤吗
    • 我在上面附上了我的 app.json 文件。也尝试启动一个应用程序,然后发送推送通知。使用 expo 时,应用程序关闭时没有弹出推送通知很奇怪。我试图将其关闭,使用 firebase 后,即使应用程序关闭,它似乎也会弹出。 :)
    • 哦,感谢 app.json。我的文件看起来也很相似。我也上传了服务器密钥expo push:android:upload --api-key &lt;Server key&gt;。我有这个 组件并传递了接收到的数据,它实际上检测到通知并在 中显示它,但它没有在顶部弹出。
    【解决方案2】:

    SDK 38 之后会出现此问题。您可以通过简单的步骤解决此问题。 使用 Expo 制作的所有托管和裸工作流 Android 应用程序都需要 Firebase 云消息传递,除非您仍在 Expo 客户端中运行您的应用程序。设置您的 Expo Android 应用程序以使用您自己的 FCM 凭据获取推送通知。您基本上需要创建一个 Firebase 帐户并按照步骤操作。

    1. 如果您尚未为您的应用创建 Firebase 项目,请执行 现在点击 Firebase 控制台中的添加项目。

    2. 在您的新项目控制台中,点击将 Firebase 添加到您的 Android 应用 并按照设置步骤进行操作。确保 Android 包名称 您输入的值与您的 android.package 的值相同 app.json.

    3. 下载google-services.json 文件并将其放入您的Expo 应用程序的根目录。在您的 app.json 中,添加一个 android.googleServicesFile 字段的相对路径 google-services.json 刚刚下载的文件。如果你把它放在 根目录,这可能看起来像

           { 
      
                 "android":{ 
                      "googleServicesFile": "./google-services.json",
                      "useNextNotificationsApi":true,
                  }
      
      
           }
      

    "useNextNotificationsApi":true 也是必需的。最后,通过运行expo build:android 构建您的应用程序的新版本。 完成这些步骤后,您需要将您的 api 密钥推送到 expo 服务器。

    1. 为了让 Expo 使用您的服务器从我们的服务器发送通知 凭据,您需要上传您的秘密服务器密钥。你可以 在您的项目的 Firebase 控制台中找到此密钥:
    2. 在侧边栏顶部,单击右侧的齿轮图标 项目概览以转到您的项目设置。
    3. 单击“设置”面板中的“云消息传递”选项卡。
    4. 复制服务器密钥旁边列出的令牌。
    5. 运行expo push:android:upload --api-key &lt;your-token-here&gt; ,将&lt;your-token-here&gt; 替换为您刚刚复制的字符串。它将存储您的 令牌安全地保存在 expo 服务器上,只有在 您发送推送通知。

    此步骤将帮助您推送通知 expo server sdk 或通过expo push api ExpoPush Api。 (IOS暂时没有启用FCM。)

    【讨论】:

    • 非常感谢您的精彩解释。我缺少的是最后一步,将服务器密钥发送到博览会服务器。顺便说一句 useNextNotificationApi :不需要 true。
    【解决方案3】:

    对于其他任何人,对于托管工作流中的侦听器,请确保设置

    "useNextNotificationsApi": true in expo.android in your app.json from the direction here

    【讨论】:

      【解决方案4】:

      对我来说,我只需将“useNextNotificationsApi”:true 放在 app.json 中,推送通知消息就可以正常工作了

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-08-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-12-09
        • 2021-05-24
        • 1970-01-01
        相关资源
        最近更新 更多