Android 没有收到来自新 Parse Server 的推送通知
Posted
技术标签:
【中文标题】Android 没有收到来自新 Parse Server 的推送通知【英文标题】:Android doesn't receive push notifications from new Parse Server 【发布时间】:2016-11-24 10:36:25 【问题描述】:我正在将我的 android 和 ios 应用程序从 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