各位大佬們蟹瘾,你們好圾浅。很久沒更新文章了,今天有在做推送憾朴,老板要求把原來系統(tǒng)的鈴聲換成我們專屬的狸捕,或者說,當(dāng)用戶給你推送一個重要的消息众雷,可以用獨(dú)特的聲音告知用戶灸拍,例如:
“您有一份外賣訂單做祝,請及時查看”;“您有一個交易信息鸡岗,請查看”等等混槐。
關(guān)于這種根據(jù)特殊的推送內(nèi)容實(shí)現(xiàn)特殊的聲音,解決后第一時間記錄一下文章轩性,以便日后方便使用声登。我先說一下思路好了:
關(guān)于推送,我不用多說揣苏,這個是用來推送消息悯嗓,無論APP是否掛起。而推送內(nèi)容都是由后臺決定。比如說A購買了B的東西,B這個時候不在線营曼,如何讓B立馬知道有人下單帝牡,這時候除了短信就是推送。A在購買的B東西的時候个少,給服務(wù)器發(fā)送了請求洪乍,而服務(wù)器又要給第三方推送平臺發(fā)送請求,第三方平臺又會給B發(fā)送推送夜焦。整個流程就是這樣壳澳。然而如果說是音頻的話,那自然就是當(dāng)用戶收到推送的時候茫经,調(diào)用本地的音頻文件完成推送音頻播放巷波。
剛開始的時候,我以為是本地Appdelegate里方法判斷并且調(diào)用音頻播放的功能卸伞,所以我考慮到了1.當(dāng)用戶在使用的時候收到了推送抹镊。 2.當(dāng)用戶按Home鍵把APP掛在后臺的時候。3.當(dāng)用戶徹底從進(jìn)程里退出APP的時候荤傲。 我考慮如果說調(diào)用Appdelegate里的方法的話只有
1.是100%可以的垮耳。
2.過一會肯定就停止方法。
3.壓根就不會再調(diào)用遂黍。
所有推翻我之前的想法终佛,不用考慮了,所以只能在推送上做手腳雾家。進(jìn)入正題铃彰,我們先快速的集成一下第三方推送,我用的是友盟的芯咧。按照文檔慢慢的來肯定沒毛病牙捉。
1.下載 http://dev.umeng.com/push/ios/integration 下載SDK竹揍,只選擇裝有.a和UMessage.h的文件夾。導(dǎo)入到你的項(xiàng)目里
2.配置需要用的文件系統(tǒng)庫等鹃共。
3.在Capabilities里打開Push Notification(非常重要9碛丁)
4.正常的填寫需要的內(nèi)容
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
//初始化方法,也可以使用(void)startWithAppkey:(NSString *)appKey launchOptions:(NSDictionary * )launchOptions httpsenable:(BOOL)value;這個方法,方便設(shè)置https請求霜浴。
[UMessage startWithAppkey:@"your appkey" launchOptions:launchOptions];
[UMessage setLogEnabled:YES];
//注冊通知晶衷,如果要使用category的自定義策略,可以參考demo中的代碼阴孟。
[UMessage registerForRemoteNotifications];
//iOS10必須加下面這段代碼晌纫。
UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter];
center.delegate=self;
UNAuthorizationOptions types10=UNAuthorizationOptionBadge| UNAuthorizationOptionAlert|UNAuthorizationOptionSound;
[center requestAuthorizationWithOptions:types10 completionHandler:^(BOOL granted, NSError * _Nullable error) {
if (granted) {
//點(diǎn)擊允許
//這里可以添加一些自己的邏輯
} else {
//點(diǎn)擊不允許
//這里可以添加一些自己的邏輯
}
}];
//打開日志,方便調(diào)試
[UMessage setLogEnabled:YES];
}
- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken
{
// 1.2.7版本開始不需要用戶再手動注冊devicetoken永丝,SDK會自動注冊
//[UMessage registerDeviceToken:deviceToken];
//不需要手動注冊锹漱,但是下面方法可以直接獲取你手機(jī)的devicetoken
NSLog(@"%@",[[[[deviceToken description] stringByReplacingOccurrencesOfString: @"<" withString: @""]
stringByReplacingOccurrencesOfString: @">" withString: @""]
stringByReplacingOccurrencesOfString: @" " withString: @""]);
}
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo
{
//關(guān)閉友盟自帶的彈出框
[UMessage setAutoAlert:NO];
[UMessage didReceiveRemoteNotification:userInfo];
// self.userInfo = userInfo;
}
//iOS10新增:處理前臺收到通知的代理方法
-(void)userNotificationCenter:(UNUserNotificationCenter *)center willPresentNotification:(UNNotification *)notification withCompletionHandler:(void (^)(UNNotificationPresentationOptions))completionHandler{
NSDictionary * userInfo = notification.request.content.userInfo;
if([notification.request.trigger isKindOfClass:[UNPushNotificationTrigger class]]) {
//應(yīng)用處于前臺時的遠(yuǎn)程推送接受
//關(guān)閉友盟自帶的彈出框
[UMessage setAutoAlert:NO];
//必須加這句代碼
[UMessage didReceiveRemoteNotification:userInfo];
}else{
//應(yīng)用處于前臺時的本地推送接受
}
//當(dāng)應(yīng)用處于前臺時提示設(shè)置,需要哪個可以設(shè)置哪一個
completionHandler(UNNotificationPresentationOptionSound|UNNotificationPresentationOptionBadge|UNNotificationPresentationOptionAlert);
}
//iOS10新增:處理后臺點(diǎn)擊通知的代理方法
-(void)userNotificationCenter:(UNUserNotificationCenter *)center didReceiveNotificationResponse:(UNNotificationResponse *)response withCompletionHandler:(void (^)())completionHandler{
NSDictionary * userInfo = response.notification.request.content.userInfo;
if([response.notification.request.trigger isKindOfClass:[UNPushNotificationTrigger class]]) {
//應(yīng)用處于后臺時的遠(yuǎn)程推送接受
//必須加這句代碼
[UMessage didReceiveRemoteNotification:userInfo];
}else{
//應(yīng)用處于后臺時的本地推送接受
}
}
- (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error
{
//如果沒有獲得devicetoken的話一定會走進(jìn)這個方法里慕嚷,如果報錯內(nèi)容是3001哥牍,是因?yàn)槟愕腃apabilities里打開Push Notification 沒有打開。
NSString *error_str = [NSString stringWithFormat: @"%@", error];
NSLog(@"Failed to get token, error:%@", error_str);
}
以上全部在appdeleagte里實(shí)現(xiàn)就可以了喝检,然后關(guān)于appkey嗅辣,去友盟里創(chuàng)建一個。創(chuàng)建以后如下圖一樣
這個是創(chuàng)建以后的挠说,關(guān)于推送需要兩個證書:
1.開發(fā)證書(只用來內(nèi)部測試推送)
2.生產(chǎn)證書(上架以后使用的推送證書)
關(guān)于證書的東西我就不多說了澡谭,網(wǎng)上一堆如何創(chuàng)建打包p.12格式文件。自己看看吧损俭。
還沒上架的話就別著急創(chuàng)建生產(chǎn)證書了蛙奖,就開發(fā)證書就可以了。進(jìn)入測試模式選擇添加測試信息杆兵。
進(jìn)入進(jìn)來以后你會發(fā)現(xiàn)有很多信息可以填寫雁仲,什么消息描述啊,主標(biāo)題琐脏,副標(biāo)題伯顶,內(nèi)容。這個隨便寫骆膝。 內(nèi)容鏈接也不需要哦
這里有一個devicetoken祭衩,之前在Appdelegate里就已經(jīng)獲取了。直接賦值粘貼進(jìn)來就行了阅签。然后點(diǎn)擊發(fā)送掐暮,就能收到推送!
-----------------------------我是分割線------------------------------
以上便是推送集成政钟,超級快路克。五分鐘搞定樟结。 接下來是更換鈴聲了。
我也沒啥好的素材精算,只能從網(wǎng)上找一找瓢宦。http://www.huiyi8.com/tishiyin/
隨便選一首。然后點(diǎn)擊進(jìn)去進(jìn)入下載
然后選擇MP3格式灰羽,你會發(fā)現(xiàn)你進(jìn)入到這個頁面驮履。
不用下載,保存一下鏈接地址廉嚼。
http://data3.huiyi8.com/2015/dqd/07/31/4.mp3 (這個是我自己找的)
然后咱們?nèi)マD(zhuǎn)換類型玫镐,我在此強(qiáng)調(diào)!5≡搿恐似!非常強(qiáng)調(diào)!0睢矫夷!嚴(yán)重強(qiáng)調(diào)!1锘薄口四!蘋果只支持四種格式!G芈!
Linear PCM治笨、MA4 (IMA/ADPCM)驳概、μLaw、aLaw
必須是這4種格式之一 ?趵怠K秤帧!5确酢(非常重要V烧铡!)
這個非常重要俯萌! 我們剛才的是mp3不是嗎果录? 所以我們需要轉(zhuǎn)碼,什么類型好轉(zhuǎn)呢咐熙,就是MA4弱恒, 這是蘋果官網(wǎng)上寫的,但也叫M4A棋恼。我也有在線轉(zhuǎn)換的鏈接返弹!
http://cn.office-converter.com/Online-Audio-Converter
這個就可以轉(zhuǎn)碼锈玉!我們進(jìn)去轉(zhuǎn)碼一下!
最上面不要用义起,因?yàn)槟戕D(zhuǎn)出來的是html格式的拉背,亂碼,毫無任何卵用默终。
用下面的網(wǎng)址轉(zhuǎn)碼椅棺。
轉(zhuǎn)碼的下載一點(diǎn)擊就變成下面這個樣子?
這個是正常的穷蛹,然后復(fù)制網(wǎng)址到迅雷里下載就好啦土陪!
然后這個拖到桌面咯,然后拉到我們需要開發(fā)的項(xiàng)目里咯肴熏。
然后步驟已經(jīng)快完成咯鬼雀,記住項(xiàng)目里也好下載也好格式都是m4a
然后我們再回到友盟的后臺端進(jìn)行推送,不過這次要加一個步驟咯蛙吏,那就添加我們的這個音樂名字源哩。 如下
也就多了一個步驟那就是添加音樂名,然后提交鸦做,就可以推送了~~
這個是為了測試而已励烦,但真正名字是由服務(wù)器傳到他們的第三方平臺里的。
http://dev.umeng.com/push/ios/api-doc
這個就是后端的網(wǎng)址泼诱。啊哈哈哈哈坛掠,就這么簡單!只有做完才覺得如此的簡單治筒!
看在我花了這么久的份上屉栓,點(diǎn)贊關(guān)注我哦~
若是有還不懂的地方可以加我的
QQ:1119718338
QQ群:622177838