푸시 알림을 보내는 첫 번째 앱이 아니지만 동시에 모든 사용자에게 알림을 보내는 것은 내 첫 번째 앱입니다.푸시 알림을 제대로 보내는 방법
모든 사용자가 알림을 수신하지는 않지만 일부 설정 만 올바른 것으로 설정되어 있습니다 (즉, 내 앱에 대한 알림이 사용 설정되어 있음). 코드가 올바른 이유는 일부 사용자에게 알림이 전송 되었기 때문입니다. 그래서 내 추측에 따르면 APNS와의 연결은 비동기 적이기 때문에 코드가 "실종"되는 사례가 있습니다. 잘못된 메시지 일 경우 알림을 보내는 대기열이 엉망이됩니다.
여기에 코드입니다 :
function sendNotification(){
$sql = "SELECT * FROM users WHERE phone = 'iPhone' AND pushID != ''";
try {
$db = getConnection();
$stmt = $db->prepare($sql);
$stmt->execute();
$users = $stmt->fetchAll(PDO::FETCH_OBJ);
$request = Slim::getInstance()->request();
$content = json_decode($request->getBody());
$message = $content->message;
foreach($users as $user){
// Put your device token here (without spaces):
$deviceToken = $user->pushID;
// Put your private key's passphrase here:
$passphrase = 'xxxxxxx';
////////////////////////////////////////////////////////////////////////////////
$ctx = stream_context_create();
stream_context_set_option($ctx, 'ssl', 'local_cert', 'xxxxx.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 APNS' . PHP_EOL;
// Create the payload body
$body['aps'] = array(
'alert' => $message,
'sound' => 'default'
);
// Encode the payload as JSON
$payload = json_encode($body);
// Build the binary notification
$msg = chr(0) . pack('n', 32) . pack('H*', $deviceToken) . pack('n', strlen($payload)) . $payload;
// Send it to the server
$result = fwrite($fp, $msg, strlen($msg));
if (!$result)
echo 'Message not delivered' . PHP_EOL;
else
echo 'Message successfully delivered' . PHP_EOL;
// Close the connection to the server
fclose($fp);
}
$db = null;
} catch(PDOException $e) {
echo '{"error":{"text":'. $e->getMessage() .'}}';
}
}
당신은 내가 아이폰과 내 모든 사용자를 가져오고 내가 그들에게 알림을 보내 볼 수 있듯이. 내 전화는 그 목록의 마지막 사용자이고 나는 그것을 얻지 못했고, 내가 아는 또 다른 사용자는 첫 번째 사용자이고 그녀는 그것을 가지고있다. 배열의 사용자 중 일부가 누락되었거나 처음 절반 만 오류가 표시됩니다.
나는 이것을 위해 Slim을 사용합니다.
당신이 저를 도울 수 있기를 바랍니다, 감사합니다!
여기에도 같은 문제가있었습니다. http://stackoverflow.com/questions/17116249/batch-multiple-ios-push-notification-code-works-for-2-devices-but-not-for-1 그것은 실제로 모든 장치에 전송되는 알림을 중지하는 내 db 테이블 맨 위에 하나의 잘못된 장치 토큰이었습니다. –
지금 막 모든 사용자에게 알림을 보내려고했는데 sandox 모드를 사용했는데 오류가 발생했을 것입니다. 내 토큰 중 하나가 개발 중이기 때문에 "메시지가 성공적으로 전송되었습니다"라는 메시지가 나오지 않았기 때문에 실제로 사과가 응답합니다. 하지만 "괜찮아"? – subharb
@subharb 보내는 알림의 수와 전송 속도에 따라 다릅니다. 예를 들어, 동시에 10 개의 알림 (일부 기기에 잘못된 기기 토큰이있는 알림)을 보내면 예외가 표시되지 않고 모든 것이 성공적으로 전송 된 것으로 보입니다. 다음 번에 동일한 소켓을 통해 알림을 보내려고하면 예외가 발생합니다. Apple은 "ALL OK"라고 대답하지 않습니다. 오류가 발생하면 응답을 보냅니다. 향상된 바이너리 형식을 사용해야 만 응답을 보냅니다. 자세한 내용은 내 답변에서 제공 한 링크를 읽으십시오. – Eran