按用户ID或某个唯一ID获取PFInstallation:Issue

时间:2014-09-17 16:28:27

标签: ios iphone parse-platform

我可以通过用户ID获取PFInstallation对象,以便我可以为该安装订阅频道。 [PFInstallation currentInstallation]仅给出该设备的istallation。我想按用户ID安装其他设备。

1 个答案:

答案 0 :(得分:2)

是的,我所做的是我将用户订阅到他自己的频道,前面有user_。频道不能以数字开头,而某些objectId也是如此。

currentInstallation.channels = ["global", "user_" + PFUser.currentUser().objectId]

然后,您可以通过将推送通知发送到频道user_objectId,将推送通知发送给用户。

在这种情况下,用户订阅了文档。提问者将订阅的频道存储到Installation对象。这就是我的建议。

创建一个名为Subscriptions

的新表

每行应包含:user: UserPointerdocument: DocumentPointer

当用户订阅文档时,您需要为该用户/文档组合创建一个新行。

然后,当发送推送而不是向documentId频道发送推送时,您将其发送给订阅该文档的所有用户。代码如下。

//Get all the users that are subscribed to docId
var userQuery = new Parse.Query("Subscriptions");
userQuery.equalTo("document", docId);
userQuery.limit(1000);
userQuery.find({
    success: function(results) {
        //results contains at most 1000 subscribed users
        var userIdChannels = [];
        //Extract out the userIds from results
        for(var i = 0; i < userIds.length; ++i) {
            userIdChannels.push("user_" + results[i].get("user").id);
        }
        //Now send a push notification to all the subscribed users
        var pushQuery = new Parse.Query(Parse.Installation);
        pushQuery.equalTo('channels', userIdChannels);

        Parse.Push.send({
            where: pushQuery, // Set our Installation query
            data: {
                alert: "Document updated"
            }
        },{
            success: function() {
                // Push was successful
            },
            error: function(error) {
                throw "Error sending push";
            }
        });

    }, error: function(error) {
         throw "Error getting subscribed users";
    }
});