简体   繁体   中英

Parse-server: iOS Push notification

I'm trying to make a push notification, I had set my .p12 files in parse-server/certs folder. Here is my code in my 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
      }
    ]
  }
});

I would like to send push notification by cloud code. So here is my 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});
});

And I call it in my Xcode project:

[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];
    }
}];

But that doesn't work: [Error]: {"code":1,"message":"Internal server error."} (Code: 1, Version: 1.12.0)

On Parse.com, I've "Installation" field in my DB: 屏幕截图

Have you got any idea ?

My cloud code wasn't right, here is the good code:

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});
});

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM