。。。。。。。
成都創(chuàng)新互聯(lián)公司成都網(wǎng)站建設(shè)按需開發(fā)網(wǎng)站,是成都網(wǎng)站營銷推廣公司,為銅雕雕塑提供網(wǎng)站建設(shè)服務(wù),有成熟的網(wǎng)站定制合作流程,提供網(wǎng)站定制設(shè)計服務(wù):原型圖制作、網(wǎng)站創(chuàng)意設(shè)計、前端HTML5制作、后臺程序開發(fā)等。成都網(wǎng)站設(shè)計熱線:028-86922220
。。。。。。。
ios voip 推送---案例 ?
java?
php?
驗證.pem
。。。。。。。
注意?? token 在 ahc 打包出來的是不一樣的,切記
。1。。。。。。。。。。。。。。
如何生成.pem 證書 ,適用于PHP 。Java是.p12 證書
1、將之前生成的voip.cer SSL證書雙擊導(dǎo)入鑰匙串
2、打開鑰匙串訪問,在證書中找到對應(yīng)voip.cer生成的證書,右鍵導(dǎo)出并選擇.p12格式,這里我們命名為voippush.p12,這里導(dǎo)出需要輸入密碼(隨意輸入,別忘記了)。
3、目前我們有兩個文件,voip.cer SSL證書和voippush.p12私鑰,新建文件夾命名為VoIP、并保存兩個文件到VoIP文件夾。
4、把.cer的SSL證書轉(zhuǎn)換為.pem文件,打開終端命令行cd到VoIP文件夾、執(zhí)行以下命令
openssl x509 -in voip.cer? -inform der -out VoiPCert.pem
5、把.p12私鑰轉(zhuǎn)換成.pem文件,執(zhí)行以下命令(這里需要輸入之前導(dǎo)出設(shè)置的密碼)
openssl pkcs12 -nocerts -out VoIPKey.pem -in voippush.p12
6、再把生成的兩個.pem整合到一個.pem文件中
cat VoiPCert.pem VoIPKey.pem ck.pem
最終生成的ck.pem文件一般就是服務(wù)器用來推送的。
但是我驚奇的發(fā)現(xiàn),不管是對于生產(chǎn)pem,還是測試pem,這兩個網(wǎng)址都可以進(jìn)行驗證
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
驗證結(jié)果:
。2。。。。。。。。。。
后臺使用的接口
開發(fā)接口:gateway.sandbox.push.apple.com:2195
發(fā)布接口:gateway.push.apple.com:2195
官網(wǎng)提供的是:
開發(fā)接口: api.development.push.apple.com:443
發(fā)布接口: api.push.apple.com:443
這兩個接口都能使用一個是Socket連接的方式,一個是采用Http的方式
。3。。。。。。。。。。。
用終端命令行cd到我們的VoIP文件夾中(有5個證書),輸入: php -f 文件名.php;
?php
$deviceToken = 'token'; //能通
//ck.pem密碼
$pass ='******';
//消息內(nèi)容
$message ='收到金額0.12元,來自支付寶掃碼支付';
//數(shù)字
$badge =1;
$sound ='default';
$body =array();
$body['aps'] =array('alert'= $message);
//把數(shù)組數(shù)據(jù)轉(zhuǎn)換為json數(shù)據(jù)
$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 -- 正式環(huán)境
// gateway.sandbox.push.apple.com:2195 -- 開發(fā)環(huán)境
$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、當(dāng)app要上傳App Store時,請在iTunes connect上傳頁面右下角備注中填寫你用到VoIP推送的原因,附加上音視頻呼叫用到VoIP推送功能的demo演示鏈接,演示demo必須提供呼出和呼入功能,demo我一般上傳到優(yōu)酷。
2、經(jīng)過大量測試,VoIP當(dāng)應(yīng)用被殺死(雙擊劃掉)并且黑屏大部分情況都能收到推送,很小的情況會收不到推送消息,經(jīng)測試可能跟手機(jī)電量消耗還有信號強(qiáng)弱有關(guān)。 再強(qiáng)調(diào)一遍,測試穩(wěn)定性請在生產(chǎn)環(huán)境測試。
3、如果不足和錯誤的地方,歡迎補充和改正,謝謝。
1、下載軟件。打開iOS手機(jī)里的APPstore搜索“輕快PDF閱讀器”,找到并下載輕快PDF閱讀器APP。
2、使用軟件。找到閱讀功能,打開文件開始閱讀,長按pdf文本iOS手機(jī)pdf文件怎么打開,點擊文本上方的“朗讀”功能即可。以上就是Ios手機(jī)讓pdf語音播放的方法。
如果圖片都是統(tǒng)一名字不同尾號。你可以使用nstimer來讓它自動播放,且通過隨機(jī)數(shù)來選擇要播放的圖片
我們常常會在使用app的時候,邊聽音樂(網(wǎng)易云音樂,qq音樂等)邊使用軟件,如果我們在app中使用了聲音,例如“?!钡囊宦?提醒,就會導(dǎo)致音樂的停止播放。而像微信中的語音播放,會在播放完成后音樂恢復(fù)播放,這樣的體驗就很好,那么需要怎么做呢?其實很簡單,只需要一句話就可以。
當(dāng)你的app中的聲音播放完畢后,加上這一句話,被打斷的音樂便會恢復(fù)播放了。
當(dāng)然還可以設(shè)置讓app的聲音和其他音樂兼容(默認(rèn)是不兼容的)
withOptions后面的屬性是一個枚舉,不同的類型會有不同的效果,自己試試吧!
近期項目中有個需求就是要實現(xiàn)類似微信或者支付寶的收款時的語音播報功能,于是筆者就開始了漫長的踩坑之路。
剛開始討論實現(xiàn)方案時,安卓的小伙伴說可以使用WebSocket + 訊飛語音在線合成實現(xiàn)。于是最初的幾天筆者自己也一直在這條路上走了很久,基本功能都已經(jīng)實現(xiàn)了,項目在前臺的時候,基本沒問題。但是項目一進(jìn)入后臺大概半分鐘的時間,就無法播報了。原因是iOS項目如果不做任何處理的話,在進(jìn)入后臺大概30s之后,程序就會進(jìn)入類似休眠的狀態(tài),然后就不會再進(jìn)行任何操作了
跟安卓的同事討論之后,發(fā)現(xiàn)安卓有方法可以讓程序一直在后臺處于活躍狀態(tài),于是筆者也開始找尋保持項目后臺運行的方法,大概有兩種
在這里我們并沒有發(fā)現(xiàn),程序在后臺收到推送時,作相應(yīng)處理的方法,哪到底能不能收到推送后就進(jìn)行處理呢?
iOS 10 之后 iOS推出了Notification Service Extension,我們可以在收到推送之后,通過這個Extension 我們可以有三十秒的時間來對這個推送進(jìn)行處理
完成之后長這樣
然后我們配置一下NotificationService
然后我們看下NotificationService.swift文件
在完成上述操作之后,再次收到推送的話,就會走NotificationService的邏輯了,可以打斷點或者Log測試一下
需要注意的是 在推送的內(nèi)容中 必須配置mutable-content字段,結(jié)構(gòu)大致如下
做完上邊的操作之后,我們可以知道什么時候去播報語音了,但是語音又要怎么去播報呢?
筆者這邊也是試過幾個方案,下邊一一說來
筆者剛開始使用訊飛發(fā)現(xiàn)不行,然后又測試了系統(tǒng)自帶的AVSpeech,發(fā)現(xiàn)也不好用,查資料才知道,蘋果在近期的版本中,停用的在NotificationService中播放語音的功能,之前的某個版本應(yīng)該可以這么操作。好吧,此方案Pass
既然不讓我播,那我存起來總可以了吧,測試發(fā)現(xiàn)訊飛在線生成是可以的,也可以存到本地,但。。。是,UNMutableNotificationContent的sound好像只支持提前添加到項目中的文件,并不支持立即生成之后存到本地,然后再設(shè)置的功能。。。
筆者在項目中預(yù)先生成的文件如下(語音包通過百度語音開放平臺在線生成 百度語音在下生成(拉到中間就有了) )
比如說我要播放“支付寶到賬100元”,我就會發(fā)放多個通知,依次播放wx-pre,1,bai,yuan這幾個語音,連貫起來就能達(dá)到要求
筆者能力有限,暫時想到的方法就是這個,有好的方法可以多多分享,溝通
在“我”頁面中點擊設(shè)置然后在出現(xiàn)的頁面中點擊“通用”在“通用”中找到“使用聽筒模式播放語音”,點