Parse-server:iOS 推送通知

Posted

技术标签:

【中文标题】Parse-server:iOS 推送通知【英文标题】:Parse-server: iOS Push notification 【发布时间】:2016-04-12 22:07:53 【问题描述】:

我正在尝试发出推送通知,我已将 .p12 文件设置在 parse-server/certs 文件夹中。这是我在 index.js 中的代码:

var api = new ParseServer(  
    databaseURI: process.env.DATABASE_URI || 'mongodb://localhost:27017/dev',  
    cloud: process.env.CLOUD_CODE_MAIN || __dirname + '/cloud/main.js',
    appId: 'xx',  
    masterKey: 'xx',
    fileKey: 'xx',  
    clientKey: 'xx',
    serverURL: 'xx',
    push: 
    ios: [
      
        pdx: 'certs/ParsePushDevelopmentCertificate.p12', // Dev PFX or P12
        bundleId: 'bundleId',
        production: false // Dev
      
    ]
  
);

我想通过云代码发送推送通知。所以这是我的 main.js:

Parse.Cloud.define("pushToAll", function (request, response) 
    var message = request.params.message;
    if (message != null && message !== "") 
        message = message.trim();
     else 
     response.error("Must provide \"message\" in JSON data");
     return;
    

    // Can see this at https://www.parse.com/apps/APP_NAME/cloud_code/log
    var logMessage = "Sending \"0\" to all installations".format(message);
    console.log(logMessage);

    var pushQuery = new Parse.Query(Parse.Installation);
    // pushQuery.containedIn("deviceType", ["ios", "android"]); // errors if no iOS certificate

    // Send push notification to query
    Parse.Push.send(
        where: pushQuery, // Set our installation query
        data: 
            alert: message
            
        , 
        success: function () 
            // Push was successful
            console.log("Message was sent successfully");
            response.success('true');
        ,
        error: function (error) 
            response.error(error);
        
   , useMasterKey: true);
);

我在我的 Xcode 项目中调用它:

[PFCloud callFunctionInBackground:@"pushToAll" withParameters:@@"message" : @"test" block:^(id object, NSError *error) 
    if (!error) 
        NSLog(@"YES");
     else 
        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Try Again !" message:@"Check your network" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil, nil];
        [alert show];
    
];

但这不起作用:[Error]: "code":1,"message":"Internal server error." (Code: 1, Version: 1.12.0)

在 Parse.com 上,我的数据库中有“安装”字段:

你有什么想法吗?

【问题讨论】:

确保您能够先连接到 Parse - Server。向上发送或向下拉以确保您的应用已正确连接。 @DanL 是的,它工作正常:添加/删除对象,其他 PFCloud 方法工作正常,但通知推送的 PFCloud 不起作用。 如果您在配置中同时设置生产和开发证书,您每次在控制台中都会收到至少一个错误,因为服务器尝试双向发送,显然其中一个总是失败,您应该分开此刻为开发和生产解析服务器...提供一些日志,当云代码运行时会发生什么 【参考方案1】:

我的云代码不对,这里是好的代码:

Parse.Cloud.define("pushToAll", function (request, response) 
    var message = request.params.message;
    console.log(message);
    if (message != null && message !== "") 
        message = message.trim();
     else 
     response.error("Must provide \"message\" in JSON data");
     return;
    

    // Can see this at https://www.parse.com/apps/APP_NAME/cloud_code/log
    // var logMessage = "Sending to all installations".format(message);
    // console.log(logMessage);

    var pushQuery = new Parse.Query(Parse.Installation);
    // pushQuery.containedIn("deviceType", ["ios", "android"]); // errors if no iOS certificate

    // Send push notification to query
    Parse.Push.send(
        where: pushQuery, // Set our installation query
        data: 
            "alert": message
            
        , 
        success: function () 
            // Push was successful
            console.log("Message was sent successfully");
            response.success('true');
        ,
        error: function (error) 
            response.error(error);
        
   , useMasterKey: true);
);

【讨论】:

@cricket_007 ,谢谢,但我改变了它,我为我的情况改进了它 @Viny76,你能分享你的 cURL 语法来让这个云推送发送吗?我照原样复制了你的函数,只是取出了 var 消息并使用了一个简单的字符串。我的 cURL = curl -X POST -H "X-Parse-Application-Id: myAppId" -H "Content-Type: application/json" -d h t t p s ://__myApp__.herokuapp.com/parse/functions/pushToAll .也尝试了不同的语法,但出现错误。最新错误:“XMLHttpRequest failed: \"Unable to connect to the Parse API\"。我可以访问云代码,因为默认示例代码返回 "result":"Hi"。谢谢。

以上是关于Parse-server:iOS 推送通知的主要内容,如果未能解决你的问题,请参考以下文章

如何自定义推送通知?

在 Heroku 上使用推送通知

推送通知不起作用 / Heroku-mLab

托管解析是不是支持推送通知?

解析服务器无法发送推送通知?

未收到在 Back4App 上解析的 Android 推送通知