iOS第三方推送集成以及推送時鈴聲的改變

各位大佬們,你們好。很久沒更新文章了,今天有在做推送,老板要求把原來系統的鈴聲換成我們專屬的,或者說,當用戶給你推送一個重要的消息,可以用獨特的聲音告知用戶,例如:
“您有一份外賣訂單,請及時查看”;“您有一個交易信息,請查看”等等。
關于這種根據特殊的推送內容實現特殊的聲音,解決后第一時間記錄一下文章,以便日后方便使用。我先說一下思路好了:

關于推送,我不用多說,這個是用來推送消息,無論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,去友盟里創建一個。創建以后如下圖一樣


7051620F-1E4D-450A-B87A-0B2B0B566F1D.png

這個是創建以后的,關于推送需要兩個證書:
1.開發證書(只用來內部測試推送)
2.生產證書(上架以后使用的推送證書)
關于證書的東西我就不多說了,網上一堆如何創建打包p.12格式文件。自己看看吧。

95D1ED5F-5CE0-4F70-80B4-77B55E02CEE9.png

還沒上架的話就別著急創建生產證書了,就開發證書就可以了。進入測試模式選擇添加測試信息。

進入進來以后你會發現有很多信息可以填寫,什么消息描述啊,主標題,副標題,內容。這個隨便寫。 內容鏈接也不需要哦

D984D238-E6B1-4F72-864E-440F75B5C859.png

這里有一個devicetoken,之前在Appdelegate里就已經獲取了。直接賦值粘貼進來就行了。然后點擊發送,就能收到推送!

-----------------------------我是分割線------------------------------

以上便是推送集成,超級快。五分鐘搞定。 接下來是更換鈴聲了。
我也沒啥好的素材,只能從網上找一找。http://www.huiyi8.com/tishiyin/
隨便選一首。然后點擊進去進入下載

9F9480D8-B56C-4BF7-9136-377015883BCA.png

然后選擇MP3格式,你會發現你進入到這個頁面。


E28DFF7E-F9F0-4D91-8EE0-7A23AC8B657C.png

不用下載,保存一下鏈接地址。
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

5E0D7709-F7E0-4560-AC81-6050FF621D79.png

這個就可以轉碼!我們進去轉碼一下!

B1F9BA6A-4C7E-46B8-8D7A-B51AF8664934.png

最上面不要用,因為你轉出來的是html格式的,亂碼,毫無任何卵用。
用下面的網址轉碼。

63A1C8DF-BAC2-460B-AF37-4797D4104A5B.png

轉碼的下載一點擊就變成下面這個樣子?

3CAFC8DB-D233-4D4E-B425-A3025FC14E19.png

這個是正常的,然后復制網址到迅雷里下載就好啦!

9C30207E-CC6D-46B7-A2C0-BE79F9A9618F.png

然后這個拖到桌面咯,然后拉到我們需要開發的項目里咯。
然后步驟已經快完成咯,記住項目里也好下載也好格式都是m4a

1EF10201-AB56-4EE4-A00F-8EB7CB05846E.png

然后我們再回到友盟的后臺端進行推送,不過這次要加一個步驟咯,那就添加我們的這個音樂名字。 如下


0D20B960-3EF8-4831-AC19-D458A4C5B22A.png

也就多了一個步驟那就是添加音樂名,然后提交,就可以推送了~~
這個是為了測試而已,但真正名字是由服務器傳到他們的第三方平臺里的。

http://dev.umeng.com/push/ios/api-doc

這個就是后端的網址。啊哈哈哈哈,就這么簡單!只有做完才覺得如此的簡單!

看在我花了這么久的份上,點贊關注我哦~

若是有還不懂的地方可以加我的
QQ:1119718338
QQ群:622177838

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,533評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,055評論 3 414
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,365評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,561評論 1 307
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,346評論 6 404
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 54,889評論 1 321
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 42,978評論 3 439
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,118評論 0 286
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,637評論 1 333
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,558評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,739評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,246評論 5 355
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 43,980評論 3 346
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,362評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,619評論 1 280
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,347評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,702評論 2 370

推薦閱讀更多精彩內容