2014-12-22 4 views
0

내 응용 프로그램에서 사용자는 구문 분석 할 개체를 업로드하는 알람을 만들고 선택한 시간 동안 푸시 알림을 예약합니다. 나는 어제 작동했지만 오늘은 어떤 이유로 사용자가 알림을 생성 한 직후에 알림이 트리거됩니다. 나는 그것을 알아낼 수 없다, 나는 아무것도 바꾸는 것을 기억하지 않는다. 구문 분석 푸시 알림이 시작되지 않음

다음은 통지 만드는 내 코드입니다 :

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은 alarmTimeDate이며 문자열로만 형식이 지정됩니다. – Jack

+0

시간대를 설정하고 있습니까? – soulshined

답변

3

잭이 내가 당신의 오류를 복제 할 수 없습니다. 아래에 간략히 설명해 놓은 몇 가지 사항이 있습니다. 클라우드 코드를 사용하여 죽은 사람이 설정 한 경우 예약 된 푸시를 보내는 올바른 방법은 다음과 같습니다. 하지만 먼저 오류를 재현 할 수 없으므로 논의를 시작하십시오.이 경우 브레인 스토밍이 우선 할 수 있습니다.

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

그러나, 나는 당신이 절대적으로 필요하지 않는 클라우드 코드를 사용하지 않는 당신을 촉구한다. 로컬 푸시 알림을 실행하는 다른 방법, 특히 사과 방법이 있습니다. 이와 같이 사용자 친화적이고 통합하기 쉽습니다. 또 다른 이유는 실행하는 모든 쿼리에 대해 API 요청에 대해 1 회의 요청으로 계산되기 때문입니다. 앱을 확장하거나 향후 잠재 고객을 늘리려는 계획이라면 쉽게 늘릴 수 있습니다. 첫 번째로 돌아가서 기기에서 로컬 푸시 알림을 보냅니다.

클라우드 코드를 통해 원하는 방식으로 일정을 계획 할 때 고려해야 할 몇 가지 사항이 있습니다.

  1. 예약 된 시간은 과거에있을 수 없으며, 기본적으로 YYYY-MM-DD를 대표하는 국제적으로 인정 된 방법이다 (그것은이 ISO 8601 날짜 될 수있는 미래
  2. 2 주까지 가능) 위의 예에서와 같이 날짜, 시간 및 시간대로, 또는 초 유닉스 시대 시간 (UTC)
  3. 것은 당신이 구문 분석의 최신 버전
관련 문제