【问题标题】:Parse Push Notification Cloud Code Error?解析推送通知云代码错误?
【发布时间】:2016-07-30 23:33:33
【问题描述】:

更新:我收到此错误是因为 Parse-Server 2.2.17 有一个错误。我通过回到 2.2.16 来修复它。

有人知道我为什么会收到这个错误吗?这是我的云代码:

`Parse.Cloud.define("Messages", function(request, response) {

var pushQuery = new Parse.Query(Parse.Installation);

Parse.Push.send({
    where: pushQuery,
    data: {
    alert: "New Event Added",
    sound: "default"
    }
    },{
    success: function(){
        console.log("Push Sent!")
    },
    error: function (error) {
        console.log(error)
    },
  useMasterKey: true

}); });`

这是我得到的错误:

这就是我调用代码的方式:`PFCloud.callFunctionInBackground("Messages", withParameters: nil) { (object, error) in

            if error == nil {

                print("Success!")

            } else {

                print(error)
            }
        }

index.js: `

【问题讨论】:

    标签: ios swift parse-platform parse-cloud-code


    【解决方案1】:

    你能不能试试下面的代码:

    var query = new Parse.Query(Parse.Installation);
    // query condition (where equal to .. etc.)
    
    var payload = {
        alert: "New Event Added",
        sound: "default" 
    };
    
    
    
    
    
    Parse.Push.send({
        where: query, // Set our Installation query
        data: payload
    }, {
            success: function () {
    
            },
            error: function (error) {
                // Handle error
            }
        });
    

    请注意我删除了 useMasterKey,如果你想添加 useMasterKey,你需要将它插入到闭包中,但对我来说,它可以在没有 useMasterKey 的情况下工作

    useMasterKeyVersion 应如下所示:

    Parse.Push.send({
        where: query, // Set our Installation query
        data: payload
    },
    {
       useMasterKey: true
    },
    {
        success: function () {
    
        },
        error: function (error) {
            // Handle error
        }
    });
    

    promise 版本(根据最佳实践):

    Parse.Push.send({where: query,data: payload})
    .then(function(){
        // success
    },function(error){
        // error .. 
    });
    

    更新

    通过查看您的 index.js 文件,您似乎没有将 facebook oauth 添加到您的 3 方身份验证登录中。 所以你需要添加以下内容:

    oauth: {
       facebook: {
         appIds: "FACEBOOK APP ID"
       }
    }
    

    在您的 emailAdapter 配置下方和“FACEBOOK APP ID”内放置您在 facebook 开发人员中创建的应用 ID

    【讨论】:

    • 该代码对我也不起作用。我仍然在日志中收到与我在“无法设置标题”的问题中发布的相同的错误。你能告诉我你使用的是什么版本的解析吗?如果你在heroku中有任何设置,你必须让它工作?我正在使用最新版本的解析,并且在我的 index.js 文件中也使用了 OneSignal Push Adapter。但在我使用推送适配器之前,我遇到了这种错误。
    • 我使用的是最新版本的 parse 2.2.17。能否请您尝试调用成功块中的 response.success() 和错误块中的 response.error() 看看是否正在调用回调?
    • 好的,我也在使用那个版本。您对问题所在有什么其他建议吗?或者我能做些什么来解决它?在更新 Parse 之前,我的 .p12 文件出现错误,提示无法识别。即使它在那里。然后我在终端上更新了解析,那个错误就消失了。但是现在自从我收到关于发送后无法设置标题的错误。
    • 我刚刚用你的方法实现了代码块中的“response”方法,还是报同样的错误。我觉得我真的尝试了一切,但没有任何效果哈哈。我被这 1 个错误困住了 3 天。
    • 当我从 OneSignal 仪表板发送推送时,它们会转到我的手机。就在我尝试从我的应用程序调用云代码时,我遇到了问题。当我将 Parse 用于推送通知时,我也可以从我的 Parse 仪表板发送推送。但同样,它在 Cloud Code 中不起作用。
    【解决方案2】:

    在 main.js 中放入这段代码

    // SEND PUSH NOTIFICATION
    Parse.Cloud.define("push", function(request, response) {
    
      var user = request.user;
      var params = request.params;
      var someKey = params.someKey
      var data = params.data
    
      var recipientUser = new Parse.User();
      recipientUser.id = someKey;
    
      var pushQuery = new Parse.Query(Parse.Installation);
      pushQuery.equalTo("userID", someKey);
    
    
      Parse.Push.send({
        where: pushQuery, // Set our Installation query
        data: data
      }, { success: function() {
          console.log("#### PUSH OK");
      }, error: function(error) {
          console.log("#### PUSH ERROR" + error.message);
      }, useMasterKey: true});
    
      response.success('success');
    });
    
    
    
    // SEND PUSH NOTIFICATION FOR ANDROID
    Parse.Cloud.define("pushAndroid", function(request, response) {
    
      var user = request.user;
      var params = request.params;
      var someKey = params.someKey
      var data = params.data
    
      var recipientUser = new Parse.User();
      recipientUser.id = someKey;
    
      var pushQuery = new Parse.Query(Parse.Installation);
      pushQuery.equalTo("userID", someKey);
    
    
      Parse.Push.send({
        where: pushQuery, // Set our Installation query
        data: {
           alert: data
        }
    }, { success: function() {
          console.log("#### PUSH OK");
      }, error: function(error) {
          console.log("#### PUSH ERROR" + error.message);
      }, useMasterKey: true});
    
      response.success('success');
    });
    

    在 xcode 项目中这样做是为了发送推送通知

         // Send Push notification
            let pushStr = "@\(PFUser.current()![USER_USERNAME]!) | \n\(self.lastMessageStr)"
    
    
            let data = [ "badge" : "Increment",
                         "alert" : pushStr,
                         "sound" : "bingbong.aiff",
    
                ] as [String : Any]
            let request = [
                "someKey" : self.userObj.objectId!,
                "data" : data
    
                ] as [String : Any]
            PFCloud.callFunction(inBackground: "push", withParameters: request as [String : Any], block: { (results, error) in
                if error == nil {
                    print ("\nPUSH SENT TO: \(self.userObj[USER_USERNAME]!)\nMESSAGE: \(pushStr)\n")
                } else {
                    print ("\(error!.localizedDescription)")
                }
            })
    

    【讨论】:

    • 请解释一下你写的一些代码。感谢您的帮助,但如果 OP 知道有关您的代码的详细信息,那将更有意义
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-04-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多