美文网首页
IM解决方案

IM解决方案

作者: LeoCao | 来源:发表于2016-11-05 14:21 被阅读0次

    第一种基于推送

    1、推送:用户不在线可以收到消息,eg:QQ的推送

    2、缺点:限定字数 --- 不超过 256 个字符(苹果服务器规定的),推送可以是语音、图片,不过字节数有限制;

    3、iOS  --- Jpush(极光推送)特点:块

          和 百度推送的第三方服务 优点:基于LBS进行推送 --- 发送消息给百度服务器,服务器推送给苹果服务器《可以基于某个地区,社区》

    4:缺点:iOS 和 安卓之间的互通有问题 --- 安卓的机制和苹果的推送机制不同。(不在线的情况下,苹果推送安卓,安卓客户端推送给苹果会出问题)

    第二种:基于XMPP 协议的方案

    1、xmpp协议,在socket基础上封装的

    2、特点:简单方便; 将xmpp的SDK嵌套进来就行,是基于 xml 文件格式的传输;

    3、需要构建xmpp 服务器(基于开源框架的构建:openFile)

    4、放弃 基于 xmpp协议方案的原因 : 语音 和 视频的实时传输,实现难度大。(长链接);

      eg:QQ , 需要修改服务器 openFile框架

    第三种方案 : 基于socket 

    1、选择一种socket 框架,eg:GCDSocket 框架。

    2、服务端也需要选择 socket矿建

    3、特点:安卓和苹果的互通没有任何问题。可以实时的语音和视频通讯;

    4、IM 集成方案就是很多就是很多公司基于  socket封装好的解决方案,需要花钱;提供集成解决方案;

    5、缺点:调适难度大(未自己进行封装);基于GCDSocket框架写的IM即时通讯方案

    1、不涉及语音,图片少,就可以基于推送;

    2、如果用户不在线要接收消息,基于XMPP 协议的方案就不合适

    3、组合方案:文字信息实现推送(不用判断当前用户是否在线);基于Socket的封装需要判断当前用户是否在线,如果用户应用在后台,就要进行推送,否则有可能收不到消息;

    推送证书的申请

    1、分为 测试和上线证书 ,两个 tokenDevice 不同, 对应的苹果服务器也不相同

    2、测试成功之后,需要切换发布证书,才能上线

    3、Certificates  --- Development 

    4、AppId 必须是唯一的;

    5、AppIDs  ---- App ID Description :Name (pushDevelopmentTest) -- Bundle ID(公司域名反写 + 应用名《选择固定的AppID》)  ---- Push Notifivation 选对勾:pushNotifications Enabled

    6、 Profiles 文件t添加 --- Selecte App ID -- Selected Cetificates -- Device -- Profile Name:profile.test -- downLoad

    7、服务器需要的文件 为 Certificates ---Development -- Apple push Notification Service SSL(sandBox)  --- AppID 绑定 --- 生成p12证书请求 CSR file -- cetificate is Ready <服务器用测试或者发布的推送证书>

    为什么要用推送?

    1、iOS操作系统限制普通应用程序不能在长期在后台运行;《可以再后台运行的程序有三种 : voip, 获取经纬度信息类, 音频播放的app》;可以申请多运行10分钟以内

    2、有IM的应用一旦退出或者切换到后台,没有办法接受到实时的消息。

    3、操作系统帮我实现的推送。

    5、推送的样式

    6、退推送的步骤 --- Provider ---> APNs ---> Device --- >Client App 接收; 后台通知中心可以接受到,前台直接可以接受到; 消息的发送者(消息接受者《具体设备》,发送的设备的具体应用《那个App》) --- 》苹果服务器 --- 》用户设备 --- 》 App

    7、发送的消息提供给苹果服务器 需要知道 发送给那个设备,那个应用程序

    8、通过什么来区分应用程序  ---- AppID 来区分,唯一性

    9、UUID 设备的唯一标识,可以锁定哪一个设备;

    10、设备标识号:TokenDevice 传进Provider,苹果服务器,操作系统判断应用和设备是否存在;

    11、第一步:Device  ---- > APNs(SSL connect),询问设备是否允许推送

        第二部  :APNs  --- > Decece (deviceToken) 苹果服务器给设备唯一标识

      第三部 : Device ---- >ClientApp (deciceToken)  --- > deviceToken -- >Provider 再走前面的步骤

    12: 推送证书的制作;  应用程序要获取当前设备的 tokenDevice (相当于ID);  把获取到的TokenDevice 提交给 message Server 服务器 - ; 应用可以接受消息

    Demo

    应用程序名跟 证书的后缀一样

    1、应用 Bundle Identifier  与AppID 的BundleID一样

    2、设置推送的样式,在Appdelegate里应用加载的回调方法里\

    // 设置推送的样式

    [[UIApplication sharedApplication ] registerForRemoteNotificationTypes: ///8.0 Desprecated(UIRemoteNotifivationTypeAlert | UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound)];

    (注册证书已有,会发送通知请求)

    ************8.0以上系统使用 registerUserNotificationSettings:

    3、重写函数,用于接受DeviceToken

    -(void)application:(UIApplication *)appdidRgisterForRemoteNotificationWithDeviceToken:(NSData *)deciceToken {

            NSString *strToken = [NSString stringWithFormat:@"DeviceToken=%@",deviceToken];

           [self alertNotice:@"" wihMSG:strToken cancleButtonTitle:"ok" otherButtonTitle"@""];

    }

    4、对照Bundle Identifier

    5\pushTestPlist 文件也要更改 Surppoting Files --- pushTest.Info.plist -- Bundle Identifier

    6、target 和 PROGECT--- Build Setting  --- Code Signing ---Code Signing Identity -- 测试证书

    7、Provisioning Profile --- 添加生成的描述文件

    8、客户端允许推送之后 获得 deciceToken

    9、.cer 推送证书 给服务器 / 给一个工程(服务端程序),相当于给服务器 deviceToken 和 cetificate

    10\、服务器端程序获得 deviceToken 和 cetificate 之后运行,服务器就可以进行按时推送了

    相关文章

      网友评论

          本文标题:IM解决方案

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