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/