環(huán)信消息推送

一,關(guān)于推送

之前做過(guò) 極光 ?APNS ?個(gè)推的 推送 ?: 這里說(shuō)下 極光推送是比較 適合用在 iOS 端和 ?安卓端的, 而個(gè)推 那就只能完美支持安卓端 ?,安卓端可以 ?消息通知 ?和 ? 消息的傳透, 而iOS 只能消息傳透(ps:什么是消息傳透 看下下圖我做的demo:) ?

這就是消息的傳透

二、好了進(jìn)入主題。關(guān)于環(huán)信的消息推送機(jī)制

?首先給大家推薦一個(gè)介紹推送機(jī)制很優(yōu)秀的帖子:http://m.itdecent.cn/p/e347f999ed95,里面關(guān)于本地推送和遠(yuǎn)程推送的介紹都很詳細(xì),至少我看了感覺(jué)還是收獲很多的.

下面是以QQ服務(wù)器為我們說(shuō)明的即時(shí)通訊的機(jī)制:

qq消息的機(jī)制


其實(shí),做開(kāi)發(fā)的人看了圖就會(huì)明白,消息的機(jī)制就是這么簡(jiǎn)單 ?,推送識(shí)別的就是設(shè)備,并不是用戶??!

三、具體的流程

在xcode下 新建一個(gè)demo,隨便命名 ?我就叫 簡(jiǎn)單聊 ?因?yàn)?我想做一個(gè)這樣的APP。


1. 創(chuàng)建AppID ?和描述文件


我們是要集成推送的,所以我們需要用到cer文件,這個(gè)東西實(shí)際上就是蘋果給開(kāi)發(fā)者頒發(fā)的一個(gè)證書(shū),我們需要將它導(dǎo)入到我們的AppId配置里,否則的話是無(wú)法集成推送的,還記得安裝應(yīng)該的時(shí)候會(huì)提示"無(wú)法安裝為認(rèn)證發(fā)布者的應(yīng)用"之類的信息么,我猜測(cè)這個(gè)cer文件就是我們身份的標(biāo)示,使我們開(kāi)發(fā)的應(yīng)用可以供人們正常安裝使用,關(guān)于證書(shū)有一篇很詳細(xì)的帖子,希望了解證書(shū)之類信息的看官可以去瞅瞅:http://m.blog.csdn.net/article/details?id=8617788

申請(qǐng)證書(shū)流程我就不寫上去了 ?,因?yàn)楦綍r(shí)我們上傳證書(shū)什么的沒(méi)什么區(qū)別

圖二
圖一


2.創(chuàng)建appID ?和描述文件



最終配置成功圖
圖一
圖一

最后配置出來(lái)的 證書(shū)是 ? 下圖:

下載的證書(shū)
鑰匙串導(dǎo)出的p12證書(shū)


最后配置一下 生成證書(shū):

生產(chǎn)證書(shū)


4.在環(huán)信創(chuàng)建我們的應(yīng)用

注冊(cè)一個(gè)官網(wǎng)的賬號(hào),注冊(cè)過(guò)了就直接干??! ?注冊(cè)時(shí)候選擇 ?“注冊(cè)即時(shí)通訊云”。



然后就是創(chuàng)建應(yīng)用 ?如下圖:

創(chuàng)建應(yīng)用

填寫完成如下

上傳證書(shū):


完畢

5,集成環(huán)信到項(xiàng)目中:


首先在這里下載最新的SDK(截至到寫本文時(shí)最新的SDK為)

http://www.easemob.com/download/im環(huán)信推送SDK下載鏈接

點(diǎn)擊iOS的最新SDK下載,這里下載的是V3.x的SDK


我們只需要下面兩個(gè)圈的文件 ?導(dǎo)入demo

導(dǎo)入之后會(huì)有很多錯(cuò)誤 ?,慢慢改過(guò)來(lái)吧


這一步很重要,因?yàn)镾DK 不支持 bitcode,所以要將 Build Settings → Linking → Enable Bitcode 中設(shè)置 NO。

command+B編譯工程,大量爆紅.原因是這些類里沒(méi)有導(dǎo)入U(xiǎn)IKit框架,在每個(gè)類的.h文件里顯式導(dǎo)入U(xiǎn)IKit框架,在鼠標(biāo)指針處添加


#import <UIKit/UIkit.h>;

然后開(kāi)啟推動(dòng)

6.測(cè)試是否集成成功

首先,我們?nèi)キh(huán)信的后臺(tái)給我們的應(yīng)用添加一個(gè)用戶

接著我們要去appledate.m文件里添加?xùn)|西了,很重要一步,廢話不多說(shuō),直接貼出來(lái)需要配置的代碼,直接拿去用0.0,需要添加的東西我在注釋里注釋的很明白...


上面的幾個(gè)方法在appdelegate里是必須重寫的,不然會(huì)直接導(dǎo)致推送不成功.其中.需要重點(diǎn)說(shuō)明的是:

只有在應(yīng)用完全退出被殺掉的狀態(tài)下,才可以收到環(huán)信推送的通知;

如果要發(fā)送在線的通知,需要在messagesDidReceive方法里獲取到環(huán)信推送的消息之后給用戶發(fā)起一個(gè)本地通知,這個(gè)大家可以自己研究下.

通過(guò)設(shè)置emoptions.displayStyle = EMPushDisplayStyleSimpleBanner;(上面代碼有)可以設(shè)置有通知過(guò)來(lái)的時(shí)候的顯示方式,顯示一個(gè)提示或者顯示完整的消息.


測(cè)試消息:在應(yīng)用完全退出的情況下(使用在環(huán)信注冊(cè)的賬戶登錄一次,確認(rèn)登錄成功之后再完全退出),選中我們的用戶,點(diǎn)擊發(fā)送消息:

圖二
圖一


測(cè)試結(jié)果:

感謝支持 :如有不懂 可以加我qq ? ? ?573702745





- (BOOL)application:(UIApplication*)application didFinishLaunchingWithOptions:(NSDictionary*)launchOptions

{

//AppKey:注冊(cè)的AppKey,點(diǎn)擊"應(yīng)用概述"可以看到AppKey,粘貼過(guò)來(lái)就可以。

//apnsCertName:推送證書(shū)名,填寫你的開(kāi)發(fā)證書(shū)或者發(fā)布證書(shū)名,就是上傳到環(huán)信后臺(tái)的兩個(gè)中的一個(gè),什么環(huán)境下測(cè)試使用什么環(huán)境的證書(shū)。

EMOptions*options = [EMOptionsoptionsWithAppkey:@"xinyisheng2016#jiandanliaochat2017"];

options.apnsCertName=@"deleve";

[[EMClientsharedClient]initializeSDKWithOptions:options];

//登錄環(huán)信這里使用的是我剛才在環(huán)信后臺(tái)創(chuàng)建的賬戶名和密碼,使用這個(gè)賬戶登錄,到時(shí)候如果在后臺(tái)給客戶端發(fā)消息的話,就可以找到該用戶

[[EMClientsharedClient]loginWithUsername:@"15217636961"

password:@"123456"

completion:^(NSString*aUsername,EMError*aError) {

if(!aError) {

NSLog(@"環(huán)信登陸成功");

EMPushOptions*emoptions = [[EMClientsharedClient]pushOptions];

//設(shè)置有消息過(guò)來(lái)時(shí)的顯示方式:1.顯示收到一條消息2.顯示具體消息內(nèi)容.

//自己可以測(cè)試下

emoptions.displayStyle=EMPushDisplayStyleMessageSummary;

[[EMClientsharedClient]updatePushOptionsToServer];

}else{

NSLog(@"環(huán)信登陸失敗");

}

}];

/**

注冊(cè)APNS離線推送iOS8注冊(cè)APNS

*/

if([applicationrespondsToSelector:@selector(registerForRemoteNotifications)]) {

[applicationregisterForRemoteNotifications];

UIUserNotificationTypenotificationTypes =UIUserNotificationTypeBadge|

UIUserNotificationTypeSound|

UIUserNotificationTypeAlert;

UIUserNotificationSettings*settings = [UIUserNotificationSettingssettingsForTypes:notificationTypescategories:nil];

[applicationregisterUserNotificationSettings:settings];

}

else{

UIRemoteNotificationTypenotificationTypes =UIRemoteNotificationTypeBadge|

UIRemoteNotificationTypeSound|

UIRemoteNotificationTypeAlert;

[[UIApplicationsharedApplication]registerForRemoteNotificationTypes:notificationTypes];

}

//添加監(jiān)聽(tīng)在線推送消息

[[EMClientsharedClient].chatManageraddDelegate:selfdelegateQueue:nil];

returnYES;

}

//監(jiān)聽(tīng)環(huán)信在線推送消息

- (void)messagesDidReceive:(NSArray*)aMessages{

UIAlertView*alertView = [[UIAlertViewalloc]initWithTitle:@"提示"message:[NSStringstringWithFormat:@"%@",aMessages]delegate:nilcancelButtonTitle:@"取消"otherButtonTitles:@"確定",nil];

[alertViewshow];

//aMessages是一個(gè)對(duì)象,包含了發(fā)過(guò)來(lái)的所有信息,怎么提取想要的信息我會(huì)在后面貼出來(lái).

}

//將得到的deviceToken傳給SDK

- (void)application:(UIApplication*)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData*)deviceToken{

[[EMClientsharedClient]bindDeviceToken:deviceToken];

}

//注冊(cè)deviceToken失敗

- (void)application:(UIApplication*)application didFailToRegisterForRemoteNotificationsWithError:(NSError*)error{

NSLog(@"error -- %@",error);

}

// APP進(jìn)入后臺(tái)

- (void)applicationDidEnterBackground:(UIApplication*)application

{

[[EMClientsharedClient]applicationDidEnterBackground:application];

}

// APP將要從后臺(tái)返回

- (void)applicationWillEnterForeground:(UIApplication*)application

{

[[EMClientsharedClient]applicationWillEnterForeground:application];

}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 最近一段時(shí)間工作量比較大, 抽不出時(shí)間來(lái)整理博客, 趁今天任務(wù)量較小的時(shí)候整理下關(guān)于環(huán)信推送的問(wèn)題, 介紹. 集成...
    imGeek閱讀 2,846評(píng)論 1 3
  • 極光推送: 1.JPush當(dāng)前版本是1.8.2,其SDK的開(kāi)發(fā)除了正常的功能完善和擴(kuò)展外也緊隨蘋果官方的步伐,SD...
    Isspace閱讀 6,887評(píng)論 10 16
  • 推送通知 注意:這里說(shuō)的推送通知跟NSNotification有所區(qū)別 NSNotification是抽象的,不可...
    iOS開(kāi)發(fā)攻城獅閱讀 4,423評(píng)論 1 13
  • 推送通知注意:這里說(shuō)的推送通知跟NSNotification有所區(qū)別NSNotification是抽象的,不可見(jiàn)的...
    醉葉惜秋閱讀 1,623評(píng)論 0 3
  • 不同版本極光推送SDK集成各有差異,集成時(shí)一定要注意版本號(hào),樓主已將博文更新成最新的SDK JPush v3.0....
    i順頌時(shí)宜閱讀 8,023評(píng)論 37 170

友情鏈接更多精彩內(nèi)容