Android 没有收到来自新 Parse Server 的推送通知

Posted

技术标签:

【中文标题】Android 没有收到来自新 Parse Server 的推送通知【英文标题】:Android doesn't receive push notifications from new Parse Server 【发布时间】:2016-11-24 10:36:25 【问题描述】:

我正在将我的 androidios 应用程序从 parse.com 迁移到 Parse Server(顺便说一下,我正在使用 Parse 测试应用程序,但我想这与这个问题无关)。迁移后,一切正常,但向 Android 设备推送通知(它们在我的 iOS 应用中运行良好)。

这是我到目前为止所做的。

1.在我的 Parse Server 代码中(顺便说一下,在 Digital Ocean 上),在 /home/parse/index.js 中,我以这种方式初始化了 Parse Server:

var api = new ParseServer(  
  databaseURI: databaseUri || '<my mongodb url>',
  cloud: process.env.CLOUD_CODE_MAIN || __dirname + '/cloud/main.js',
  appId: process.env.APP_ID || '<my app ID>',
  masterKey: process.env.MASTER_KEY || '<my master Key>',
  serverURL: process.env.SERVER_URL || 'http://localhost:1337/parse',
  push: 
    android: 
        senderId: '<my GCM sender Id>',
        apiKey: '<my GCM API Key>'
      ,
    ios: [
      pfx: '/home/parse/<my dev P12>',  
      passphrase: '',
      cert: '',
      key: '',
      bundleId: '<my bundle ID>',
      production: false
    ,
    
      pfx: '/home/parse/<my prod P12>',  
      passphrase: '',
      cert: '',
      key: '',
      bundleId: '<my bundle ID>',
      production: true
    ]
  
);

我从我的 Google Developer Consoler 中获取了“我的 GCM 发件人 ID”,它是设置 > 项目编号中的 12 位数字。

我尝试了 3 种不同的“我的 GCM API 密钥”,一种没有应用限制,一种仅适用于我的 android/debug.keystore,另一种仅适用于我的应用密钥库。

我检查了我在我的 Google 开发者控制台中选择了这个应用,并且我的包 ID 在所有地方都是正确的。

2. 完成此更改后,我已重新启动 Parse Server

pm2 delete all // this with parse user
pm2 start ecosystem.json // this with parse user
pm2 save // this with parse user
sudo service nginx restart //this with my sudo user

3。在 Android 中我以这种方式初始化 Parse:

public static void initParse(Application app) 
    ctxt = app.getApplicationContext();
    Parse.enableLocalDatastore(app);
    // Old version
    Parse.initialize(app, "<my app id>", "<my client key>");
    // New version
    //Parse.initialize(new Parse.Configuration.Builder(ctxt)
    //        .applicationId("<my app id>")
    //        .clientKey(null)
    //        .server("https://<my new server>/parse/")
    //        .build()
    //);
    ParseUser.enableRevocableSessionInBackground();

我没有使用新方法进行初始化,因为它正在崩溃(这是另一个问题 Android switch from Parse to Parse Server crashes 的问题),但我猜这个初始化不会影响推送通知。

4.在 Android 中,我已将此添加到我的 Android 清单中:

<meta-data android:name="com.parse.push.gcm_sender_id"
                   android:value="id:<my GCM sender Id>" />;

清单的其余部分和 GCM 配置与迁移前相同。

5.作为总结

旧的 parse.com 推送通知在 Android 和 iOS 上运行良好。

使用新的 Parse Server 和上述代码,iOS 推送通知运行良好。

使用新的 Parse Server 和上述代码,不会收到 Android 推送通知。

在向 iOS 和 Android Dashboard 发送推送通知时,在 Digital Ocean 中安装了我的新 Parse Dashboard 后,将获得 Saved!是什么让我觉得这是我的 Android 应用程序的问题,而不是我的 Parse Dashboard/Parse Server 配置的问题。

我在这里错过了什么?

【问题讨论】:

你是从客户端还是从云代码触发推送? 我从新的 Parse Dashboard(从其推送部分)触发推送。这个 Parse Dashboard 与 Parse Server 一起安装在我的 Digital Ocean 服务器中。 你能分享一些日志吗? 当然,我会尽快获取并分享这些日志。但是,我不确定是否会有日志,因为在 Parse Dashboard 中我得到“已保存!”发送通知后,它已经发送好(它到达了我的 iOS 设备)。在我的 Android 设备中,我无法看到任何与通知相关的日志,就像没有收到任何通知一样。 因为我害怕,我找不到任何日志。在我的 Android 应用程序中,当我将推送表单发送到仪表板时,没有日志(应用程序在前台,应用程序在后台)。关于 Parse Server 和 Parse Dashboard,我不知道日志在哪里(仪表板有一个日志选项卡,但它是空的),并且在系统中 /var/log 没有与 Parse 相关的文件。我已阅读 Parse 文档,但不知道在哪里可以找到日志。 【参考方案1】:

确保您的 Parse SDK 库已更新!

我在从 Parse Dashboard 推送 Android 通知时也遇到了很多麻烦,但是当我将库更新到 Parse 1.13.0 和 Bolts 1.4.0 时,这一切都得到了解决。

【讨论】:

【参考方案2】:

您可以尝试使用“CURL”指定仅“android”设备。

curl -X POST \
    -H "X-Parse-Application-Id: you_app_id" \
    -H "X-Parse-Master-Key: your_master_key" \
    -H "Content-Type: application/json" \
    -d '
          "where": 
            "deviceType": 
              "$in": [
                "android"
              ]
            
          ,
          "data": 
            "title": "The Shining",
            "alert": "All work and no play makes Jack a dull boy."
          
        '\   http://your_server_address/parse/push

然后你就可以找出到底是哪里出了问题。

【讨论】:

这会返回 "result":true 但没有收到推送。认为问题是丹尼斯 AWS 在我的问题的 cmets 中所说的:GCMSenderId 在数据库中是空的。

以上是关于Android 没有收到来自新 Parse Server 的推送通知的主要内容,如果未能解决你的问题,请参考以下文章

推送通知在 iphone 中没有收到来自 Parse.com 服务器的某些时间

Parse.com 在 Xamarin 中推送 Android

PUSH ERROR 成功解析推送发送后收到来自 Parse 的无效 JSON 错误

Android 推送通知未收到

从 Parse 下载图像文件到 Android

Android-应用程序没有收到来自解析平台的推送通知