iPhone 앱을 개발하고 개발 및 임시 버전에 대한 푸시 알림이 제대로 작동합니다. 그러나 데이터베이스의 실제 사용자 장치에 푸시 알림을 보내려고하면 SSL 연결이 재설정 된 다음 깨진 파이프 오류가 발생합니다. 우리 데이터베이스 (70000 개 이상)에 너무 많은 장치가있는 것 같아서 동시에 모든 메시지를 보내지 못했습니다. 그래서 우리는 한번 1000 개의 장치로 메시지를 보내려고하지만 약 100 개의 메시지에 대해이 "브로큰 파이프"오류가 계속 발생합니다. 그리고 우리는 메시지가 전송되었는지 확실하지 않습니다. 어떠한 제안?푸시 알림을 만들려고 할 때 SSL이 깨졌습니다.
답변
이 문제를 해결했습니다. 데이터베이스 테이블의 유효하지 않은 토큰으로 인해 손상되었습니다. 사과 apns 서비스는 유효하지 않은 토큰이있는 경우 연결을 끊습니다. 연결이 끊어지기 때문에 메시지를 다시 보내려고하면 "깨진 파이프"오류가 발생합니다. 기본적인 해결책은 파이프에 쓰는 것이 성공했는지 아닌지 확인하는 것입니다. 그렇지 않은 경우 약간의 지연 후에 연결을 끊었다가 다시 연결하십시오.
내가 어떻게 코드화했는지 설명했으면 좋겠다. Mona Jun 14 at 23:52 – Mona
보통 모든 사용자의 장치 토큰을 통해 루프를 돌릴 때 일어난다. 만약 실패하면 체인 종류가 깨지고 같은 오류가 발생한다. 최근 장치 토큰을 가진 사용자를 분류하고 우리의 끝에 길이를 검사하는 것은 할 수있다, 그것은 그 후에 일했다. 답변 해 주셔서 감사합니다.~ –
emagic이 정확하면 유효하지 않은 토큰으로 인해 "broken pipe"오류가 발생할 수 있습니다. 그것이 발생할 수있는 몇 가지 다른 이유가 있습니다. 다음은 Apple Technical Note TN2265에서입니다.
가장 일반적인 문제는 잘못된 장치 토큰입니다. 토큰이 개발 빌드를 집에서 테스트하는 경우와 같이 샌드 박스 환경에서 으로 제공된 경우 프로덕션 푸시 서비스로 보낼 수 없습니다. 각 푸시 환경은 동일한 장치 또는 컴퓨터에 대해 다른 토큰을 발행합니다. 기기 토큰을 잘못된 환경으로 보내면 푸시 서비스에 잘못된 토큰으로 표시되고 알림을 무시합니다.
잘못된 기기 토큰은 사용자가 기기 또는 컴퓨터에서 앱을 삭제했음을 의미 할 수도 있습니다. 유효하지 않은 장치 토큰에 대해 적어도 하루에 한 번 피드백 서비스를 확인해야합니다.
다른 가능한 문제는 256 바이트보다 긴 페이로드를 보내거나 페이로드가 올바르게 포맷되지 않았거나 JSON 사전의 구문이 잘못되었을 수 있습니다.
제공자가 유휴 상태 일 때 가끔씩 연결이 끊기는 경우 과 관련이 없습니다. 연결을 다시 설정하고 계속 수행하십시오. 고정 서버의 이 다운 된 경우 을 정적 IP 주소가 아닌 호스트 이름으로 연결한다고 가정하면 부하 분산 메커니즘은 이 다른 서버로 투명하게 연결되도록합니다. emagic의 대답에 확장
이 내 PHP 코드 snipplet입니다 : 우리는 같은 문제가 발생하는
private $fp;
private function connect(){
$apnsHost = 'gateway.push.apple.com';
$apnsCert = 'certs/cert.pem';
$apnsPort = 2195;
$pass = "blah";
$streamContext = stream_context_create();
stream_context_set_option($streamContext, 'ssl', 'local_cert', $apnsCert);
stream_context_set_option($streamContext, 'ssl', 'passphrase', $pass);
$this->fp = stream_socket_client('ssl://' . $apnsHost . ':' . $apnsPort, $err, $errstr, 60, STREAM_CLIENT_CONNECT|STREAM_CLIENT_PERSISTENT, $streamContext);
if (!$this->fp) return("Failed to connect: $err $errstr<br>");
echo 'Connected to APNS<hr />';
}
private function send(){
$this->connect();
foreach($pushes as $push) {
$payload['aps'] = array('alert' => $push->text, 'badge' => 0, 'sound' => 'default');
$payload2 = json_encode($payload);
$msg = chr(0) . pack('n', 32) . pack('H*', $push->token) . pack('n', strlen($payload2)) . $payload2;
try {
$result = fwrite($this->fp, $msg, strlen($msg));
}
catch (\Exception $e) {
fclose($this->fp);
echo('Error sending payload: ' . $e->getMessage());
sleep(5);
$this->connect();
}
}
}
- 1. 푸시 알림을 효과적으로 처리합니다.
- 2. 앱을 닫을 때 푸시 알림을 보내려면 어떻게해야합니까?
- 3. C2DM 푸시 알림을 수신 할 때 활동 동작 변경
- 4. 푸시 알림을 수신하지 못했습니다.
- 5. 푸시 알림을 안드로이드 1.6
- 6. 아이폰에서 푸시 알림을 수신 할 수 없음
- 7. 는 어떻게 푸시 알림을 처리 할 수
- 8. 웹 프로젝트를 만들려고 할 때
- 9. 푸시 알림을 사용할 수 있습니까?
- 10. APNS로 사과 푸시 알림을 날카롭게
- 11. 푸시 알림을 사용하여 실시간 채팅
- 12. PHP 서버로 알림을 푸시 하시겠습니까?
- 13. 푸시 알림을 중단하여 Apple에 전달합니다.
- 14. apns에는 ssl이 필요합니까?
- 15. 시뮬레이터에서 푸시 알림을 확인할 수 있습니까?
- 16. 앱이 닫히는 동안 푸시 알림을 열 때 새로운보기를 푸시하는 방법?
- 17. 푸시 알림을 사용하여 지정된 페이지에서 앱 열기
- 18. EXC_BAD_ACCESS 새 NSDictionary를 만들려고 할 때
- 19. JSONArray를 만들려고 할 때 JSONException이 발생했습니다.
- 20. Amazon SNS에서 모바일 장치로 알림을 직접 푸시 할 수 있습니까?
- 21. 아이폰 애플리케이션에서 푸시 알림을 어떻게 할 수 있습니까?
- 22. Apache Thrift가 클라이언트에 알림을 푸시 할 수 있습니까?
- 23. iOS 3.0에서 로컬 푸시 알림을 사용하려면 어떻게해야하나요?
- 24. 외부 XMPP 서버에서 iPhone의 알림을 푸시
- 25. IOS에서 푸시 알림을 다시 요청할 수 있습니까?
- 26. Java의 알림 트레이 응용 프로그램에 알림을 푸시
- 27. Ad Hoc 빌드 푸시 알림을 등록하지 않았습니다.
- 28. iOS - 푸시 알림 : 항상 알림을 표시합니까?
- 29. 사과 푸시 알림을 어떻게 구현할 수 있습니까 ??
- 30. 아이폰에서만 특정 푸시 알림을 표시하는 방법은 무엇입니까?
; 10 만 명의 사용자가 있습니다. 우리가 알 수있는 한 알림은 첫 번째 100 개 또는 그 이후에 도달하지만 그 이후에는 도달하지 않을 것이라고 알릴 수 있습니다. 나는 전송 된 통지에 한도 (횟수 또는 시간)가 있다고 가정 할 수 있습니다. 정말이를 확인하는 사람과 함께 할 수 있습니까? – Wex