Parse platform 解析后台作业是否可以向当前登录的所有用户发送消息?

Parse platform 解析后台作业是否可以向当前登录的所有用户发送消息?,parse-platform,Parse Platform,我是新来解析的,我想知道是否有办法安排一个后台作业,每3分钟启动一次,并向当时登录的所有用户发送一条消息(一个整数或什么的)。我找不到任何帮助来阅读指南。我希望有人能在这里帮助我。以下是我想到的一些想法 向所有用户发送推送通知,但不要添加警报文本。对于已关闭应用程序的用户,不会显示警报,您可以在应用程序代理中处理警报缺点:使用大量推送通知,但并非所有推送通知都将被使用 当应用程序出现在前台时,向PFInstallation对象添加一个标志,指定用户在线,当它出现在后台时,将该标志设置为false

我是新来解析的,我想知道是否有办法安排一个后台作业,每3分钟启动一次,并向当时登录的所有用户发送一条消息(一个整数或什么的)。我找不到任何帮助来阅读指南。我希望有人能在这里帮助我。

以下是我想到的一些想法

  • 向所有用户发送推送通知,但不要添加警报文本。对于已关闭应用程序的用户,不会显示警报,您可以在应用程序代理中处理警报缺点:使用大量推送通知,但并非所有推送通知都将被使用

  • 当应用程序出现在前台时,向PFInstallation对象添加一个标志,指定用户在线,当它出现在后台时,将该标志设置为false。向标志设置为true的安装发送推送通知缺点:如果应用程序崩溃,您将向不在线的用户发送通知。每个会话更新用户两次会增加解析请求计数

  • 在PFInstallation对象中添加一个新属性,用于存储用户上次做某事的时间,也可以在应用程序打开时将其设置为30秒/1米的计时器。向过去30秒/1米内处于活动状态的用户发送推送通知缺点:每30秒更新一次pf安装可能会导致解析请求计数增加。更精确(更小的间隔)意味着更多的请求。用户的会话长度越长,使用的请求就越多


  • 我需要在几个用Parse.com构建的应用程序中推送所有登录用户的信息

    Emilio之前介绍的解决方案都没有,因为我们只需要为登录用户触发一些实时事件

    因此,我们决定在解析中使用CloudCode中的PubNub

    我们的策略是为所有用户打开一个可用的“通道”,如果用户处于活动状态(登录),我们会将应用程序触发的一些信息推送到这个专用的“通道”,并创建一些新事件或行动呼吁

    这是将信息发送到专用通道的示例代码:

    Parse.Cloud.define("sendPubNubMessage", function(request, response) {
        var message = JSON.stringify(request.params.message);
        var PubNubUrl;
        var PubNubKeys;
        Parse.Config.get().then(function(config) {
            PubNubKeys = config.get('PubNubkeys');
        }).then(function() {
            PubNubUrl = 'https://pubsub.pubnub.com/publish/';
            PubNubUrl+= PubNubKeys.Publish_Key + '/';
            PubNubUrl+= PubNubKeys.Subscribe_Key + '/0/';
            PubNubUrl+= request.params.channel +'/0/';
            PubNubUrl+= message;
            return Parse.Cloud.httpRequest({
                url: PubNubUrl,         
                headers: {
                    'Content-Type': 'application/json;charset=utf-8'
                }   
            }).then(function(httpResponse) {        
                return httpResponse;
            });
        }).then(function(httpResponse) {
            response.success(httpResponse.text);
        }, function(error) {
            response.error(error);
        });
    });
    
    这是另一个示例代码,用于在特定类上发生更改时向专用通道发送消息:

    Parse.Cloud.afterSave("your_class", function(request, response) {
        if (!request.object.existed()) {
            Parse.Cloud.run('sendPubNubMessage', {      
                'message': JSON.stringify({
                    'collection': 'sample',
                    'objectId': request.object.id
                }),
                'channel' : 'all' // could be request.object.get('user').id
            });
        }
    });
    

    @Toucouler为您的解析项目建议PubNub是正确的。PubNub本质上就像客户端和服务器之间的开放套接字,这样服务器就可以向客户端发送消息,反之亦然。支持70多个SDK,其中一个用于Win Phone

    解决您的问题的一种方法是让所有用户在登录时访问某个频道,并在退出应用程序或超时时取消该频道的订阅

    当您想要发送消息时,您可以发布到某个频道,所有订阅的用户将在<1/4秒内收到该消息。PubNub使发送这些消息变得非常简单

    您可能会发现另一个有用的功能是,它可以为您提供有关当前订阅您的“频道”的用户的实时信息


    如果您认为一个代码示例会有帮助,请让我知道

    多谢各位。所以我可以使用后台作业发送推送通知?服务器主动向客户机发送推送通知(您的所有解决方案都假定使用它)是一种方式吗?是的,您可以使用后台作业发送推送通知。是的,据我所知,服务器向设备发送消息的唯一方式是推送通知。Emilion如果我向用户发送大量推送通知会怎么样。假设我每秒向玩家发送10次推送通知。它会被苹果、安卓、Windows Phone阻止吗?是的,你的应用可能会被苹果拒绝,但你也会很快达到解析通知限制,这对你来说非常昂贵。如果您想在客户端和服务器之间建立持久连接,可以尝试使用Firebase。我对Firebase不太熟悉,但我知道这是我们公司在服务器和客户端之间需要双向实时通信时使用的。感谢您的回复。它只适用于iOS和Android?不支持Win Phone?它可用于iOs、Android和Windows Phone。检查此链接:顺便问一下,如果您编写云代码,为什么要使用REST而不是JSAPI?这里我注意到了PubNub Parse SDK 3.7.12。你可以在你的云代码中使用它,对吗?谢谢Narek,当我开始编写它时,这个SDK并不存在。将用新的SDKThank更新我的代码以作解释。是的,请在这里为我们所有人的需要添加一个样品,我们将需要这个。据我所知,PubNub是一个用于Parse的插件,它可以与Parse提供的所有服务一起使用,也就是说,我可以有一个后台工作,通过PubNum向频道中的所有用户发送消息,对吗?顺便说一句,这将是一个很好的例子来展示如何。它不是一个插件。正如贾斯汀所描述的,在专用频道上广播信息是一种很好的方式。在我们的例子中,用户一打开应用程序,我们就要求应用程序“订阅”一个频道。@Toucouler那么它与Parse有什么关系呢?你们可以发布一个例子,通过解析后台工作向订阅频道的人发送消息吗?