各位大佬們,你們好。很久沒更新文章了,今天有在做推送,老板要求把原來系統的鈴聲換成我們專屬的,或者說,當用戶給你推送一個重要的消息,可以用獨特的聲音告知用戶,例如:
“您有一份外賣訂單,請及時查看”;“您有一個交易信息,請查看”等等。
關于這種根據特殊的推送內容實現特殊的聲音,解決后第一時間記錄一下文章,以便日后方便使用。我先說一下思路好了:
關于推送,我不用多說,這個是用來推送消息,無論APP是否掛起。而推送內容都是由后臺決定。比如說A購買了B的東西,B這個時候不在線,如何讓B立馬知道有人下單,這時候除了短信就是推送。A在購買的B東西的時候,給服務器發送了請求,而服務器又要給第三方推送平臺發送請求,第三方平臺又會給B發送推送。整個流程就是這樣。然而如果說是音頻的話,那自然就是當用戶收到推送的時候,調用本地的音頻文件完成推送音頻播放。
剛開始的時候,我以為是本地Appdelegate里方法判斷并且調用音頻播放的功能,所以我考慮到了1.當用戶在使用的時候收到了推送。 2.當用戶按Home鍵把APP掛在后臺的時候。3.當用戶徹底從進程里退出APP的時候。 我考慮如果說調用Appdelegate里的方法的話只有
1.是100%可以的。
2.過一會肯定就停止方法。
3.壓根就不會再調用。
所有推翻我之前的想法,不用考慮了,所以只能在推送上做手腳。進入正題,我們先快速的集成一下第三方推送,我用的是友盟的。按照文檔慢慢的來肯定沒毛病。
1.下載 http://dev.umeng.com/push/ios/integration 下載SDK,只選擇裝有.a和UMessage.h的文件夾。導入到你的項目里
2.配置需要用的文件系統庫等。
3.在Capabilities里打開Push Notification(非常重要!)
4.正常的填寫需要的內容
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
//初始化方法,也可以使用(void)startWithAppkey:(NSString *)appKey launchOptions:(NSDictionary * )launchOptions httpsenable:(BOOL)value;這個方法,方便設置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) {
//點擊允許
//這里可以添加一些自己的邏輯
} else {
//點擊不允許
//這里可以添加一些自己的邏輯
}
}];
//打開日志,方便調試
[UMessage setLogEnabled:YES];
}
- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken
{
// 1.2.7版本開始不需要用戶再手動注冊devicetoken,SDK會自動注冊
//[UMessage registerDeviceToken:deviceToken];
//不需要手動注冊,但是下面方法可以直接獲取你手機的devicetoken
NSLog(@"%@",[[[[deviceToken description] stringByReplacingOccurrencesOfString: @"<" withString: @""]
stringByReplacingOccurrencesOfString: @">" withString: @""]
stringByReplacingOccurrencesOfString: @" " withString: @""]);
}
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo
{
//關閉友盟自帶的彈出框
[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]]) {
//應用處于前臺時的遠程推送接受
//關閉友盟自帶的彈出框
[UMessage setAutoAlert:NO];
//必須加這句代碼
[UMessage didReceiveRemoteNotification:userInfo];
}else{
//應用處于前臺時的本地推送接受
}
//當應用處于前臺時提示設置,需要哪個可以設置哪一個
completionHandler(UNNotificationPresentationOptionSound|UNNotificationPresentationOptionBadge|UNNotificationPresentationOptionAlert);
}
//iOS10新增:處理后臺點擊通知的代理方法
-(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]]) {
//應用處于后臺時的遠程推送接受
//必須加這句代碼
[UMessage didReceiveRemoteNotification:userInfo];
}else{
//應用處于后臺時的本地推送接受
}
}
- (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error
{
//如果沒有獲得devicetoken的話一定會走進這個方法里,如果報錯內容是3001,是因為你的Capabilities里打開Push Notification 沒有打開。
NSString *error_str = [NSString stringWithFormat: @"%@", error];
NSLog(@"Failed to get token, error:%@", error_str);
}
以上全部在appdeleagte里實現就可以了,然后關于appkey,去友盟里創建一個。創建以后如下圖一樣
這個是創建以后的,關于推送需要兩個證書:
1.開發證書(只用來內部測試推送)
2.生產證書(上架以后使用的推送證書)
關于證書的東西我就不多說了,網上一堆如何創建打包p.12格式文件。自己看看吧。
還沒上架的話就別著急創建生產證書了,就開發證書就可以了。進入測試模式選擇添加測試信息。
進入進來以后你會發現有很多信息可以填寫,什么消息描述啊,主標題,副標題,內容。這個隨便寫。 內容鏈接也不需要哦
這里有一個devicetoken,之前在Appdelegate里就已經獲取了。直接賦值粘貼進來就行了。然后點擊發送,就能收到推送!
-----------------------------我是分割線------------------------------
以上便是推送集成,超級快。五分鐘搞定。 接下來是更換鈴聲了。
我也沒啥好的素材,只能從網上找一找。http://www.huiyi8.com/tishiyin/
隨便選一首。然后點擊進去進入下載
然后選擇MP3格式,你會發現你進入到這個頁面。
不用下載,保存一下鏈接地址。
http://data3.huiyi8.com/2015/dqd/07/31/4.mp3 (這個是我自己找的)
然后咱們去轉換類型,我在此強調!!!非常強調!!!嚴重強調!!!蘋果只支持四種格式!!!
Linear PCM、MA4 (IMA/ADPCM)、μLaw、aLaw
必須是這4種格式之一 !!!!(非常重要!!)
這個非常重要! 我們剛才的是mp3不是嗎? 所以我們需要轉碼,什么類型好轉呢,就是MA4, 這是蘋果官網上寫的,但也叫M4A。我也有在線轉換的鏈接!
http://cn.office-converter.com/Online-Audio-Converter
這個就可以轉碼!我們進去轉碼一下!
最上面不要用,因為你轉出來的是html格式的,亂碼,毫無任何卵用。
用下面的網址轉碼。
轉碼的下載一點擊就變成下面這個樣子?
這個是正常的,然后復制網址到迅雷里下載就好啦!
然后這個拖到桌面咯,然后拉到我們需要開發的項目里咯。
然后步驟已經快完成咯,記住項目里也好下載也好格式都是m4a
然后我們再回到友盟的后臺端進行推送,不過這次要加一個步驟咯,那就添加我們的這個音樂名字。 如下
也就多了一個步驟那就是添加音樂名,然后提交,就可以推送了~~
這個是為了測試而已,但真正名字是由服務器傳到他們的第三方平臺里的。
http://dev.umeng.com/push/ios/api-doc
這個就是后端的網址。啊哈哈哈哈,就這么簡單!只有做完才覺得如此的簡單!
看在我花了這么久的份上,點贊關注我哦~
若是有還不懂的地方可以加我的
QQ:1119718338
QQ群:622177838