Blame view

README.md 8.44 KB
liumingming authored
1
# HHVDoctorSDK 接入说明
shmily authored
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25

<p align="right">
北京和缓医疗科技有限公司<br/>
网址:https://www.hh-medic.com <br/>
地址:北京市东城区东直门来福士7层
</p>

   * [HHDoctorSDK 接入说明](#hhdoctorsdk-接入说明)
      * [0. 更新日志](#0-更新日志)
      * [1. 集成方式](#1-集成方式)
         * [1.1. 手动集成](#11-手动集成)
         * [1.2. 自动集成(推荐)](#12-自动集成推荐)
         * [1.3. 调用规则](#13-调用规则)
      * [2. 初始化](#2-初始化)
      * [3. 登录账户](#3-登录账户)
         * [3.1. 登录](#31-登录)
         * [3.2. 登出](#32-登出)
      * [4. 视频呼叫](#4-视频呼叫)
      * [5. 代理(delegate)(可选)](#5-代理delegate可选)
         * [5.1. 加入](#51-加入)
         * [5.2. 移除](#52-移除)
      * [6. 其他配置](#6-其他配置)
         * [6.1. APNs](#61-apns)
         * [6.2. Background Modes](#62-background-modes)
chengyanfang authored
26
         * [6.3. 扩展参数](#63-extension-params)
shmily authored
27 28 29 30 31 32 33 34 35
      * [问题说明](#问题说明)
         * [支付宝 SDK 冲突](#支付宝-sdk-冲突)
         * [swift 4.1](#swift-41)
         
##  0. 更新日志

> 2.0.2

 - 适配 Xcode 10, swift4.2
chengyanfang authored
36
shmily authored
37 38 39 40 41 42 43

## 1. 集成方式

说明: 接入 HHDoctorSDK 大概会使 ipa 包增加 15M.
 HHDoctorSDK 提供两种集成方式:您既可以通过 CocoaPods 自动集成我们的 SDK,也可以通过手动下载 SDK, 然后添加到您的项目中。
我们提供的下载地址:
liumingming authored
44
 我们提供了发布仓库: [HHVDoctorSDK](https://code.hh-medic.com/hh_public/h'hhhvDoctorSDK.ios)
shmily authored
45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81
 集成demo地址: [HHDoctorSDK_demo_iOS](https://github.com/HHMedic/HHDoctorSDK_demo_iOS)

由于呼叫视频需要相机相册权限,需要在info.plist中添加对应的权限,否则会导致无法调用。

```
<key>NSPhotoLibraryUsageDescription</key>
<string>应用需要使用相册权限,以便您向医生发送健康资料。</string>
<key>NSCameraUsageDescription</key>
<string>应用需使用相机权限,以便您向医生进行视频咨询。</string>
<key>NSMicrophoneUsageDescription</key>
<string>应用需使用麦克风权限,以便您向医生进行视频咨询。</string>
```

### 1.1. 手动集成

1. 根据自己工程需要,下载对应版本的 HHMSDK,得到 NIMSDK.framework ,NIMAVChat.framework,NVS.framework,SecurityKit.framework 和 HHDoctorSDK.framework,以及未链接的全部三方依赖库 ,将他们导入工程。
2. 添加其他 HHDoctorSDK 依赖库。

    - SystemConfiguration.framework
    - MobileCoreServices.framework
    - AVFoundation.framwork
    - CoreTelephony.framework
    - CoreMedia.framework
    - VideoToolbox.framework
    - AudioToolbox.framework
    - libz
    - libsqlite3.0
    - libc++
3.`Build Settings` -> `Other Linker Flags` 里,添加选项 `-ObjC`
4.`Build Settings` -> `Enable Bitcode` 里,设置为 `No`
5. 如果需要在后台时保持音频通话状态,在 `Capabilities` -> `Background Modes` 里勾选 `audio, airplay, and Picture in Picture`

### 1.2. 自动集成(推荐)
*`Podfile` 文件中加入

```shell
use_frameworks!
chengyanfang authored
82
pod 'hhVDoctorSDK', :git => "http://code.hh-medic.com/hh_public/hhvDoctorSDK.ios.git"
shmily authored
83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294
```
* 安装

``` shell
pod install
```

### 1.3. 调用规则
所有 HHDoctorSDK 业务均通过 HHMSDK 单例调用

```swift
public class HHMSDK : NSObject {

    public static let `default`: HHDoctorSDK.HHMSDK
}
```

## 2. 初始化
在使用 HHDoctorSDK 任何方法之前,都应该首先调用初始化方法。正常业务情况下,初始化方法有仅只应调用一次。

HHSDKOptions 选项参数列表

参数|类型|说明
------|---|--------
productId|String|和缓分配的产品ID(必填)
isDevelopment|Bool|服务器模式(测试/正式)
isDebug|Bool|调试模式(是否打印日志)
APNs|String |推送证书名(由和缓生成)
hudManager| HHHUDable|自定义 progressHUD
hudDisTime| Double|hud 自动消失时间

调用示例

```swift
let option = HHSDKOptions(isDebug: true, isDevelop: true)
option.cerName = "2cDevTest"
// let option = HHSDKOptions()
// option.isDevelopment = true
// option.isDebug = true
// option.hudDisTime = 2
HHMSDK.default.start(option: option)
```


## 3. 登录账户
在对医生视频呼叫之前,需要先登录账号信息。账号的 uuid 由和缓提供。
### 3.1. 登录

*注意: 不能多次调用登录 SDK,否则会导致视频故障。*

* 原型

```swift
public class HHMSDK : NSObject {

    /// 登录账号
    ///
    /// - Parameters:
    ///   - uuid: 用户的 唯一标志符
    ///   - completion: 完成回调
    public func login(uuid: Int, completion: @escaping HHMedicSDK.HHLoginHandler)
}
```

* 调用示例

```swift
// 登录
HHMSDK.default.login(uuid: 100001531) { (error) in
    if let aError = error {
        print("登录错误: " + aError.localizedDescription)
    }
}
```
error 为登录错误信息,成功则为 nil。

### 3.2. 登出
应用层登出/注销/切换自己的账号时需要调用 HHMSDK 的登出操作,该操作会通知和缓服务器进行 APNs 推送信息的解绑操作,避免用户已登出但推送依然发送到当前设备的情况发生。

* 原型

```swift
public class HHMSDK : NSObject {

    /// 登出
    public func logout()
}
```

* 调用示例

```swift
// 登出
HHMSDK.default.logout()
```

## 4. 视频呼叫
根据实际场景的不同,可以进行成人、儿童方向的向医生咨询。

* 原型

```swift
public class HHMSDK : NSObject {

    /// 主叫发起通话
    ///
    /// - Parameter type: 呼叫类型
    public func startCall(_ type: HHMedicSDK.HHCallType)
}
```

* 调用示例

```swift
// 咨询儿童问题
HHMSDK.default.startCall(.child)

// 咨询成人问题
HHMSDK.default.startCall(.adult)
```

HHCallType 枚举列表

值 | 说明
--------- | -------------
child | 儿童
adult | 成人

## 5. 代理(delegate)(可选)
代理主要用于视频过程中的状态反馈。如果不需要状态反馈,可以不考虑该代理。
所有的代理方法都是可选的,可以根据自己的实际需要实现不同的代理方法。

* 原型

```swift
/// 视频管理器代理
public protocol HHMVideoDelegate : NSObjectProtocol {

    /// 主动视频时的呼叫状态变化
    ///
    /// - Parameter state: 当前呼叫状态
    public func callStateChange(_ state: HHMedicSDK.HHMCallingState)

    /// 通话已接通
    public func callDidEstablish()

    /// 呼叫失败
    public func onFail(error: Error)

    public func onCancel()

    /// 通话已结束 (接通之后才有结束)
    public func callDidFinish()

    /// 转呼医生
    public func onExtensionDoctor()

    /// 接收到呼叫(被呼叫方)
    ///
    /// - Parameters:
    ///   - callID: 呼叫的 id
    ///   - from: 呼叫人 id
    public func onReceive(_ callID: String, from: String)

    /// 收到视频呼入时的操作(被呼叫方)
    ///
    /// - Parameter accept: 接受或者拒接
    public func onResponse(_ accept: Bool)

    /// 缺少必要权限
    ///
    /// - Parameter type: 缺少的权限类型
    public func onLeakPermission(_ type: HHMedicSDK.PermissionType)
}
```

### 5.1. 加入
代理支持同时设置多个。

```swift
HHMSDK.default.add(delegate: self)
```

### 5.2. 移除

```swift
HHMSDK.default.remove(delegate: self)
```


## 6. 其他配置

### 6.1. APNs

在 appDelegate 中向 SDK 传入 deviceToken 即可。

```swift
func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
    HHMSDK.default.updateAPNS(token: deviceToken)
}
```

*注意:需要上传 APNs 的 p12 文件,请联系我们上传。*

### 6.2. Background Modes

为了支持用户压后台后音视频的正常使用,需要设置 Background Modes。具体设置如下:

```
xxx target -> Capabilities -> Background Modes -> 勾选 Audio,Airplay and Picture in Picture
```
chengyanfang authored
295 296 297 298 299 300 301 302 303 304 305
### 6.3. 扩展参数

为了支持收集渠道日志,SDK支持在初始化时传递自定义参数。

```
let option = HHSDKOptions(productId: "3000", isDebug: true, isDevelop: true)
option.asyncLogin = false
option.mExtension = ""

```
shmily authored
306 307 308 309 310 311 312 313 314 315 316 317 318 319

## 问题说明

### 支付宝 SDK 冲突
若出现UTDID冲突错误,请切换支付宝 SDK 到无UTDID版本.
[官方说明](https://docs.open.alipay.com/54/104509/)


### swift 4.1
master 分支已经支持 swift4.2, 如果需要支持 swift4.1, 请切换到对应分支 `swift4.1`

```
pod 'HHDoctorSDK', :git => "http://code.hh-medic.com/hh_public/HHDoctorSDK.ios.git", :branch => 'swift4.1'
```