iOS 推送所需的授权文件测试与打包(php服务器和java服务器)


文章分两部分:

    第一部分介绍,在MAC OS中使用一段php代码 模拟 服务器往APNS服务器发送推送消息内容,以及在iOS 端收到推送消息的过程; 

    第二部分介绍java服务器需要的授权文件的生成


一,PHP苹果APNS授权文件的生成与测试

     采用simplePush测试Member center下载和本地钥匙串生成的授权文件是正确的

     此部分之前默认读者已经生成了该有的如下文件(若不清楚自行搜索如何生成如下三个文件):

  • The CSR(CertificateSigningRequest.certSigningRequest)
  • The private key as a p12 file (PushKey.p12)
  • The SSL certificate, aps_development.cer

step1:打开终端,进入以上三文件所在目录,输入openssl命令生成pem文件(注:以下命令均是在终端中输入)

     (1).cer文件变成.pem文件

          openssl x509 -in aps_development.cer -inform der -out PushCert.pem

   (2)私钥.p12变成.pem文件

          openssl pkcs12 -nocerts -out PushKey.pem -in pushKey.p12

      之后需要输入私钥密码,并新设pem密钥密码,确认pem密钥密码

          Enter Import Password:

          MAC verified OK

          Enter PEM pass phrase:

          Verifying - Enter PEM pass phrase:

   (3)合并证书和密钥pem文件

          cat PushCert.pem PushKey.pem >ck.pem

   (4)测试并验证当前网络能连接到苹果sandbox 服务器    

          telnet gateway.sandbox.push.apple.com 2195

        命令端口返回提示,若connected ,则说明连接成功;之后等待15s左右,连接自动被cut掉

          Trying 17.172.232.18...

          Connected to gateway.sandbox.push-apple.com.akadns.net.

          Escape character is '^]'.

          Connection closed by foreign host.

   (5)测试当前打包的证书  

          openssl s_client -connect gateway.sandbox.push.apple.com:2195 -cert PushCert.pem -key PushKey.pem

       需要验证pem密码

          Enter pass phrase for PushKey.pem:

       若返回一堆文字说明授权文件和密钥连接苹果服务器成功。可以在php中使用步骤(3)中ck.pem继续进行测试;否则说明aps_development.cer文件和pushKey.p12密钥不匹配,需要你找到生成aps_development.cer的CertificateSigningRequest.certSigningRequest 对应的私钥p12文件 重新进行打包


Step2.PHP简单服务器的制作,

     具体可下载本人资源中的simplePush.php代码。

     php代码如下:

<?php

// Put your device token here (without spaces):
$deviceToken = '
10bc7c7d972ccb4e740e212336238a1862d040e979d17a236b1495c246a63312';


// Put your private key's passphrase here:
$passphrase = '
123456';

// Put your alert message here:
$message = '来自SimplePush的推送消息';



$ctx = stream_context_create();
stream_context_set_option($ctx, 'ssl', 'local_cert', '
ck.pem');
stream_context_set_option($ctx, 'ssl', 'passphrase', $passphrase);


// Open a connection to the APNS server
$fp = stream_socket_client(
'ssl://gateway.sandbox.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' => 16
);

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


    修改如下:
      (1)在iOS设备端在真机上运行(注意使用aps授权打包的开发者证书),在appDelegate.m文件中添加

- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken{

    NSString *deviceTokenMessage = [deviceToken.description substringWithRange:NSMakeRange(1, deviceToken.description.length-2)];

    

    NSLog(@"deviceTokenMessage:%@",deviceTokenMessage);

}

- (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error{

    

    if (!error) {

        return;

    }

    NSLog(@"get deviceToken failed:%@",error.description);


}      run之后获取deviceToken字段,粘贴复制,去掉中间空格后,替换红色字段1

     (2)红色字段2替换为你生成的ck.pem你所设置的密码

     (3)生成的ck.pem文件和simplePush.php文件放在同一个目录下,并将红色字段3替换为ck.pem,本文中以ck.pem为例,不用替换。

     (4)save simplePush.php文件


Step3.测试push

      (1) iOS设备按HOME键进入到应用后台

     (2)终端进入到simplePush.php所在目录

          php simplePush.php

     (3)祝贺你,在手机上成功收到push消息。ck.pem可以直接在php服务器中用做授权文件使用


注意:(1)sandbox.push推送服务器对应的授权文件只有3个月有效期,过期前需要重新revoke

     (2)发布版本需要使用distribution证书,需要重新生成授权文件


二 ,Java服务器 iOS设备推送授权文件生成与测试

    未完待续。。。 

        

 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值