推送通知适用于开发,而非生产

时间:2016-03-03 04:08:27

标签: php ios objective-c push-notification apple-push-notifications

我一直在努力想知道如何从沙箱APNS到生产APNS。下面是用于向我的应用程序发送通知的PHP代码。

$passphrase = 'SomethingStrong';

$ctx = stream_context_create();
stream_context_set_option($ctx, 'ssl', 'local_cert', $_SERVER['DOCUMENT_ROOT'] . '/ck.pem');
stream_context_set_option($ctx, 'ssl', 'passphrase', $passphrase);

$fp = stream_socket_client(
    'ssl://gateway.sandbox.push.apple.com:2195', $err,
    $errstr, 60, STREAM_CLIENT_CONNECT|STREAM_CLIENT_PERSISTENT, $ctx);

if (!$fp)
{
    //return json_encode(array('response' => 'connection_fail'));
}

$body['aps'] = array(
    'alert' => $message,
    'sound' => 'default'
    );

$payload    = json_encode($body);
$msg        = chr(0) . pack('n', 32) . pack('H*', $deviceToken) . pack('n', strlen($payload)) . $payload;

$result     = fwrite($fp, $msg, strlen($msg));

if (!$result)
    return json_encode(array('response' => 'unsuccessful'));
else
    return json_encode(array('response' => 'successful'));

fclose($fp);

当我保留网址ssl://gateway.sandbox.push.apple.com:2195时,这一切都有效,但是当我将其更改为ssl://gateway.push.apple.com:2195时,我的应用程序没有通知,但PHP输出它已成功发送。

我正在使用开发证书进行代码签名。

我是通知新手,之前从未使用过它们,如果我做的事情非常明显,那就很抱歉。感谢。

3 个答案:

答案 0 :(得分:1)

有两件事,你需要确认:

  • 使用分发配置文件生成构建
  • 您使用生产pem文件从PHP服务器发送PUSH

Push Notification Certificate

答案 1 :(得分:0)

您正在为生产设置正确的ssl套接字ssl://gateway.push.apple.com:2195

检查证书或您上传到服务器的ck.pem文件应该是生产。

同时检查您为构建选择的配置文件分发配置文件

答案 2 :(得分:0)

所有内容都设置正确,但我的Ad Hoc配置文件及其代码签名方式存在问题。一切都很好!谢谢!