2

push.apns.send 메서드는 success 콜백을 호출하지 않습니다. 따라서 성공적인 실행의 경우이 작업이 완료된 시점을 결정할 수 없습니다.Azure 모바일 서비스`push.apns.send`의 성공 콜백

push.apns.send(message.deviceToken, { 
    alert: message.alert, 
    badge: message.badge, 
    sound: message.sound, 
    payload: { 
     message: message.alert, 
     appID: message.appID 
    } 
    }, { 
    success: function(resp) { 
     console.log(resp) 
    }, 
    error: function(err) { 
     console.error(err) 
    } 
    }) 

error 콜백 작동 :

여기 내 코드 (이 데이터 테이블 중 하나에 삽입 이벤트를 실행하는 서버 측 스크립트의 일부)입니다. 예를 들어 잘못된 deviceToken을 전달하면 로그에 오류 메시지가 표시됩니다. 그러나 성공적인 실행의 경우 로그에 아무 것도 없습니다. 그것은 success 콜백을 전혀 호출하지 않는 것 같습니다.

이 예에서는 표시되지 않지만 내 경우에는 success 콜백이 필요하므로 레코드 상태를 변경하고 저장하십시오.

답변

5

불행히도, 그게 Apple Push Notification Service (APNS)의 작동 방식입니다. 기본적으로 커버 아래에 TCP 연결이 APNS에 열리고 메시지에 해당하는 바이트 (올바른 형식)가 서비스로 전송됩니다. 푸시가 성공하면 APNS는 응답을 보내지 않습니다. 그렇지 않으면 즉시 응답 할 수 있습니다 (오류 콜백이 호출되는 경우). 또는 나중에 피드백 서비스에 액세스하려고 시도하면 일 수 있습니다.에 오류가 있음을 알립니다.

그래서, 푸시가 성공하는 push.apns.send의 발신자를 알 수있는 신뢰할 수있는 방법이 없다는 것을 감안할 때 팀이 푸시에 성공했다는 잘못된 인상을 줄 것 success 콜백을 (추가 이해가되지 않습니다 결정).

처음에는 푸시를 보낸 다음 잠시 (setTimeout) 기다린 후 오류 콜백이 호출되지 않으면 푸시가 성공했다고 가정합니다. 위에서 언급 한 것처럼 100 % 정확하지는 않지만 시나리오에서는 충분할 수 있습니다.

+0

이제 알았습니다. 설명 및 해결 방법을 제공해 주셔서 감사합니다. 나는 그것이 우리를 위해 일할 것이라고 생각한다. –

-2

다음 코드를 변경하면 작동합니다.

success: function(data) { 
    console.log(data) 
},