PHP 및 Yii 프레임 워크를 사용하여 IOS에 푸시 알림을 보내려고합니다. 데이터를 얻고 알림을 보내기 위해 다음과 같은 함수를 만들었습니다. $ data는 등록 ID (장치 토큰)를 유지하기 위해 내부에 메시지와 배열을 포함하는 배열입니다. 내 로컬 호스트에서 실행했지만 알림이 내 장치로 전송되지 않습니다. 그건 그렇고, 내 함수의 출력은 정수 값이며 메시지가 전송되었는지 또는 무엇인지 알 수 없습니다!?
내 코드에 문제가 있습니까?
private function _pushIOS($data)
{
// Create a connection
$apnsHost = $this->_notificationUrl;
$apnsPort = 2195;
$apnsCert = Yii::app()->controller->createUrl('/').'/my_certificate_dev.pem';
$streamContext = stream_context_create();
stream_context_set_option($streamContext, 'ssl', 'local_cert', $apnsCert);
$apns = stream_socket_client('ssl://' . $apnsHost . ':' . $apnsPort, $error, $errorString, 2, STREAM_CLIENT_CONNECT, $streamContext);
if (!$apns)
exit("Failed to connect: $error $errorString" . PHP_EOL);
foreach($data['registration_ids'] as $deviceToken) {
$body = array();
$body['aps'] = array(
'alert' => $data['data']['message'],
'badge' => 1,
'sound' => 'default'
);
// Encode the payload as JSON
$payload = json_encode($body);
// Build the binary notification
$apnsMessage = chr(0) . chr(0) . chr(32) . pack('H*', str_replace(' ', '', $deviceToken)) . chr(0) . chr(strlen($payload)) . $payload;
// Send it to the server
$result = fwrite($apns, $apnsMessage, strlen($apnsMessage));
}
// Close the socket and connection to the server
@socket_close($apns);
fclose($apns);
return json_decode($result);
}
드디어 답을 얻었습니다. 문제는 pem 파일 경로에있었습니다. 작동하려면 함수에 절대 경로를 전달해야합니다. 다음 줄을 바꿔야합니다.
$apnsCert = Yii::app()->controller->createUrl('/').'/my_certificate_dev.pem';
올바른 경로 :
$apnsCert = dirname(Yii::app()->request->scriptFile).'/my_certificate_dev.pem';
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다