美文网首页
iOS VOIP实现语音播报、网络电话

iOS VOIP实现语音播报、网络电话

作者: Janek_m | 来源:发表于2020-03-02 15:02 被阅读0次

    iOS 13系统-系统进行优化PushKit必须适配CallKit 而中国大陆不支持CallKit---所以现在看下支付宝和微信怎么去操作!(目前使用Xcode11以下打包能在iOS13中播报,但是iOS13的适配等于放弃)


    iOS VOIP方案----PHP、Java

    。。。。。。。

    。。。。。。。

     ios voip 推送--->>>案例 

    https://www.jianshu.com/p/22ffe3816090 

    https://blog.csdn.net/jjblockAndmm/article/details/78879089   

    https://www.cnblogs.com/windsSunShine/p/9399515.html 

    https://blog.csdn.net/jeffasd/article/details/68060129  java 

    https://oopsr.github.io/2016/06/20/voip/  php 

    https://www.jianshu.com/p/e759c864c2b8 验证.pem

    。。。。。。。

    注意⚠️ token 在 ahc 打包出来的是不一样的,切记

    。1。。。。。。。。。。。。。。

    如何生成.pem 证书 ,适用于PHP 。Java是.p12 证书

    1、将之前生成的voip.cer SSL证书双击导入钥匙串

    2、打开钥匙串访问,在证书中找到对应voip.cer生成的证书,右键导出并选择.p12格式,这里我们命名为voippush.p12,这里导出需要输入密码(随意输入,别忘记了)。

    3、目前我们有两个文件,voip.cer SSL证书和voippush.p12私钥,新建文件夹命名为VoIP、并保存两个文件到VoIP文件夹。

    4、把.cer的SSL证书转换为.pem文件,打开终端命令行cd到VoIP文件夹、执行以下命令

    openssl x509 -in voip.cer  -inform der -out VoiPCert.pem

    5、把.p12私钥转换成.pem文件,执行以下命令(这里需要输入之前导出设置的密码)

    openssl pkcs12 -nocerts -out VoIPKey.pem -in voippush.p12

    6、再把生成的两个.pem整合到一个.pem文件中

    cat VoiPCert.pem VoIPKey.pem > ck.pem

    最终生成的ck.pem文件一般就是服务器用来推送的。

    但是我惊奇的发现,不管是对于生产pem,还是测试pem,这两个网址都可以进行验证

    openssl s_client -connect gateway.sandbox.push.apple.com:2195 -cert ck.pem

    openssl s_client -connect gateway.push.apple.com:2195 -cert apns-ck.pem

    验证结果:

    。2。。。。。。。。。。

    后台使用的接口

    开发接口:gateway.sandbox.push.apple.com:2195

    发布接口:gateway.push.apple.com:2195

    官网提供的是:

    开发接口: api.development.push.apple.com:443

    发布接口: api.push.apple.com:443

    这两个接口都能使用一个是Socket连接的方式,一个是采用Http的方式

    。3。。。。。。。。。。。

    用终端命令行cd到我们的VoIP文件夹中(有5个证书),输入: php -f 文件名.php;

    <?php

    $deviceToken = 'token'; //能通

    //ck.pem密码

        $pass ='******';

        //消息内容

        $message ='收到金额0.12元,来自支付宝扫码支付';

        //数字

        $badge =1;

        $sound ='default';

        $body =array();

        $body['aps'] =array('alert'=> $message);

        //把数组数据转换为json数据

        $payload = json_encode($body);

        echostrlen($payload),"\r\n";

        $ctx = stream_context_create([

                                     'ssl'=> [

                                     'verify_peer'      => false,

                                     'verify_peer_name'=> false

                                     // 'cafile'          => '/path/to/bundle/entrust_2048_ca.cer',

                                     ]

                                     ]);

        // $pem = dirname(__FILE__) .'/'.'ck.pem';

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

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

        // gateway.push.apple.com:2195 -->> 正式环境

        // gateway.sandbox.push.apple.com:2195 -->> 开发环境

        $fp = stream_socket_client('tls://gateway.push.apple.com:2195',$err,$errstr,60, STREAM_CLIENT_CONNECT|STREAM_CLIENT_PERSISTENT, $ctx);

        if(!$fp) {

            print "Failed to connect $err $errstr\n";

            return;

        }

        else{

    print "Connection OK\n

    ";

        }

        // send message

        $msg = chr(0).pack("n",32).pack('H*', str_replace(' ','', $deviceToken)).pack("n",strlen($payload)).$payload;

        print "Sending message :" . $payload . "\n";

        fwrite($fp, $msg);

        fclose($fp);

        /*

         35 Connection OK

         Sending message :{"aps":{"alert":"A test message!"}} 

        */

    。补充。。。。。。。。。。。。。。

    1、当app要上传App Store时,请在iTunes connect上传页面右下角备注中填写你用到VoIP推送的原因,附加上音视频呼叫用到VoIP推送功能的demo演示链接,演示demo必须提供呼出和呼入功能,demo我一般上传到优酷。

    2、经过大量测试,VoIP当应用被杀死(双击划掉)并且黑屏大部分情况都能收到推送,很小的情况会收不到推送消息,经测试可能跟手机电量消耗还有信号强弱有关。 再强调一遍,测试稳定性请在生产环境测试。

    3、如果不足和错误的地方,欢迎补充和改正,谢谢。

    相关文章

      网友评论

          本文标题:iOS VOIP实现语音播报、网络电话

          本文链接:https://www.haomeiwen.com/subject/xjxryqtx.html