APNS证书澄清

时间:2013-08-26 11:45:50

标签: ios ssl-certificate apple-push-notifications

我正在调试已经提交到App Store的应用程序。该应用程序使用推送通知。到现在为止,我已经完成了错误,我将提交此应用程序的新版本。问题是我没有分发证书,因此我必须创建自己的(通过从证书颁发机构请求证书)以创建AppStore配置文件。问题是 - 这个版本的应用程序是否支持推送通知?我应该使用之前版本使用的APNS证书签名,还是非强制性的,我可以使用我刚刚创建的证书?

2 个答案:

答案 0 :(得分:3)

对于此版本的应用,您必须采用您为该应用程序的第一个版本所采取的每个步骤。请按照下列步骤操作: -

创建新的Certificate Authority,配置文件和SSL,并启用此ssl的推送通知服务。

制作一个.PEM并将其放在您的服务器上(放置Push Notification个服务器文件)。

现在使用此新配置文件为您的应用签名。

简单来说,请按照您先为版本所做的所有步骤进行操作。希望这有助于你!

答案 1 :(得分:3)

  1. 从keychan访问获取csr文件 - >证书助理 - >从证书颁发机构申请证书
  2. 在创建分发apns证书时提交csr文件
  3. 安装该cer文件并使用keychain access中的导出获取p12文件
  4. 现在您拥有了cer和p12文件,现在您可以使用以下命令生成pem文件

    a)openssl x509 -in aps_development.cer -inform der -out PushChatCert.pem

    b)openssl pkcs12 -nocerts -out PushChatKey.pem -in Certificates.p12

    c)cat PushChatCert.pem PushChatKey.pem> ck.pem

  5. 现在您可以将带有密码短语(即从上面的cmds生成)的pem文件发送到您的服务器

  6. php代码也在这里进行测试

    // Put your device token here (without spaces):
    //itouch 4 inch device token for development environment
    $deviceToken = '<device_token_without_spaces>';
    
    // Put your private key's passphrase here:
    $passphrase = '<your pass phrase>';
    
    
    // Put your alert message here:
    $message = 'My first push notification!';
    
    ////////////////////////////////////////////////////////////////////////////////
    
    $ctx = stream_context_create();
    
    stream_context_set_option($ctx, 'ssl', 'local_cert', 'ck.pem');
    
    stream_context_set_option($ctx, 'ssl', 'passphrase', $passphrase);
    
    //development
    //$ios_url = 'ssl://gateway.sandbox.push.apple.com:2195';
    
    //production(i.e distribution apns)
    $ios_url = 'ssl://gateway.push.apple.com:2195';
    
    
    // Open a connection to the APNS server
    $fp = stream_socket_client(
        $ios_url, $err,
        $errstr, 60, STREAM_CLIENT_CONNECT|STREAM_CLIENT_PERSISTENT, $ctx);
    
    if (!$fp)
        exit("Failed to connect: $err $errstr" . PHP_EOL);
    
    echo 'Connected to APNS' . PHP_EOL;
    
    // Create the payload body
    $body['aps'] = array(
        'alert' => $message,
        'sound' => 'default'
        );
    
    // Encode the payload as JSON
    $payload = json_encode($body);
    
    // Build the binary notification
    $msg = chr(0) . pack('n', 32) . pack('H*', $deviceToken) . pack('n', strlen($payload)) . $payload;
    
    // Send it to the server
    $result = fwrite($fp, $msg, strlen($msg));
    
    if (!$result)
        echo 'Message not delivered' . PHP_EOL;
    else
        echo 'Message successfully delivered' . PHP_EOL;
    
    // Close the connection to the server
    fclose($fp);