parsing推送通知不按时触发

在我的应用程序中,用户创build一个警报,上传要parsing的对象,并按照他们select的时间安排推送通知。 我昨天有工作,但由于某种原因今天,用户创build警报后,通知被触发。 我无法弄清楚,我不记得有什么改变。

这是我的代码来创build通知:

PFUser *user = [PFUser currentUser]; PFObject *alarm = [PFObject objectWithClassName:@"Alarm"]; alarm[@"Active"] = @YES; alarm[@"Bounty"] = IntNumber; alarm[@"ActionComplete"] = [NSNumber numberWithInt:0];; alarm[@"Time"] = _alarmTime; alarm[@"User"] = [PFUser currentUser]; NSLog(@"%@",_alarmTime); NSString *dateString = [NSString stringWithFormat:@"%f",[_alarmTime timeIntervalSince1970] * 1000]; NSString *clientId = [[PFUser currentUser] objectId]; NSLog(@"%@",dateString); alarm[@"aString"] = dateString; [alarm save]; NSString *objectID = [alarm objectId]; [PFCloud callFunctionInBackground:@"sendSilentPush" withParameters:@{ @"clientId":clientId, @"alarmTime":dateString, @"alarmTimeDate":_alarmTime, } block:^(id object, NSError *error) { }]; 

这是我的云代码:

 Parse.Cloud.define("sendSilentPush", function(request,response){ //Get user Id var recepeintId = request.params.clientId; var alarmTime = request.params.alarmTime; var alarmTimeDate = request.params.alarmTimeDate; //Get User hook using the ID using a query on user table var userQuery = new Parse.Query('_User'); userQuery.get(recepeintId, { success: function(user) { // object is an instance of Parse.Object. var pushQuery = new Parse.Query(Parse.Installation); pushQuery.equalTo('deviceType', 'ios'); //Send a push to the user Parse.Push.send({ where: pushQuery, "data" : { "content-available": 1, "sound": "", "extra": { "Time": alarmTime } } }).then(function() { response.success("Push was sent successfully.") }, function(error) { response.error("Push failed to send with error: " + error.message); }); }, error: function(user, error) { // error is an instance of Parse.Error. } }); }); 

杰克从头开始build立我不能重复你的错误。 有几件事你可能会忽略,我已经在下面概述了。 如果您使用Cloud Code设置了错误,则发送预定推送的正确方法如下。 但首先让我们讨论,因为我不能重现你的错误,在这种情况下头脑风暴可能占上风。

 var query = new Parse.Query(Parse.Installation); query.equalTo('deviceType', 'ios'); Parse.Push.send({ where: query, "data" : { "content-available": 1, "sound": "", "extra": {"Time": alarmTime} //confused what your trying to do here. } //remaining code 

extra不是数据字典支持的字段。 除非你创build了自己的,但是我没有看到你的代码中的其他任何地方。 我不知道为什么要为它创build一个新的字典呢? 另外,如果您确实想要创build一个新字段,那么只有在用户点击通知后打开应用程序后才会显示数据。

正确的语法与云代码

 var query = new Parse.Query(Parse.Installation); query.equalTo('deviceType', 'ios'); Parse.Push.send({ where: query, data : { alert: "Push from the Future!", badge: "Increment", sound: "", } push_time: new Date(2015, 01, 01) // Can't be no more than two weeks from today see notes below }, { success: function() { //Success }, error: function(error) { //Oops } }); 

不过,除非您绝对必须,否则我会敦促您不要使用Cloud Code。 还有其他方式发射本地推送通知,特别是苹果的方式。 这是用户友好的,并容易纳入这样的任务。 另一个原因是因为对于您执行的每个查询,它都会根据您的API请求计为1个请求。 如果您打算扩展您的应用程序或在未来增长观众,这可能很容易繁殖。 回到第一个原因,从设备发送本地推送通知。

在通过云代码调度您想要的方式时,还有一些事情需要考虑。

  1. 预定的时间不可能是过去的,而且将来可能会长达两个星期
  2. 它可以是一个ISO 8601的date(这基本上是国际上接受的表示YYYY-MM-DD的方法),如上面的例子中的date,时间和时区,或者它可以是表示UNIX纪元时间的数字值以秒为单位(UTC)
  3. 确保你已经安装了最新版本的Parse