我制作了一款具有推送通知功能的通用应用。我相信你读这篇文章也会感到惊讶。
在生产版本(App store build)中,我在iPad上收到Push消息,而我的iPhone上没有收到此类通知。
应用程序是为通用构建的,所以当然代码相同,Appdelegate对iPad和iPhone都是一样的。
自从过去4年以来我一直在制作iOS从未遇到过这样的问题。
有一件事是肯定我的推送通知实施是正确的,否则我永远不会在我的iPad上收到推送消息。
任何帮助????
谢谢, PARTH
修订:
请检查下面的PHP代码,相同的代码(复制/过去)为我的另一个应用程序工作,为此它不会。 再次如果我发送推送单个设备我收到所有,但如果我尝试通过使用循环发送到所有设备我刚刚收到一个设备。 (可能是第一排表格)
$payload = json_encode($body);
for($i = 0; $i<count($deviceTokens); $i++) {
$msg = chr(0) . pack("n",32) . pack('H*', str_replace(' ', '',$deviceTokens[$i])) . pack("n",strlen($payload)) . $payload;
fwrite($fp, $msg);
}
fclose($fp);
这里我将echo置于for循环中,我得到了所有寄存器设备。
答案 0 :(得分:0)
for($i = 0; $i<count($deviceTokens); $i++) {
pushnotification_ios($deviceTokens, "Your Message");
}
循环调用此函数..
function pushnotification_ios($device_token, $message){
$passphrase = "Your_PEM_File_Password_Here";
$ctx = stream_context_create();
stream_context_set_option($ctx, 'ssl', 'local_cert', YOUR_PEM_FILE_PATH_HERE);
stream_context_set_option($ctx, 'ssl', 'passphrase', $passphrase);
// use this when you in sandbox mode..
$fp = stream_socket_client(
'ssl://gateway.sandbox.push.apple.com:2195', $err,
$errstr, 60, STREAM_CLIENT_CONNECT|STREAM_CLIENT_PERSISTENT, $ctx);
// use this when you in development mode..
// $fp = stream_socket_client(
// 'ssl://gateway.push.apple.com:2195', $err,
//$errstr, 60, STREAM_CLIENT_CONNECT|STREAM_CLIENT_PERSISTENT, $ctx);
$body['aps'] = array(
'badge' => $badge,
'alert' => $message,
'sound' => 'default',
'content-available' => '1'
);
//echo "<pre>"; print_r($body);
$payload = json_encode($body);
$msg = chr(0) . pack('n', 32) . pack('H*', $device_token) . pack('n', strlen($payload)) . $payload;
$result = fwrite($fp, $msg, strlen($msg)); //echo "<pre>"; print_R($result);
/*
if (!$result){
$data = array(
'Message' => 'Message not delivered' . PHP_EOL
);
} else {
$data = array(
'Message' => 'Message successfully delivered' . PHP_EOL
);
} //echo "<pre>"; print_R($result); */
fclose($fp);
return $result;
}