小米 app消息推送服务器,APP使用小米消息推送自定义铃声iOS版
正 文:
APP使用小米消息推送sdk的情況下,怎么自定義鈴聲呢?項目場景是利用Hbuilder云端打包iOS版,我們拿到手的是云端打包好的.ipa文件,和Hbuilder技術溝通,得到明確的答復是云端打包不支持添加自定義的聲音資源到ipa包里去,只能離線打包。看來Hbuilder還是任重而道遠啊,有很多技術細節還要不斷完善。
自定義通知聲音需要滿足以下條件:
1. 聲音文件必須放在app bundle中
2. 聲音文件的格式只支持aiff, wav, caf
3. 聲音文件的時長不能超過30秒,否則會用默認系統通知聲音替代。
具體做法:
1. 將聲音文件 pushsound.aiff 拖入Xcode工程的main bundle的目錄下
2. 發送推送的時候設置SDK自定義聲音字段 soundURL = “pushsound.aiff”,在收到消息的中,”aps”: { “sound” : “pushsound.aiff”}
再看下apple官方對于消息推送自定義鈴聲的說明文檔: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開發中,要添加聲音資源,必須把這些資源添加到app bundle中,實現方法有二:
方法1、項目設置中 Build Phases ->Copy Bundle Resources 中添加聲音文件。
方法2、采用 “Add Files to xx(project name)”的方式將對應的聲音文件夾添加到工程里面。
還要滿足下述條件:
1.音頻文件格式: .aiff 、.wav 、.caf ;
2.自定義音頻文件位置:App bundle 或者 Library/Sounds 文件夾下;
3.自定義音頻時長:不超過30s,過長會被默認音替代;
4.服務器端的Sound字段:需要同App內的音頻文件名字相同,帶上后綴名(例如:sub.caf)。
好,回到正題,我們手里已經拿到了.ipa文件包,如何實現消息推送時的自定義鈴聲呢?
首先,我們明確.ipa包其實本質上是zip壓縮包而已,我們把后綴改成.zip,就可以打開查看里面的目錄結構 Payload/DCloud_Pandora.app/:
_CodeSignature 文件夾存放的是簽名文件信息,所有的文件都會進行簽名,所以如果你直接修改里面的任意一個文件都會導致簽名校驗失敗,從而不能安裝;
embedded.mobileprovision 文件是從apple官網上下載下來的發布描述文件。
那么,我們現在要增加聲音文件到這個包里,勢必會破壞上面的簽名,所以在添加了聲音等資源文件之后,我們必須要重新簽名,下面跟著飄易走一遍流程吧(注意下面的操作都是在MAC OSX系統里):
正確的解鎖姿勢來啦(請先確保 OSX系統 & XCODE & Hbuilder 都是最新版本):
1、解壓unzip?Demo.ipa
得到Payload文件夾,里面有DCloud_Pandora.app包,右鍵顯示包內容,可以增刪改里面的資源文件,這里我們就增加幾個音頻文件,比如 message1.caf、message2.caf、message3.caf 等。
2、刪除簽名文件夾?_CodeSignature(可選,不刪除后面簽名時強制覆蓋即可)rm?-rf?Payload/DCloud_Pandora.app/_CodeSignature/
3、替換證書描述文件(可選,如果是自己的app,描述文件沒有改變可以不替換):cp?embedded.mobileprovision?Payload/DCloud_Pandora.app
注意,該?embedded.mobileprovision 文件就是我們從蘋果開發者中心下載下來的描述文件。
4、OSX系統里重新簽名(關鍵一步):codesign?-f?-s?"iPhone?Distribution:?company?name?(5BF53xxxxx)"?--entitlements?entitlements.plist?Payload/DCloud_Pandora.app
注意,發布證書需要替換成自己的,company name 和?5BF53xxxxx 改成自己的證書信息,這個證書信息在OSX系統里的 鑰匙串 里查找;entitlements.plist這個文件怎么來的,其實就是從第3步里提到的描述文件里導出來的,具體的飄易下面講。
驗證簽名后的.app文件codesign?--verify?Payload/DCloud_Pandora.app
如果沒有任何輸出信息,代表沒有問題。
5、重新打包:zip?-r?new.ipa?Payload
好了,到這里我們就得到新的.ipa包了,可以拿這個包去app store 重新上架了。
剩下的事情就是服務器端發送消息推送的時候,指明用哪個聲音文件即可:<?php
public?function?iOS_message($msg_title,?$msg_content,?$badge=''){
//消息對象
$message?=?new?IOSBuilder();
$message->title($msg_title);//標題
$message->description($msg_content);//內容
$message->body($msg_content);//內容,會覆蓋description
$message->soundUrl('shaking.caf');
if(!empty($badge))?$message->badge($badge);//自定義通知數字角標
$message->build();
//返回
return?$message;
}
上面重新簽名的過程中可能涉及到的幾個知識點:
1、查看.app的相關信息codesign?-vv?-d?Test.app
2、調用xcode查看或修改info.plist:open?Payload/xxx.app/info.plist
注意修改Bundle identifier后的弊端是第三方sdk失效,比如不能進行微博登錄,不能收到推送等等。
3、查看.mobileprovision文件內部信息:security?cms?-D?-i?example.mobileprovision
或者從.app包里查看:codesign?-d?--entitlements?-?Test.app
4、從.mobileprovision文件里面直接導出entitlements.plist:/usr/libexec/PlistBuddy?-x?-c?"print:Entitlements"?/dev/stdin?<<?entitlements.plist
entitlements.plist文件里面的內容參考:<?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有一個參數叫:--resource-rules Payload/xxx.app/ResourceRules.plist
在OSX 10.10的版本及更高的版本上會提示你已棄用:Warning:?--resource-rules?has?been?deprecated?in?Mac?OS?X?>=?10.10!
6、如何導出iOS支持的音頻格式?.aiff 、.wav 、.caf
MAC提供了一個工具 :afconvert
比如, 把16位的PCM 格式的音頻sub.aiff 轉換成數據類型為 IMA4的后綴為.caf的文件,終端里執行下面的命令即可:afconvert?sub.aiff?sub.caf?-d?ima4?-f?caff?-v
mp3轉成caf:afconvert?sub.mp3?sub.caf?-d?ima4?-f?caff?-v
根據飄易的測試,caf后綴的音頻文件比wav和aiff的都要小一點。
更多的幫助,查看支持的格式:afconvert?-hf
【參考】:
總結
以上是生活随笔為你收集整理的小米 app消息推送服务器,APP使用小米消息推送自定义铃声iOS版的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 开发人工智能使用哪种编程语言好
- 下一篇: android 仿美团、大众点评滑动vi