小米 app消息推送服务器,APP使用小米消息推送自定义铃声iOS版
正 文:
APP使用小米消息推送sdk的情況下,怎么自定義鈴聲呢?項(xiàng)目場(chǎng)景是利用Hbuilder云端打包iOS版,我們拿到手的是云端打包好的.ipa文件,和Hbuilder技術(shù)溝通,得到明確的答復(fù)是云端打包不支持添加自定義的聲音資源到ipa包里去,只能離線打包。看來Hbuilder還是任重而道遠(yuǎn)啊,有很多技術(shù)細(xì)節(jié)還要不斷完善。
自定義通知聲音需要滿足以下條件:
1. 聲音文件必須放在app bundle中
2. 聲音文件的格式只支持aiff, wav, caf
3. 聲音文件的時(shí)長(zhǎng)不能超過30秒,否則會(huì)用默認(rèn)系統(tǒng)通知聲音替代。
具體做法:
1. 將聲音文件 pushsound.aiff 拖入Xcode工程的main bundle的目錄下
2. 發(fā)送推送的時(shí)候設(shè)置SDK自定義聲音字段 soundURL = “pushsound.aiff”,在收到消息的中,”aps”: { “sound” : “pushsound.aiff”}
再看下apple官方對(duì)于消息推送自定義鈴聲的說明文檔:Preparing?Custom?Alert?Sounds
Local?and?remote?notifications?can?specify?custom?alert?sounds?to?be?played?when?the?notification?is?delivered.?You?can?package?the?audio?data?in?an?aiff,?wav,?or?caf?file.?Because?they?are?played?by?the?system-sound?facility,?custom?sounds?must?be?in?one?of?the?following?audio?data?formats:
Linear?PCM
MA4?(IMA/ADPCM)
uLaw
aLaw
Place?custom?sound?files?in?your?app?bundle?or?in?the?Library/Sounds?folder?of?your?app’s?container?directory.?Custom?sounds?must?be?under?30?seconds?when?played.?If?a?custom?sound?is?over?that?limit,?the?default?system?sound?is?played?instead.
可以看出,小米只是照搬了Apple的說明而已,畢竟所有集成iOS消息推送的第三方推送都是靠蘋果的APNS吃飯而已(再套一層殼)。
在原生iOS開發(fā)中,要添加聲音資源,必須把這些資源添加到app bundle中,實(shí)現(xiàn)方法有二:
方法1、項(xiàng)目設(shè)置中 Build Phases ->Copy Bundle Resources 中添加聲音文件。
方法2、采用 “Add Files to xx(project name)”的方式將對(duì)應(yīng)的聲音文件夾添加到工程里面。
還要滿足下述條件:
1.音頻文件格式: .aiff 、.wav 、.caf ;
2.自定義音頻文件位置:App bundle 或者 Library/Sounds 文件夾下;
3.自定義音頻時(shí)長(zhǎng):不超過30s,過長(zhǎng)會(huì)被默認(rèn)音替代;
4.服務(wù)器端的Sound字段:需要同App內(nèi)的音頻文件名字相同,帶上后綴名(例如:sub.caf)。
好,回到正題,我們手里已經(jīng)拿到了.ipa文件包,如何實(shí)現(xiàn)消息推送時(shí)的自定義鈴聲呢?
首先,我們明確.ipa包其實(shí)本質(zhì)上是zip壓縮包而已,我們把后綴改成.zip,就可以打開查看里面的目錄結(jié)構(gòu) Payload/DCloud_Pandora.app/:
_CodeSignature 文件夾存放的是簽名文件信息,所有的文件都會(huì)進(jìn)行簽名,所以如果你直接修改里面的任意一個(gè)文件都會(huì)導(dǎo)致簽名校驗(yàn)失敗,從而不能安裝;
embedded.mobileprovision 文件是從apple官網(wǎng)上下載下來的發(fā)布描述文件。
那么,我們現(xiàn)在要增加聲音文件到這個(gè)包里,勢(shì)必會(huì)破壞上面的簽名,所以在添加了聲音等資源文件之后,我們必須要重新簽名,下面跟著飄易走一遍流程吧(注意下面的操作都是在MAC OSX系統(tǒng)里):
正確的解鎖姿勢(shì)來啦(請(qǐng)先確保 OSX系統(tǒng) & XCODE & Hbuilder 都是最新版本):
1、解壓unzip?Demo.ipa
得到Payload文件夾,里面有DCloud_Pandora.app包,右鍵顯示包內(nèi)容,可以增刪改里面的資源文件,這里我們就增加幾個(gè)音頻文件,比如 message1.caf、message2.caf、message3.caf 等。
2、刪除簽名文件夾?_CodeSignature(可選,不刪除后面簽名時(shí)強(qiáng)制覆蓋即可)rm?-rf?Payload/DCloud_Pandora.app/_CodeSignature/
3、替換證書描述文件(可選,如果是自己的app,描述文件沒有改變可以不替換):cp?embedded.mobileprovision?Payload/DCloud_Pandora.app
注意,該?embedded.mobileprovision 文件就是我們從蘋果開發(fā)者中心下載下來的描述文件。
4、OSX系統(tǒng)里重新簽名(關(guān)鍵一步):codesign?-f?-s?"iPhone?Distribution:?company?name?(5BF53xxxxx)"?--entitlements?entitlements.plist?Payload/DCloud_Pandora.app
注意,發(fā)布證書需要替換成自己的,company name 和?5BF53xxxxx 改成自己的證書信息,這個(gè)證書信息在OSX系統(tǒng)里的 鑰匙串 里查找;entitlements.plist這個(gè)文件怎么來的,其實(shí)就是從第3步里提到的描述文件里導(dǎo)出來的,具體的飄易下面講。
驗(yàn)證簽名后的.app文件codesign?--verify?Payload/DCloud_Pandora.app
如果沒有任何輸出信息,代表沒有問題。
5、重新打包:zip?-r?new.ipa?Payload
好了,到這里我們就得到新的.ipa包了,可以拿這個(gè)包去app store 重新上架了。
剩下的事情就是服務(wù)器端發(fā)送消息推送的時(shí)候,指明用哪個(gè)聲音文件即可:<?php
public?function?iOS_message($msg_title,?$msg_content,?$badge=''){
//消息對(duì)象
$message?=?new?IOSBuilder();
$message->title($msg_title);//標(biāo)題
$message->description($msg_content);//內(nèi)容
$message->body($msg_content);//內(nèi)容,會(huì)覆蓋description
$message->soundUrl('shaking.caf');
if(!empty($badge))?$message->badge($badge);//自定義通知數(shù)字角標(biāo)
$message->build();
//返回
return?$message;
}
上面重新簽名的過程中可能涉及到的幾個(gè)知識(shí)點(diǎn):
1、查看.app的相關(guān)信息codesign?-vv?-d?Test.app
2、調(diào)用xcode查看或修改info.plist:open?Payload/xxx.app/info.plist
注意修改Bundle identifier后的弊端是第三方sdk失效,比如不能進(jìn)行微博登錄,不能收到推送等等。
3、查看.mobileprovision文件內(nèi)部信息:security?cms?-D?-i?example.mobileprovision
或者從.app包里查看:codesign?-d?--entitlements?-?Test.app
4、從.mobileprovision文件里面直接導(dǎo)出entitlements.plist:/usr/libexec/PlistBuddy?-x?-c?"print:Entitlements"?/dev/stdin?<<?entitlements.plist
entitlements.plist文件里面的內(nèi)容參考:<?xml ?version="1.0"?encoding="UTF-8"?>
plist?PUBLIC?"-//Apple//DTD?PLIST?1.0//EN"?"http://www.apple.com/DTDs/PropertyList-1.0.dtd">
application-identifier
【Prefix】.【bundleID】
aps-environment
production
beta-reports-active
com.apple.developer.team-identifier
【Prefix】
get-task-allow
keychain-access-groups
【Prefix】.*
注意,【Prefix】 替換成你自己app的,【bundleID】是打包的app id。
5、早期的簽名codesign有一個(gè)參數(shù)叫:--resource-rules Payload/xxx.app/ResourceRules.plist
在OSX 10.10的版本及更高的版本上會(huì)提示你已棄用:Warning:?--resource-rules?has?been?deprecated?in?Mac?OS?X?>=?10.10!
6、如何導(dǎo)出iOS支持的音頻格式?.aiff 、.wav 、.caf
MAC提供了一個(gè)工具 :afconvert
比如, 把16位的PCM 格式的音頻sub.aiff 轉(zhuǎn)換成數(shù)據(jù)類型為 IMA4的后綴為.caf的文件,終端里執(zhí)行下面的命令即可:afconvert?sub.aiff?sub.caf?-d?ima4?-f?caff?-v
mp3轉(zhuǎn)成caf:afconvert?sub.mp3?sub.caf?-d?ima4?-f?caff?-v
根據(jù)飄易的測(cè)試,caf后綴的音頻文件比wav和aiff的都要小一點(diǎn)。
更多的幫助,查看支持的格式:afconvert?-hf
【參考】:
總結(jié)
以上是生活随笔為你收集整理的小米 app消息推送服务器,APP使用小米消息推送自定义铃声iOS版的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 开发人工智能使用哪种编程语言好
- 下一篇: android 仿美团、大众点评滑动vi