2014-12-22 2 views
0

В моем приложении пользователь создает будильник, который загружает объект для разбора, а также рассылает push-уведомление за время, которое они выбирают. Вчера я работал, но по какой-то причине сегодня, сразу после того, как пользователь создает будильник, инициируется уведомление. Я не могу понять, я ничего не помню.Уведомление об отключении парса не запускается вовремя

Вот мой код, чтобы создать оповещение:

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




}); 
+0

Что такое alarmTime? Как вы это определяете? – soulshined

+0

@soulshined alarmTime is alarmTimeDate только отформатирован как строка. – Jack

+0

Вы настраиваете часовой пояс? – soulshined

ответ

3

Джек не может дублировать ошибку при сборке с нуля. Есть несколько вещей, которые вы могли бы игнорировать, о которых я рассказал ниже. Если ваш мертвый настроен с использованием 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 

дополнительный не поддерживается поле для словаря данных. Если вы не создали свой собственный, но я не вижу этого в вашем коде. И я не знаю, зачем вообще создавать для него новый словарь? Кроме того, если вы хотите создать новое поле, данные отображаются только после того, как пользователь открыл приложение после нажатия на уведомление.

ПРАВИЛЬНО СИНТАКСИС С CLOUD КОД

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

Однако, я хотел бы призвать вас не использовать облако код, если вы абсолютно не должны. Существуют и другие способы запуска локальных push-уведомлений, в частности, Apples. Он удобен и удобен в использовании для таких задач. Другая причина заключается в том, что для каждого выполняемого запроса он учитывает ваши запросы API как 1 запрос. Это может легко размножаться, если вы планируете расширить свое приложение или расширить аудиторию в будущем. Возвращаясь к первой причине, отправьте локальное push-уведомление с устройства.

Существует также пара вопросов, которые следует учитывать при планировании того, как вы хотите, используя код облака.

  1. в назначенное время не может быть в прошлом, и может быть до двух недель в будущем
  2. Это может быть дата ISO 8601 (которая в основном международно признанным способом представления YYYY-MM-DD) с даты, времени и часового пояса, как в приведенном выше примере, или он может быть числовое значение, представляющее время UNIX эпохи в секундах (UTC)
  3. Убедитесь, у вас есть последняя версия разбора установлена ​​
Смежные вопросы