zoukankan      html  css  js  c++  java
  • iOS 环信集成项目应用

    环信iOS端3.0版本集成记录--聊天界面篇

     环信离线推送证书。。。

     

    1,环信处在后台的时候,消息的接收与推送

    离线发推送

    配置属性

    EMCallOptions *options = [[EMClient sharedClient].callManager getCallOptions];
    //当对方不在线时,是否给对方发送离线消息和推送,并等待对方回应
    options.isSendPushIfOffline = NO;
    [[EMClient sharedClient].callManager setCallOptions:options];
    

    监听回调

    [[EMClient sharedClient].callManager setBuilderDelegate:self];
    

    处理回调

    - (void)callRemoteOffline:(NSString *)aRemoteName
    {
        NSString *text = [[EMClient sharedClient].callManager getCallOptions].offlineMessageText;
        EMTextMessageBody *body = [[EMTextMessageBody alloc] initWithText:text];
        NSString *fromStr = [EMClient sharedClient].currentUsername;
        EMMessage *message = [[EMMessage alloc] initWithConversationID:aRemoteName from:fromStr to:aRemoteName body:body ext:@{@"em_apns_ext":@{@"em_push_title":text}}];
        message.chatType = EMChatTypeChat;
        
        [[EMClient sharedClient].chatManager sendMessage:message progress:nil completion:nil];
    }

     

     

    前提:

    观看视屏,视频地址如下: 
    环信SDK集成:http://www.imgeek.org/video/40 
    环信EaseUI集成:http://www.imgeek.org/video/39

    具体集成过程:

    一: 添加依赖库

    1. CoreMedia.framework
    2. AudioToolbox.framework
    3. AVFoundation.framework
    4. 4.MobileCoreServices.framework
    5. ImageIO.framework
    6. libc++.tbd
    7. libz,tbd
    8. libsqlite3.tbd
    9. libstdc++.6.0.9.tbd
    10. Foundation.framework
    11. libiconv.tbd (Xcode7以上)

    最终效果如图: 
    这里写图片描述

    二:一些设置

    1.修改info.plist文件,适配iOS9以上系统,在info.plist中添加

        <key>NSAppTransportSecurity</key>
        <dict>
            <key>NSAllowsArbitraryLoads</key>
            <true/>
        </dict>

    2.修改info.plist文件,适配iOS10.0,在info.plist中添加

    为了调用相册,地理位置,话筒,照相机,通讯录

        <key>NSPhotoLibraryUsageDescription</key>
        <string>中华人需要使用相册服务获取照片</string>
        <key>NSCameraUsageDescription</key>
        <string>中华人需要使用照相机服务进行拍照获取照片</string>
        <key>NSContactsUsageDescription</key>
        <string>中华人需要使用通讯录服务进行好友邀请</string>
        <key>NSMicrophoneUsageDescription</key>
        <string>中华人需要使用话筒进行吐槽反馈信息</string>
        <key>NSLocationUsageDescription</key>
        <string>中华人需要使用定位服务来发送位置信息</string>

    3.Bulid Setting 设置bitcode 为NO,如图: 

    这里写图片描述
    4.新建pch文件,如图: 
    这里写图片描述
    进行设置,如图: 
    这里写图片描述

    三:Appdelegate

    #import "AppDelegate.h"
    #import "ChatViewController.h"
    
    @interface AppDelegate ()
    
    @end
    
    @implementation AppDelegate
    
    
    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
        // Override point for customization after application launch.
    
        // SDK的初始化
        /**
         * EMOptions类是SDK的配置信息
         * 可以加入推送证书的名称
         */
        EMOptions *options = [EMOptions optionsWithAppkey:@"luoxiaoyong#mingxin"];
        options.apnsCertName = @"Push_dev";
    
        // 初始化SDK
        EMError *error = [[EMClient sharedClient] initializeSDKWithOptions:options];
        if (!error) {
            NSLog(@"初始化成功");
        }
    
        // 登录
        error = [[EMClient sharedClient] loginWithUsername:@"xrdaly001" password:@"123456"];
    
        if (!error) {
    
            NSLog(@"登录成功");
        }
        else {
    
            NSLog(@"登录失败");
        }
    
        self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
        ChatViewController *vc = [[ChatViewController alloc] initWithConversationChatter:@"xrdaly002" conversationType:EMConversationTypeChat];
        UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:vc];
        self.window.rootViewController = nav;
    
        [self.window makeKeyAndVisible];
    
        return YES;
    }

    四:添加键盘表情(说明)

    在EaseMessageViewController.m的viewDidLoad方法结尾处加上

    EaseEmotionManager * manager = [[EaseEmotionManager alloc] initWithType:EMEmotionDefault emotionRow:3 emotionCol:7 emotions:[EaseEmoji allEmoji]];
    [self.faceView setEmotionManagers:@[manager]];

    五:国际化文件乱码问题

    下载demo,直接把demo中的国际化文件拷贝到现在项目中,ok

    一、解析环信

     对环信的使用:

    1.聊天列表 信息来往判断 (根据最后一次聊天记录,是否有订单记录,订单号、信息)

    2.聊天界面 计时关闭会话功能,用户可以手动关闭会话,病例查看,不同医务专家 看到简历目录不同;处于后台消息的推送;消息的点击事件,透传,消息扩展;

    3.病例是由订单记录中的身份证获得的,在接收语音视频时,获得身份证1uid+2uid 本地保存;发起的时候 通过通知获得

    2.0—3.0变化

    3.0 中的核心类为 EMClient 类,通过 EMClient 类可以获取到 chatManager、groupManager、contactManager、roomManager对象。原来 2.0 版本的 SDK 很多方法提供了同步、异步回调、异步(block)三种方法,3.0 版只提供同步方法(async开头的方法为异步方法)。

    代码升级替换文档、环信 SDK 3.0 升级文档、使用升级替换脚本

     

    1.如果需要离线推送,制作推送证书

    2.环信主要框架 :SDK_Core:是核心的消息同步实现,完成于服务器之间的信息交换;SDK:基于核心协议实现完整的IM功能,实现了不同类型的消息的收发、会话管理、群组、好友、聊天室等

    EaseUI:是IM相关的UI控件,可以快速的集成环信功能

    3.SDK 采用模块化设计,每一模块的功能相对独立和完善,用户可以根据自己的需求选择使用下面的模块:

    EMClient: 是 SDK 的入口,主要完成登录、退出、连接管理等功能。也是获取其他模块的入口。

    EMChatManager: 管理消息的收发,完成会话管理等功能。

    EMContactManager: 负责好友的添加删除,黑名单的管理。

    EMGroupManager: 负责群组的管理,创建、删除群组,管理群组成员等功能。

    EMChatroomManager: 负责聊天室的管理。

    注意:如果您是从 SDK2.x 升级到 3.0,可以参考环信 SDK 2.x到3.0升级文档。

     

    4.第三方库介绍

    EaseUI 中用到的第三方库:

    MWPhotoBrowser: 图片处理库,浏览显示

    MJRefresh: 用于页面刷新

    MBProgressHUD: 用于提示加载刷新

    libopencore-amrnb.a,libopencore-amrwb.a: 用于 amr 与 wav 之间的转换

    Demo 中用到的第三方库:

    Parse.framework、Bolts.framework: Demo 中的用户信息存储在 Parse,这两个库是 Parse 所需要的库,开发者如果没用 Parse 存储,不要复制到自己项目中

    libMobClickLibrary.a: 友盟相关的库,用于环信 Demo 基本信息的统计,开发者不用或者已有别的版本的库不要复制到自己项目

     

    5.集成动态库上传AppStore

    由于 iOS 编译的特殊性,为了方便开发者使用,我们将 i386 x86_64 armv7 arm64 几个平台都合并到了一起,所以使用动态库上传appstore时需要将i386 x86_64两个平台删除后,才能正常提交审核

    在SDK当前路径下执行以下命令删除i386 x86_64两个平台

    实时音视频版本Hyphenate.framework

     

    lipo Hyphenate.framework/Hyphenate -thin armv7 -output Hyphenate_armv7

    lipo Hyphenate.framework/Hyphenate -thin arm64 -output Hyphenate_arm64

    lipo -create Hyphenate_armv7 Hyphenate_arm64 -output Hyphenate

    mv Hyphenate Hyphenate.framework/

    不包含实时音视频版本HyphenateLite.framework

     

    lipo HyphenateLite.framework/HyphenateLite -thin armv7 -output HyphenateLite_armv7

    lipo HyphenateLite.framework/HyphenateLite -thin arm64 -output HyphenateLite_arm64

    lipo -create HyphenateLite_armv7 HyphenateLite_arm64 -output HyphenateLite

    mv HyphenateLite HyphenateLite.framework/

     

    6.SDK 同步/异步方法区分

    SDK 中,大部分接口都提供了同步和异步方法(注:同步方法会阻塞主线程,需要用户自己创建异步线程执行;带有 block 的方法为异步方法。)

     

    7.自动登录在以下几种情况下会被取消:

     

    用户调用了 SDK 的登出动作;

    用户在别的设备上更改了密码,导致此设备上自动登录失败;

    用户的账号被从服务器端删除;

    用户从另一个设备登录,把当前设备上登录的用户踢出。

    所以,在您调用登录方法前,应该先判断是否设置了自动登录,如果设置了,则不需要您再调用。

     

    8.初始化单聊、群聊、聊天室页面:文字、图片、语音、视频、位置

    EMTextMessageBody *body = [[EMTextMessageBody alloc] initWithText:@"要发送的消息"];

    NSString *from = [[EMClient sharedClient] currentUsername];

     

    //生成Message

    EMMessage *message = [[EMMessage alloc] initWithConversationID:@"6001" from:from to:@"6001" body:body ext:messageExt];

    message.chatType = EMChatTypeChat;// 设置为单聊消息

    //message.chatType = EMChatTypeGroupChat;// 设置为群聊消息

    //message.chatType = EMChatTypeChatRoom;// 设置为聊天室消息

     

    构造透传消息

    SDK 提供的一种特殊类型的消息,即 CMD,不会存 db,也不会走 APNS 推送,类似一种指令型的消息。比如您的服务器要通知客户端做某些操作,您可以服务器和客户端提前约定好某个字段,当客户端收到约定好的字段时,执行某种特殊操作。

     

    EMCmdMessageBody *body = [[EMCmdMessageBody alloc] initWithAction:action];

    NSString *from = [[EMClient sharedClient] currentUsername];

     

    // 生成message

    EMMessage *message = [[EMMessage alloc] initWithConversationID:@"6001" from:from to:@"6001" body:body ext:messageExt];

    message.chatType = EMChatTypeChat;// 设置为单聊消息

    //message.chatType = EMChatTypeGroupChat;// 设置为群聊消息

    //message.chatType = EMChatTypeChatRoom;// 设置为聊天室消息

     

    构造扩展消息

    当 SDK 提供的消息类型不满足需求时,开发者可以通过扩展自 SDK 提供的文本、语音、图片、位置等消息类型,从而生成自己需要的消息类型。

    这里是扩展自文本消息,如果这个自定义的消息需要用到语音或者图片等,可以扩展自语音、图片消息,亦或是位置消息。

    // 以单聊消息举例

    EMTextMessageBody *body = [[EMTextMessageBody alloc] initWithText:@"要发送的消息"];

    NSString *from = [[EMClient sharedClient] currentUsername];

     

    //生成Message

    EMMessage *message = [[EMMessage alloc] initWithConversationID:@"6001" from:from to:@"6001" body:body ext:messageExt];

    message.chatType = EMChatTypeChat;// 设置为单聊消息

    //message.chatType = EMChatTypeGroupChat;// 设置为群聊消息

    //message.chatType = EMChatTypeChatRoom;// 设置为聊天室消息

    message.ext = @{@"key":@"value"}; // 扩展消息部分

  • 相关阅读:
    Django学习之路
    Bootstrap插件及其应用方法网址
    BOM和DOM
    jQuery学习
    初识JS之数据类型
    前端学习之路CSS基础学习二
    前端学习之路CSS基础学习一
    前端学习之路
    ORM
    Python Twisted 学习系列4(转载stulife最棒的Twisted入门教程)
  • 原文地址:https://www.cnblogs.com/xujiahui/p/6894249.html
Copyright © 2011-2022 走看看