前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >iOS开发——APNs推送

iOS开发——APNs推送

作者头像
羊羽shine
发布2019-05-29 17:04:16
1.4K0
发布2019-05-29 17:04:16
举报
文章被收录于专栏:Golang开发

P12文件

访问 苹果开发者账户,进入帐号首页,选择Certificates, Identifiers & Profiles

image.png

在 Certificates, Identifiers & Profiles 中,点击 App IDs 创建应用的AppID。

image.png

此处需要指定完整的 Bundle ID,不能使用通配符星号,拥有通配符appID是无法正常使用APNs推送服务。

image.png

为 App 开启 Push Notification 功能。如果是已经创建的 App ID 也可以通过设置开启 Push Notification 功能。

image.png

如果你之前没有创建过 Push 证书或者是要重新创建一个新的,请在证书列表下面新建。 APNs 证书有开发(Development)和生产(Production)两种。开发证书用于开发调试使用;生产证书既能用于开发也可以产品发布,但是建议开发和发布分开以免出现推送事故。

image.png

点击 "Continue", 之后选择该证书准备关联的 AppID。

image.png

上传 CSR 文件,

image.png

打开系统自带的 钥匙串KeychainAccess 创建 CSR 文件

image.png

填写“用户邮箱”和“常用名称” ,并选择“存储到磁盘”,证书文件后缀为 .certSigningRequest

image.png

上传刚刚生成的后缀为 .certSigningRequest 的文件。 生成证书成功后,点击 “Download” 按钮把证书下载下来,是后缀为 .cer 的文件

image.png

在钥匙串列表中“登录”——“我的证书”,找到刚才下载的证书,并导出为 .p12 文件

image.png

PEM文件

p12文件生成pem的脚本

代码语言:javascript
复制
#gen
openssl pkcs12 -clcerts -nokeys -out cert.pem -in Certificates.p12
openssl pkcs12 -nocerts -out key.pem -in Certificates.p12
openssl rsa -in key.pem -out key.unencrypted.pem
cat cert.pem key.unencrypted.pem > ck.pem

#clear
rm cert.pem
rm key.pem
rm key.unencrypted.pem

推送测试

将生成的pem文件和PHP在一个文件夹下 修改发送的token地址

代码语言:javascript
复制
<?php
//Usage: php pushMe.php (sandbox 1 password 123456 token xxx message 'push test')

//Params
$params = array(
    'sandbox' => 1,
    'token' => '9bf41ed10a47ac3efcea9bb4c670f557dc60366d815192b49dbc471b01617ca5',
    'password' => '123456',
    'message' =>'baxiang test!',
    );

if ($argc > 1){
    for ($i = 1; $i < $argc; $i+=2){
        $key = $argv[$i];
        $value = '';
        if ($i+1 < $argc) $value = $argv[$i+1];
        $params[$key] = $value;
    }
}
// print_r($params);

// Put your device token here (without spaces):
$deviceToken = $params['token'];

// Put your private key's passphrase here:
$passphrase = $params['password'];  //password

// Put your alert message here:
$message = $params['message'];

$host = 'ssl://gateway.push.apple.com:2195';
if ($params['sandbox'] == 1) $host = 'ssl://gateway.sandbox.push.apple.com:2195';

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

$ctx = stream_context_create();
stream_context_set_option($ctx, 'ssl', 'local_cert', 'ck.pem');
stream_context_set_option($ctx, 'ssl', 'passphrase', $passphrase);
stream_context_set_option($ctx, 'ssl', 'verify_peer', false);
// Open a connection to the APNS db2_server_info(connection)
$fp = stream_socket_client(
    $host, $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'
    );
$body['msgType'] = 'ORDER';

// 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 to '.$host . PHP_EOL;
else
    echo 'Message successfully delivered to '.$host . PHP_EOL;

// Close the connection to the server
fclose($fp);

测试发送PHP

代码语言:javascript
复制
php pushTest.php

image.png

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017.09.18 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • P12文件
  • PEM文件
  • 推送测试
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档