IOS企业级推送证书制作及本地推送验证小记

        做IOS开发也有好几年了,期间免不了要跟证书打交道,记得因为证书被坑了N次,每次制作或者更新都要百度谷歌一番,为此抽出点时间将自己制作推送证书的过程记录下来,加深记忆的 同时,希望也能帮到为此困惑的亲们。(ps:开发狗都不容易啊╮(╯▽╰)╭)

1.打开钥匙串,制作证书请求文件(这一步就不多说了,不会的请右转)

IOS企业级推送证书制作及本地推送验证小记_第1张图片

在证书助理里填写相关字段,注:常用名称对应钥匙串里生成后的密钥对名称

IOS企业级推送证书制作及本地推送验证小记_第2张图片

点击继续,本地存储certSigningRequest文件后,可以在钥匙串里看到对应的密钥信息,


IOS企业级推送证书制作及本地推送验证小记_第3张图片

2.制作推送证书

登录苹果开发者中心https://developer.apple.com/,进入 account,进入Profiles,选择第一项certificates/production(以发布推送证书为例,制作开发版推送证书与此相同),点击右上角 “+”,创建证书。

IOS企业级推送证书制作及本地推送验证小记_第4张图片

选择“In-House and Ad Hoc”(企业级),并点击下一步

IOS企业级推送证书制作及本地推送验证小记_第5张图片

下一步直到选择上传CSR文件界面,这个CSR File 就是我们从证书助理请求生成的文件,上传然后下一步,选择要绑定的app id(即要实现推送服务的APP ID),完成创建。

IOS企业级推送证书制作及本地推送验证小记_第6张图片




2.制作后台可用的推送证书相关文件

      下载已生成的推送证书存储至本地:aps.cer,双击安装到钥匙串。找到已安装的证书,导出并设置密码,得到appPushKey.p12 文件

IOS企业级推送证书制作及本地推送验证小记_第7张图片

目前为止 已有 appPush.certSigningRequest(证书请求文件)

                         aps.cer (原始推送证书)

                         appPushKey.p12(安装推送证书后,从钥匙串导出的加密P12文件)

格式转换:

openssl x509 -in aps.cer -inform DER -out appPushCert.pem-outform PEM (将aps.cer转换为pem格式文件)

openssl pkcs12 -nocerts -out appPushKey.pem-in appPushKey.p12  (将appPushKey.p12转换为pem格式文件)

cat appPushCert.pem appPushKey.pem >AllInOne.pem (得到可以供php调用的pem文件)

openssl pkcs12 -export -in AllInOne.pem -out AllInOne.p12 (得到可以供java后台调用的p12文件)

全部过程完成后,可以对推送证书进行验证:

openssl s_client -connect gateway.sandbox.push.apple.com:2195-cert appPushCert.pem-key appPushKey.pem

出现类似截图信息 则表示推送证书有效可用。

IOS企业级推送证书制作及本地推送验证小记_第8张图片

3.后台服务测试代码

PHP:


// Put your device token here (without spaces):

$deviceToken = 'f46bdb2a34c3f8e02c50c1f4213cf1aa9a2bd4fadfba5876da1c7f432a15ceb4';

//    $deviceToken = '1843D7E2-97A6-44F8-9A2E-E18A8D516A6A';

// Put your private key's passphrase here:密语

$passphrase = 'wangfeng1990';

// Put your alert message here:

$message = '新的待办任务hahahah!';

////////////////////////////////////////////////////////////////////////////////

$ctx = stream_context_create();

stream_context_set_option($ctx, 'ssl', 'local_cert', 'AllInOne.pem');

stream_context_set_option($ctx, 'ssl', 'passphrase', $passphrase);

//gateway.sandbox.push.apple.com:2195

// Open a connection to the APNS server

$fp = stream_socket_client(

'ssl://gateway.push.apple.com:2195', $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',

    'badge' => '1'

);

// 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);


?>

你可能感兴趣的:(IOS企业级推送证书制作及本地推送验证小记)