1

여러 장치에 대한 알림을 보내려고합니다. 그래서 배열에 토큰을 받고, 연결을 열고, 루프 내에서 알림을 보내고, 연결을 닫습니다.여러 장치에 푸시 알림 보내기 : 잠시 후 APNS 응답이 음수입니다.

그러나 9-10 장치 이후에는 전송이 중지됩니다. 나는 애플이 어떻게 든 연결을 끊었다 고 생각한다. 내 코드에 문제가

$message = 'Push'; 
$passphrase = 'mypass'; 
$ctx = stream_context_create(); 
stream_context_set_option($ctx, 'ssl', 'local_cert', 'MyPemFile.pem'); 
stream_context_set_option($ctx, 'ssl', 'passphrase', $passphrase); 

// Open a connection to the APNS server 
$fp = stream_socket_client(
    'ssl://gateway.push.apple.com:2195', $err, 
    $errstr, 60, STREAM_CLIENT_CONNECT|STREAM_CLIENT_PERSISTENT, $ctx); 
if (!$fp) 
    exit("Failed to connect: $err $errstr" . PHP_EOL); 
echo 'Connected to Apple service. ' . PHP_EOL; 

// Encode the payload as JSON 
$body['aps'] = array(
    'alert' => $message, 
    'sound' => 'default' 
    ); 
$payload = json_encode($body); 

$result = 'Start'.PHP_EOL; 
$tokenArray = array('mytoken'); 
foreach ($tokenArray as $item) 
{ 
// Build the binary notification 
$msg = chr(0).pack('n', 32).pack('H*', $item).pack('n', strlen($payload)).$payload; 
// Send it to the server 
$result = fwrite($fp, $msg, strlen($msg)); 
if (!$result) 
    echo 'Failed message'.PHP_EOL; 
else 
    echo 'Successful message'.PHP_EOL; 
} 
// Close the connection to the server 
fclose($fp); 

있습니까 :

여기 내 코드입니까? 연결을 한 번 열어야 알림을 보내고 닫아야한다고 생각합니다. 여러 토큰을 사용하여 fwrite()를 수행해야합니까? 나는 어떻게 모르겠다. 어떤 아이디어 나 해결책도 허용됩니다.

는 그런데 대답은 같다 :

Successful message 
Successful message 
Successful message 
Successful message 
Successful message 
Successful message 
Successful message 
Successful message 
Successful message 
Successful message 
Failed message 
Failed message 
Failed message 
Failed message 
Failed message 
... 
Failed message 

P.S. 동일한 코드로 문자 문제가 있지만 another question으로 해결됩니다. 다른 문제이며 복제본이 아닙니다.

답변

1

최초의 실패한 메시지는 문제가있을 가능성이 높습니다. 애플은 문제가 있다는 신호를 보내기 위해 연결을 닫습니다. 향상된 형식을 사용하고 있다면, Apple이 연결을 종료하기 전에 피드백을 통해 귀하가 보낸 통지에 어떤 문제가 있는지 확인할 수 있습니다. 이 후에는 더 많은 메시지를 보내려면 연결을 다시 설정해야합니다.

실패 할 수있는 데에는 여러 가지 이유가 있습니다. 당신이 잘못된 장치 토큰을 전송했을 수도, 당신의 페이로드 등, 무효 또는 잘못된 길이 될 수

최저 APNS에 대한 문서 체크 아웃 : 나는 그것이 내가 이후에 대한 잘못된 토큰 생각하지 않습니다 http://developer.apple.com/library/mac/#documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/CommunicatingWIthAPS/CommunicatingWIthAPS.html

+0

을 앱 위에 토큰 만 가져 가고있어. 나는 점검했다, 너무. 궁금한 점은 루프에 문제가 있으면 연결을 닫고 10 개의 토큰마다 다시 열면 변경됩니까? – kubilay

+3

애플은 가능한 한 오랫동안 연결을 열어두기를 원합니다. (오류가 발생하면 닫히기 때문에 짜증납니다.) 사과가 연결을 끊는 원인이되는 알림에 문제가 있습니다. 향상된 형식의 프로토콜을 사용해보십시오. 또는 APNS-PHP http://code.google.com/p/apns-php/와 같은 기존 라이브러리를 사용해보고 문제가 무엇인지 확인하십시오. – Redth

+1

내 데이터베이스에 첫 번째 항목으로 유효한 토큰을 넣으면 true라고 생각합니다. 그러나 토큰을 두 번째 위치 또는 다른 위치로 이동하면 첫 번째 항목으로 유효하지 않은 토큰을 사용하여 알림을받지 못합니다. – emotality