Parse.com 推送通知延迟或仅在 Android 应用重启后

Posted

技术标签:

【中文标题】Parse.com 推送通知延迟或仅在 Android 应用重启后【英文标题】:Parse.com push notifications coming delayed or only after Android app restart 【发布时间】:2015-06-16 16:36:30 【问题描述】:

在测试 parse.com 推送通知(在 afterSave 上从 CloudCode 发送)时,有些奇怪。

有时,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 帐户。这会影响对推送通知的反应的及时性吗?

编辑:如果您认为使用推送通知来触发近乎实时的项目更新/同步,这不是一个好主意(无论是在一般情况下还是在 parse.com 中),这也是一个有价值的答案,特别是如果提出了替代方案...

【问题讨论】:

我在小米手机上测试推送时遇到同样的问题。 我认为无法保证立即发送推送通知。 @nasch 例如,如果你可以用某种文章来支持它,你可以在 SO 上将它变成一个答案。 【参考方案1】:

根据 karolvrn 的建议,这是我的回答:

我认为无法保证立即发送推送通知。

https://developers.google.com/cloud-messaging/concept-options#setting-the-priority-of-a-message

您有两个选项可将交付优先级分配给下游 消息:正常和高优先级。高和正常的交货 优先消息的工作方式如下:

高优先级。 GCM 尝试立即传递高优先级消息,允许 GCM 服务在以下情况下唤醒睡眠设备 可能并打开到您的应用服务器的网络连接... 普通优先级。这是消息传递的默认优先级...

我强调了“尝试”,这意味着它不保证消息会立即传递。

以下是另一位开发人员在 GCM 可靠性问题方面的经验:

https://eladnava.com/google-cloud-messaging-extremely-unreliable/

【讨论】:

以上是关于Parse.com 推送通知延迟或仅在 Android 应用重启后的主要内容,如果未能解决你的问题,请参考以下文章

Parse.com 的地理推送通知

Parse.com - 为单个用户设置推送通知

parse.com 上的 Apple 推送通知

如何使用 Parse.com Cloudcode 发送推送通知

错误〜parse.com推送通知android?

使用 Parse.com 安排 iOS 推送通知