【问题标题】:Push notifications work for development, not production推送通知适用于开发,而不是生产
【发布时间】:2016-06-16 05:42:49
【问题描述】:

过去我一直在尝试弄清楚如何从沙盒 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);

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

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

我是通知的新手,以前从未使用过它们,如果我做了一些非常明显的事情,很抱歉。谢谢。

【问题讨论】:

  • 发送生产通知需要设置production.pem文件。
  • @Alec 检查this 以生成证书。
  • @PramodTapaniya 我重新做了证书过程,但它仍然没有做任何事情。
  • @Yash 我用了他的教程,重新做了证书,什么都没有。
  • @Alec 获取 iPhone 上的生产通知,您必须通过 adHoc 配置文件在 iPhone 上安装应用程序。

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


【解决方案1】:

有两件事,你需要确认:

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

【讨论】:

  • 我无法使用分发配置文件构建并在手机上运行它。我怎么做?我只能运行开发配置文件。
  • 你应该可以做到。当您从 Xcode 使用您的分发配置文件运行您的应用程序时,它将被安装但不会在第一次运行。从主屏幕再次打开您的应用程序,您已经安装了分发版本。或者您可以简单地创建一个带有分发配置文件的 ipa 文件,并将其安装在您的设备中。或者如果您遇到其他错误,请告知。
  • 我不断收到这个...“您应用程序的代码签名权利文件中指定的权利与您的配置文件中指定的权利不匹配。(0xE8008016)。”
  • 这些都不起作用。我做对了所有证书的东西,但是当我为分发而构建时,我不能把它放在我的手机上。我可以把开发者代码签名放在手机上,但我还是需要在 PHP 代码中使用沙箱。
【解决方案2】:

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

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

同时检查您为构建选择的provisioning profile应该是Distribution profile。

【讨论】:

【解决方案3】:

一切设置正确,但我的 Ad Hoc 个人资料及其代码签名方式存在问题。现在一切都很好!谢谢!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多