Parse.com 推送通知延迟或仅在 Android 应用重启后
Parse.com push notifications coming delayed or only after Android app restart
测试 parse.com 推送通知(从 CloudCode 在 afterSave 上发送)时,有些奇怪。
有时 Android 应用会立即收到通知(不到 1 秒),但其他时候,它会在数秒延迟后收到。
重新启动应用程序似乎会导致尚未收到的通知立即出现。
可能是什么原因?
这可能是 parse.com 服务中的错误吗?
是否有发送或接收通知的数量限制(每单位时间)?
自定义 BroadcastReceiver 和默认系统栏通知都会出现此问题。
服务器端javascript CloudCode:
Parse.Cloud.afterSave("Timer", function(request) {
// from https://www.parse.com/docs/js/guide#cloud-code
console.log("Before Parse.Push.send -- without alert");
var query = new Parse.Query(Parse.Installation);
// http://blog.parse.com/announcements/pushing-from-the-javascript-sdk-and-cloud-code/ :
Parse.Push.send({
where: query,
data: {
//alert: "afterSave on a Timer -- Parse.Push.send"
}
});
console.log("After Parse.Push.send -- without alert");
});
Kotlin 中的自定义广播接收器(但在没有自定义 BroadcastReceiver 的情况下也会出现问题):
override fun onCreate(savedInstanceState: Bundle?) {
super<BaseActivity>.onCreate(savedInstanceState)
setContentView(R.layout.main_activity)
// ...
registerReceiver()
}
private fun registerReceiver() {
val intentFilter = IntentFilter()
intentFilter.addAction("com.parse.push.intent.RECEIVE")
registerReceiver(MyBroadcastReceiver(), intentFilter)
}
inner class MyBroadcastReceiver : BroadcastReceiver() {
override fun onReceive(context: Context, intent: Intent) {
Toast.makeText(context, "MyBroadcastReceiver 2: onReceive: "
+ context + ";" + intent, Toast.LENGTH_SHORT).show()
loadTimers()
}
}
我们目前使用的是非付费 parse.com 帐户。这会影响对推送通知的反应及时性吗?
编辑:如果您认为使用推送通知触发近乎实时的项目 updates/sync 不是一个好主意(无论是在一般情况下还是在 parse.com 中),那也是一个有价值的答案,特别是如果提出替代方案...
根据 karolvrn 的建议,这是我的答案:
我认为不能保证立即发送推送通知。
https://developers.google.com/cloud-messaging/concept-options#setting-the-priority-of-a-message
You have two options for assigning delivery priority to downstream
messages: normal and high priority. Delivery of high and normal
priority messages works like this:
- High priority. GCM attempts to deliver high priority messages immediately, allowing the GCM service to wake a sleeping device when
possible and open a network connection to your app server...
- Normal priority. This is the default priority for message delivery...
我强调了"attempts",意思是不保证消息马上送达
这是另一位开发人员在 GCM 可靠性问题方面的经验:
https://eladnava.com/google-cloud-messaging-extremely-unreliable/
测试 parse.com 推送通知(从 CloudCode 在 afterSave 上发送)时,有些奇怪。
有时 Android 应用会立即收到通知(不到 1 秒),但其他时候,它会在数秒延迟后收到。
重新启动应用程序似乎会导致尚未收到的通知立即出现。
可能是什么原因?
这可能是 parse.com 服务中的错误吗?
是否有发送或接收通知的数量限制(每单位时间)?
自定义 BroadcastReceiver 和默认系统栏通知都会出现此问题。
服务器端javascript CloudCode:
Parse.Cloud.afterSave("Timer", function(request) {
// from https://www.parse.com/docs/js/guide#cloud-code
console.log("Before Parse.Push.send -- without alert");
var query = new Parse.Query(Parse.Installation);
// http://blog.parse.com/announcements/pushing-from-the-javascript-sdk-and-cloud-code/ :
Parse.Push.send({
where: query,
data: {
//alert: "afterSave on a Timer -- Parse.Push.send"
}
});
console.log("After Parse.Push.send -- without alert");
});
Kotlin 中的自定义广播接收器(但在没有自定义 BroadcastReceiver 的情况下也会出现问题):
override fun onCreate(savedInstanceState: Bundle?) {
super<BaseActivity>.onCreate(savedInstanceState)
setContentView(R.layout.main_activity)
// ...
registerReceiver()
}
private fun registerReceiver() {
val intentFilter = IntentFilter()
intentFilter.addAction("com.parse.push.intent.RECEIVE")
registerReceiver(MyBroadcastReceiver(), intentFilter)
}
inner class MyBroadcastReceiver : BroadcastReceiver() {
override fun onReceive(context: Context, intent: Intent) {
Toast.makeText(context, "MyBroadcastReceiver 2: onReceive: "
+ context + ";" + intent, Toast.LENGTH_SHORT).show()
loadTimers()
}
}
我们目前使用的是非付费 parse.com 帐户。这会影响对推送通知的反应及时性吗?
编辑:如果您认为使用推送通知触发近乎实时的项目 updates/sync 不是一个好主意(无论是在一般情况下还是在 parse.com 中),那也是一个有价值的答案,特别是如果提出替代方案...
根据 karolvrn 的建议,这是我的答案:
我认为不能保证立即发送推送通知。
https://developers.google.com/cloud-messaging/concept-options#setting-the-priority-of-a-message
You have two options for assigning delivery priority to downstream messages: normal and high priority. Delivery of high and normal priority messages works like this:
- High priority. GCM attempts to deliver high priority messages immediately, allowing the GCM service to wake a sleeping device when possible and open a network connection to your app server...
- Normal priority. This is the default priority for message delivery...
我强调了"attempts",意思是不保证消息马上送达
这是另一位开发人员在 GCM 可靠性问题方面的经验:
https://eladnava.com/google-cloud-messaging-extremely-unreliable/