环信消息推送

作者: 流动的水gita | 来源:发表于2017-02-21 11:53 被阅读5284次

    一,关于推送

    之前做过 极光  APNS  个推的 推送  : 这里说下 极光推送是比较 适合用在 iOS 端和  安卓端的, 而个推 那就只能完美支持安卓端  ,安卓端可以  消息通知  和   消息的传透, 而iOS 只能消息传透(ps:什么是消息传透 看下下图我做的demo:)  

    这就是消息的传透

    二、好了进入主题。关于环信的消息推送机制

     首先给大家推荐一个介绍推送机制很优秀的帖子:http://www.jianshu.com/p/e347f999ed95,里面关于本地推送和远程推送的介绍都很详细,至少我看了感觉还是收获很多的.

    下面是以QQ服务器为我们说明的即时通讯的机制:

    qq消息的机制

    其实,做开发的人看了图就会明白,消息的机制就是这么简单  ,推送识别的就是设备,并不是用户!!

    三、具体的流程

    在xcode下 新建一个demo,随便命名  我就叫 简单聊  因为 我想做一个这样的APP。

    1. 创建AppID  和描述文件

    我们是要集成推送的,所以我们需要用到cer文件,这个东西实际上就是苹果给开发者颁发的一个证书,我们需要将它导入到我们的AppId配置里,否则的话是无法集成推送的,还记得安装应该的时候会提示"无法安装为认证发布者的应用"之类的信息么,我猜测这个cer文件就是我们身份的标示,使我们开发的应用可以供人们正常安装使用,关于证书有一篇很详细的帖子,希望了解证书之类信息的看官可以去瞅瞅:http://m.blog.csdn.net/article/details?id=8617788

    申请证书流程我就不写上去了  ,因为跟平时我们上传证书什么的没什么区别

    图二 图一

    2.创建appID  和描述文件

    最终配置成功图 图一 图一

    最后配置出来的 证书是   下图:

    下载的证书 钥匙串导出的p12证书


    最后配置一下 生成证书:

    生产证书


    4.在环信创建我们的应用

    注册一个官网的账号,注册过了就直接干!!  注册时候选择  “注册即时通讯云”。

    然后就是创建应用  如下图:

    创建应用

    填写完成如下

    上传证书:

    完毕

    5,集成环信到项目中:

    首先在这里下载最新的SDK(截至到写本文时最新的SDK为)

    http://www.easemob.com/download/im环信推送SDK下载链接

    点击iOS的最新SDK下载,这里下载的是V3.x的SDK

    我们只需要下面两个圈的文件  导入demo

    导入之后会有很多错误  ,慢慢改过来吧

    这一步很重要,因为SDK 不支持 bitcode,所以要将 Build Settings → Linking → Enable Bitcode 中设置 NO。

    command+B编译工程,大量爆红.原因是这些类里没有导入UIKit框架,在每个类的.h文件里显式导入UIKit框架,在鼠标指针处添加

    #import <UIKit/UIkit.h>;

    然后开启推动

    6.测试是否集成成功

    首先,我们去环信的后台给我们的应用添加一个用户

    接着我们要去appledate.m文件里添加东西了,很重要一步,废话不多说,直接贴出来需要配置的代码,直接拿去用0.0,需要添加的东西我在注释里注释的很明白...

    上面的几个方法在appdelegate里是必须重写的,不然会直接导致推送不成功.其中.需要重点说明的是:

    只有在应用完全退出被杀掉的状态下,才可以收到环信推送的通知;

    如果要发送在线的通知,需要在messagesDidReceive方法里获取到环信推送的消息之后给用户发起一个本地通知,这个大家可以自己研究下.

    通过设置emoptions.displayStyle = EMPushDisplayStyleSimpleBanner;(上面代码有)可以设置有通知过来的时候的显示方式,显示一个提示或者显示完整的消息.

    测试消息:在应用完全退出的情况下(使用在环信注册的账户登录一次,确认登录成功之后再完全退出),选中我们的用户,点击发送消息:

    图二 图一

    测试结果:

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

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

    {

    //AppKey:注册的AppKey,点击"应用概述"可以看到AppKey,粘贴过来就可以。

    //apnsCertName:推送证书名,填写你的开发证书或者发布证书名,就是上传到环信后台的两个中的一个,什么环境下测试使用什么环境的证书。

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

    options.apnsCertName=@"deleve";

    [[EMClientsharedClient]initializeSDKWithOptions:options];

    //登录环信这里使用的是我刚才在环信后台创建的账户名和密码,使用这个账户登录,到时候如果在后台给客户端发消息的话,就可以找到该用户

    [[EMClientsharedClient]loginWithUsername:@"15217636961"

    password:@"123456"

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

    if(!aError) {

    NSLog(@"环信登陆成功");

    EMPushOptions*emoptions = [[EMClientsharedClient]pushOptions];

    //设置有消息过来时的显示方式:1.显示收到一条消息2.显示具体消息内容.

    //自己可以测试下

    emoptions.displayStyle=EMPushDisplayStyleMessageSummary;

    [[EMClientsharedClient]updatePushOptionsToServer];

    }else{

    NSLog(@"环信登陆失败");

    }

    }];

    /**

    注册APNS离线推送iOS8注册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];

    }

    //添加监听在线推送消息

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

    returnYES;

    }

    //监听环信在线推送消息

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

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

    [alertViewshow];

    //aMessages是一个对象,包含了发过来的所有信息,怎么提取想要的信息我会在后面贴出来.

    }

    //将得到的deviceToken传给SDK

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

    [[EMClientsharedClient]bindDeviceToken:deviceToken];

    }

    //注册deviceToken失败

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

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

    }

    // APP进入后台

    - (void)applicationDidEnterBackground:(UIApplication*)application

    {

    [[EMClientsharedClient]applicationDidEnterBackground:application];

    }

    // APP将要从后台返回

    - (void)applicationWillEnterForeground:(UIApplication*)application

    {

    [[EMClientsharedClient]applicationWillEnterForeground:application];

    }

    相关文章

      网友评论

      • 西蜀:你好,我按照环信的集成,完成了所有设置,然后,他就会有通知栏的框,我不想要那个啊啊啊啊啊啊,怎么给摘掉呢
        流动的水gita:@西蜀 是通知栏的框?
      • 齊同学:请问环信发来的APNs远程推送通知栏显示的 冒号加推送信息、冒号之前的内容是iOS来配置吗
        年轻人的心情_爱我所爱:@齊同学 好的,多谢
        齊同学:@年轻人的心情_爱我所爱 不用移动端写;服务端按照环信的开发文档、单独为iOS配置一个特殊的拓展类型、在文档上可以查到
        年轻人的心情_爱我所爱:你这个问题解决了没,我也想知道答案:smile:
      • unhangcorn:感谢分享 好人一生平安
      • 流氓也斯文:你好,请问怎么设置环信推送的声音呢
      • 神一样的男人卫:写的很好!感谢楼主的分享,准备啃食一番,如有问题还请楼主指教一下!
      • 哎呦我去叫什么呢:你好,为什么我一直的接不到推送啊,证书都配置了啊
      • feng_dev:加好友的监听,好像没有离线推送啊。不太懂环信的推送是不是就只用在消息(这里指的是聊天的消息,而不是加好友一类的消息)的发送了。
      • 双子座的小小杂货铺:还是收不到信息,注册推送通知之前,用户必须先登录环信么
      • 有梦想的咸鱼宁:有用~谢谢
      • 雪_晟:你好 我的推送开关,Add the push Notifications featuer to your APP ID 一直是红的什么原因
        流动的水gita:@雪_晟 APP kill了吗,是在kill掉情况才有推送的
        雪_晟:@流动的水gita 亮了啊 可是 环信显示登录成功,可是在后台下拉栏收不到通知,
        流动的水gita:@雪_晟 推送配置那里 enable 亮绿色了吗 ,亮了之后下载配置p12证书了吗 肯定是配置还没好的原因 。
      • eab99c8a8894:好犀利👍

      本文标题:环信消息推送

      本文链接:https://www.haomeiwen.com/subject/vavywttx.html