我在php中使用此代码...
function pushnotificationios( $deviceToken, $message, $badges){
$passphrase = "12345";
$ctx = stream_context_create();
stream_context_set_option($ctx, 'ssl', 'local_cert', $_SERVER['DOCUMENT_ROOT'].'/include/ck.pem');
stream_context_set_option($ctx, 'ssl', 'passphrase', $passphrase);
$fp = stream_socket_client(
"ssl://gateway.push.apple.com:2195", $err,
$errstr, 60, STREAM_CLIENT_CONNECT|STREAM_CLIENT_PERSISTENT, $ctx);
$body['aps'] = array(
//'badge' => $badges,
'badge' => "+1",
'alert' => $message['message'],
'sound' => 'default',
'content-available' => '1'
);
$body['msg'] =$message;
$payload = json_encode($body);
$msg = chr(0) . pack('n', 32) . pack('H*', $deviceToken) . pack('n', strlen($payload)) . $payload;
$result = fwrite($fp, $msg, strlen($msg));
//echo "<pre>"; print_r($result);
fclose($fp);
return $result;
}
Run Code Online (Sandbox Code Playgroud)
.pem文件及其密码是否正确.但是当我点击这个功能时,只有在生产模式下,它才会让我返回false;
$result = pushnotificationios( $deviceToken, $message, $badges);
echo "<pre>"; print_r($result);
Run Code Online (Sandbox Code Playgroud)
这需要太多时间来回应.
目前我找不到任何解决方案..我的api将去苹果,我的通知无效.有趣的是它是一个聊天应用程序,整个应用程序基于通知.对我来说这是糟糕的一天.
如果有什么事情对我有用,请帮忙.
在生产模式下,请勿使用沙箱网址
$fp = stream_socket_client(
"ssl://gateway.push.apple.com:2195", $err,
$errstr, 60, STREAM_CLIENT_CONNECT|STREAM_CLIENT_PERSISTENT, $ctx);
Run Code Online (Sandbox Code Playgroud)
\n\n\n生产:
\n\nssl://gateway.push.apple.com:2195
\n
。
\n\n\n\n\n发展:
\n\nssl://gateway.sandbox.push.apple.com:2195
\n
在我的应用程序中。我直接把deviceToken它放进去NSData
- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken\n{\n NSString *deviceTokenString = [NSString stringWithFormat:@"%@", deviceToken];\n // this is producing something like:\n // <xxxxxxx 9b0f527f xxxxxxxx 2727ed28 xxxxxxxx 4e693a61 xxxxxxx ac2f7dbb>\n // \n // and i am directly saving that to my servers database\nRun Code Online (Sandbox Code Playgroud)\n\n这是我的服务器中的内容。
\n\n/***\n* Function: template_user_info \n* \n* Parameter\n* \xe2\x80\xa2 $message_input\n* - String message\n* \xe2\x80\xa2 $token_array\n* - Array contains: `token` ex. "<xxxxxxx 9b0f527f xxxxxxxx 2727ed28 xxxxxxxx 4e693a61 xxxxxxx ac2f7dbb>"\n* Note:\n* this removes the \'<\' and \'>\' to make the device token valid\n* `$device_token = str_replace(">","",str_replace("<","",$device_token));`\n* ---\n*/\n\npublic function __push_notification($message_input, $token_array) \n{\n $push_config = array(\n\n "development" => array(\n "status" => true,\n "cert" => realpath(\'xxx.pem\'),\n "pass" => \'xxxxxx\',\n "server" => \'ssl://gateway.sandbox.push.apple.com:2195\'\n ),\n "production" => array(\n "status" => true,\n "cert" => realpath(\'xxx.pem\'),\n "pass" => \'xxxxxx\',\n "server" => \'ssl://gateway.push.apple.com:2195\'\n )\n );\n\n $message = stripslashes($message_input);\n\n foreach ($push_config as $key => $value) \n {\n if ($value[\'status\'] === true)\n $this->__exe_push_notification($message, $value, $token_array);\n }\n}\n\nprivate function __exe_push_notification($message, $config, $token_array)\n{\n $cert = $config[\'cert\'];\n $pass = $config[\'pass\'];\n $server = $config[\'server\'];\n\n $payload = \'{\n "aps" :\n {\n "alert" : "\'.$message.\'",\n "badge" : 1, \n "sound" : "bingbong.aiff"\n }\n }\';\n\n $ctx = stream_context_create();\n stream_context_set_option($ctx, \'ssl\', \'local_cert\', $cert);\n stream_context_set_option($ctx, \'ssl\', \'passphrase\', $pass);\n\n $fp = stream_socket_client($server, $err, $errstr, 60, STREAM_CLIENT_CONNECT|STREAM_CLIENT_PERSISTENT, $ctx);\n\n if (!$fp) \n {\n // echo "Failed to connect $err $errstr <br>";\n\n return;\n }\n else \n // echo "Post notification sent<br>";\n\n $dev_array = array();\n\n $dev_array = $token_array;\n\n foreach ($dev_array as $device_token) \n {\n $device_token = str_replace(">","",str_replace("<","",$device_token));\n\n $msg = chr(0) .\n pack("n", 32) . \n pack(\'H*\', str_replace(\' \', \'\', $device_token)) . \n pack("n", strlen($payload)) . \n $payload;\n\n // echo "sending message :" . $payload . "n";\n\n fwrite($fp, $msg);\n }\n fclose($fp);\n}\nRun Code Online (Sandbox Code Playgroud)\n\n如果您仍然无法发送通知,请检查此故障排除推送通知
\n\n编辑
\n\n不久前我一直在查看您的推送通知推送,然后我注意到您的\'badge\' => "+1"\n您不能像那样增加徽章。
唯一的选择是在您的应用程序中管理它并使用数据库来保持正轨。
\n\n也许它是导致问题的原因..并且必须badge是一个数字,如下:表 3-1
并且检查此讨论也可能对您有帮助。
\n\n编辑 02/12/19 \n我已经更新了推送通知的 php 代码以支持开发和生产。
\n| 归档时间: |
|
| 查看次数: |
3267 次 |
| 最近记录: |