wangguolei

fix

  1 +
  2 +## 和缓视频医生 iOS SDK 3.4.0
  3 +
  4 +<p align="right">
  5 +北京和缓医疗科技有限公司<br/>
  6 +网址:https://www.hh-medic.com <br/>
  7 +地址:北京市东城区东直门来福士7层
  8 +</p>
  9 +[toc]
  10 +
  11 +
  12 +
  13 +## 0. 更新日志
  14 +> 3.4.0.03021612
  15 + - 功能优化
  16 +> 3.4.0.02151124
  17 + - 功能优化
  18 +
  19 +> 3.2.0.01261430
  20 + - 功能优化
  21 +
  22 +> 3.1.8.12271737
  23 + - 功能优化
  24 + - 适配xcode15 iOS13
  25 +
  26 +> 3.1.4.10281906
  27 +
  28 + - 细节优化
  29 +
  30 +> 3.1.2
  31 +
  32 + - 增加视频中开关本地摄像头的配置
  33 +
  34 + ```
  35 + 配置方式:
  36 + HHSDKOptions.default.mVideoOptions.enableCloseCamera // 视频中支持开关摄像头 默认不支持
  37 + HHSDKOptions.default.mVideoOptions.isCloseCameraCall // 支持关闭摄像头呼叫 默认不支持
  38 + ```
  39 +
  40 +> 3.1.0
  41 +
  42 + - 增加购买会员配置
  43 +
  44 + ```
  45 + 配置方式:
  46 + HHSDKOptions.default.mUserCenterOptions.enableBuyService // 默认不支持
  47 + ```
  48 +
  49 +
  50 +> 3.0.8
  51 +
  52 + - 增加多人视频功能
  53 + - 适配模拟器运行
  54 +
  55 +
  56 +> 3.0.6
  57 +
  58 + - HHMVideoDelegate增加getChatParentView(_ view : UIView),以便开发者在呼叫页面添加自定义view
  59 + - 增加跳转信息流的接口
  60 + - 删除项目中UIWebview的引用
  61 + - 适配不同版本的xcode
  62 +
  63 +> 2.0.2
  64 +
  65 + - 适配 Xcode 10, swift4.2
  66 +
  67 +
  68 +## 1. 集成方式
  69 +
  70 +说明: 接入 HHDoctorSDK 大概会使 ipa 包增加 15M.
  71 + HHDoctorSDK 提供两种集成方式:您既可以通过 CocoaPods 自动集成我们的 SDK,也可以通过手动下载 SDK, 然后添加到您的项目中。
  72 +我们提供的下载地址:
  73 +
  74 + 我们提供了发布仓库: [HHVDoctorSDK](https://code.hh-medic.com/hh_public/hhvDoctorSDK.ios)
  75 + 集成demo地址: [HHDoctorSDK_demo_iOS](https://code.hh-medic.com/hh_public/HHVDoctorSDK-Demo/tree/master)
  76 +
  77 +由于呼叫视频需要相机相册权限,需要在info.plist中添加对应的权限,否则会导致无法调用。
  78 +
  79 +```
  80 +<key>NSPhotoLibraryUsageDescription</key>
  81 +<string>应用需要使用相册权限,以便您向医生发送健康资料。</string>
  82 +<key>NSCameraUsageDescription</key>
  83 +<string>应用需使用相机权限,以便您向医生进行视频咨询。</string>
  84 +<key>NSMicrophoneUsageDescription</key>
  85 +<string>应用需使用麦克风权限,以便您向医生进行视频咨询。</string>
  86 +```
  87 +
  88 +### 1.1. 手动集成
  89 +
  90 +1. 根据自己工程需要,下载对应版本的 HHMSDK,得到 NIMSDK.framework ,NIMAVChat.framework,NVS.framework,SecurityKit.framework 和 HHDoctorSDK.framework,以及未链接的全部三方依赖库 ,将他们导入工程。
  91 +2. 添加其他 HHDoctorSDK 依赖库。
  92 +
  93 + - SystemConfiguration.framework
  94 + - MobileCoreServices.framework
  95 + - AVFoundation.framwork
  96 + - CoreTelephony.framework
  97 + - CoreMedia.framework
  98 + - VideoToolbox.framework
  99 + - AudioToolbox.framework
  100 + - libz
  101 + - libsqlite3.0
  102 + - libc++
  103 +3.`Build Settings` -> `Other Linker Flags` 里,添加选项 `-ObjC`
  104 +4.`Build Settings` -> `Enable Bitcode` 里,设置为 `No`
  105 +5. 如果需要在后台时保持音频通话状态,在 `Capabilities` -> `Background Modes` 里勾选 `audio, airplay, and Picture in Picture`
  106 +
  107 +### 1.2. 自动集成(推荐)
  108 +*`Podfile` 文件中加入
  109 +
  110 +```shell
  111 +use_frameworks!
  112 +pod 'HHVDoctorSDK', :git => "http://code.hh-medic.com/hh_public/hhvDoctorSDK.ios.git"
  113 +```
  114 +* 安装
  115 +
  116 +``` shell
  117 +pod install
  118 +```
  119 +
  120 +### 1.3. 调用规则
  121 +所有 HHDoctorSDK 业务均通过 HHMSDK 单例调用
  122 +
  123 +```swift
  124 +public class HHMSDK : NSObject {
  125 +
  126 + public static let `default`: HHDoctorSDK.HHMSDK
  127 +}
  128 +```
  129 +
  130 +## 2. 初始化
  131 +在使用 HHDoctorSDK 任何方法之前,都应该首先调用初始化方法。正常业务情况下,初始化方法有仅只应调用一次。
  132 +
  133 +HHSDKOptions 选项参数列表
  134 +
  135 +参数|类型|说明
  136 +------|---|--------
  137 +productId|String|和缓分配的产品ID(必填)
  138 +isDevelopment|Bool|服务器模式(测试/正式)
  139 +isDebug|Bool|调试模式(是否打印日志)
  140 +hudManager| HHHUDable|自定义 progressHUD
  141 +hudDisTime| Double|hud 自动消失时间
  142 +
  143 +调用示例
  144 +
  145 +```swift
  146 +let option = HHSDKOptions(productId: sdkProductId, isDebug: true, isDevelop: true)
  147 +HHMSDK.default.start(option: option)
  148 +```
  149 +
  150 +
  151 +## 3. 登录账户
  152 +在对医生视频呼叫之前,需要先登录账号信息。账号的 userToken 由和缓提供。
  153 +### 3.1. 登录
  154 +
  155 +*注意: 不能多次调用登录 SDK,否则会导致视频故障。*
  156 +
  157 +* 原型
  158 +
  159 +```swift
  160 +public class HHMSDK : NSObject {
  161 +
  162 + /// 登录账户
  163 + ///
  164 + /// - Parameters:
  165 + /// - userToken: 用户的唯一标志
  166 + /// - completion: 完成的回调
  167 + @objc public func login(userToken: String, completion: @escaping HHLoginHandler) {
  168 +}
  169 +```
  170 +
  171 +* 调用示例
  172 +
  173 +```swift
  174 +// 登录
  175 +HHMSDK.default.login(userToken: "token") { [weak self] in
  176 + if let aError = $0 {
  177 + print("登录错误: " + aError.localizedDescription)
  178 + } else {
  179 + print("登录成功")
  180 + }
  181 +}
  182 +```
  183 +error 为登录错误信息,成功则为 nil。
  184 +
  185 +### 3.2. 登出
  186 +应用层登出/注销/切换自己的账号时需要调用 HHMSDK 的登出操作,该操作会通知和缓服务器进行 APNs 推送信息的解绑操作,避免用户已登出但推送依然发送到当前设备的情况发生。
  187 +
  188 +* 原型
  189 +
  190 +```swift
  191 +public class HHMSDK : NSObject {
  192 +
  193 + /// 登出
  194 + public func logout()
  195 +}
  196 +```
  197 +
  198 +* 调用示例
  199 +
  200 +```swift
  201 +// 登出
  202 +HHMSDK.default.logout()
  203 +```
  204 +
  205 +## 4. 视频呼叫
  206 +* 原型
  207 +
  208 +```swift
  209 +public class HHMSDK : NSObject {
  210 +
  211 + /// 发起呼叫
  212 + ///
  213 + /// - Parameters:咨询人的userToken
  214 + @objc dynamic public func call(userToken: String)
  215 +}
  216 +```
  217 +
  218 +* 调用示例
  219 +
  220 +```swift
  221 +// 呼叫
  222 +HHMSDK.default.call("109CF62C95E7F58E2C0C129CAE48FC953F0D04F68EA2608F6783B874E4F50EEF")
  223 +```
  224 +
  225 +
  226 +
  227 +## 5. 指定成员呼叫
  228 +
  229 +* 原型
  230 +
  231 +```swift
  232 +public class HHMSDK : NSObject {
  233 +
  234 + /// 指定人发起呼叫(带 UI)
  235 + ///
  236 + /// - Parameters:needSelectMember 是否需要显示选成员弹窗,默认需要
  237 + @objc dynamic public func startMemberCall(needSelectMember: Bool = true)
  238 +}
  239 +```
  240 +
  241 +* 调用示例
  242 +
  243 +```swift
  244 +HHMSDK.default.startMemberCall()
  245 +```
  246 +
  247 +
  248 +
  249 +
  250 +
  251 +## 6. 代理(delegate)(可选)
  252 +
  253 +代理主要用于视频过程中的状态反馈。如果不需要状态反馈,可以不考虑该代理。
  254 +所有的代理方法都是可选的,可以根据自己的实际需要实现不同的代理方法。
  255 +
  256 +* 原型
  257 +
  258 +```swift
  259 +/// 视频管理器代理
  260 +public protocol HHMVideoDelegate : NSObjectProtocol {
  261 +
  262 + /// 主动视频时的呼叫状态变化
  263 + ///
  264 + /// - Parameter state: 当前呼叫状态
  265 + public func callStateChange(_ state: HHMedicSDK.HHMCallingState)
  266 +
  267 + /// 通话已接通
  268 + public func callDidEstablish()
  269 +
  270 + /// 呼叫失败
  271 + public func onFail(error: Error)
  272 +
  273 + public func onCancel()
  274 +
  275 + /// 通话已结束 (接通之后才有结束)
  276 + public func callDidFinish()
  277 +
  278 + /// 转呼医生
  279 + public func onExtensionDoctor()
  280 +
  281 + /// 接收到呼叫(被呼叫方)
  282 + ///
  283 + /// - Parameters:
  284 + /// - callID: 呼叫的 id
  285 + /// - from: 呼叫人 id
  286 + public func onReceive(_ callID: String, from: String)
  287 +
  288 + /// 收到视频呼入时的操作(被呼叫方)
  289 + ///
  290 + /// - Parameter accept: 接受或者拒接
  291 + public func onResponse(_ accept: Bool)
  292 +
  293 + /// 缺少必要权限
  294 + ///
  295 + /// - Parameter type: 缺少的权限类型
  296 + public func onLeakPermission(_ type: HHMedicSDK.PermissionType)
  297 +}
  298 +```
  299 +
  300 +### 6.1. 加入
  301 +代理支持同时设置多个。
  302 +
  303 +```swift
  304 +HHMSDK.default.add(delegate: self)
  305 +```
  306 +
  307 +### 6.2. 移除
  308 +
  309 +```swift
  310 +HHMSDK.default.remove(delegate: self)
  311 +```
  312 +
  313 +## 7. 信息流
  314 +
  315 +
  316 +
  317 +### 7.1. 跳转信息流
  318 +
  319 +```
  320 +HHMSDK.default.skipChatHome(skipType: .present, vc: self)
  321 +```
  322 +
  323 +
  324 +
  325 +### 7.2. 饿了么购药
  326 +
  327 +正常情况下呼叫完成后,如有必要,医生会发送药卡,如需医生发送饿了么药卡,需在呼叫之前调用发送本地定位的接口。
  328 +
  329 +如需关掉该功能只需发送(0,0)的坐标。具体可参照demo里SettingVC里关于定位的设置。
  330 +
  331 +```
  332 +HHLocation.default.startLocation(lng: "116.431941", lat: "39.940199") /// 此为测试坐标,需替换为用户本地的坐标
  333 +```
  334 +
  335 +在饿了么购药过程中,会涉及到微信支付和支付宝支付。开发者需在自己的项目主Target中配置对应的回调scheme。
  336 +
  337 +分别为,具体可参照demo里的配置
  338 +
  339 +```
  340 +1. identifier : eleme URL Schemes : cash.tb.ele.me
  341 +2. identifier : none URL Schemes : HHPay
  342 +3. identifier : none URL Schemes : alipays
  343 +```
  344 +
  345 +
  346 +
  347 +## 8. 其他配置
  348 +
  349 +### 8.1. APNs
  350 +
  351 +在 appDelegate 中向 SDK 传入 deviceToken 即可。
  352 +
  353 +```swift
  354 +func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
  355 + HHMSDK.default.updateAPNS(token: deviceToken)
  356 +}
  357 +```
  358 +
  359 +*注意:需要上传 APNs 的 p12 文件,请联系我们上传。*
  360 +
  361 +### 8.2. Background Modes
  362 +
  363 +为了支持用户压后台后音视频的正常使用,需要设置 Background Modes。具体设置如下:
  364 +
  365 +```
  366 +xxx target -> Capabilities -> Background Modes -> 勾选 Audio,Airplay and Picture in Picture
  367 +```
  368 +
  369 +### 8.3. 扩展参数
  370 +
  371 +为了支持收集渠道日志,SDK支持在初始化时传递自定义参数(长度限制小于64位,不支持JSON)。
  372 +
  373 +```
  374 +HHSDKOptions.default.setCallExtension(callExtension: "xxx")
  375 +```
  376 +
  377 +
  378 +
  379 +### 8.4. 支付跳转配置
  380 +
  381 +在使用SDK叮当购药或会员购买服务时,需要为项目配置支付跳转的scheme.
  382 +
  383 +配置步骤如下:
  384 +
  385 +Step1: 在 Targets - Info - URL Types下增加:
  386 +
  387 +```
  388 +URL1:
  389 +identifier: ''
  390 +URL Schemes: hh-medic.com
  391 +
  392 +URL2:
  393 +identifier: ''
  394 +URL Schemes: alipays
  395 +
  396 +URL3:
  397 +identifier: 'eleme'
  398 +URL Schemes: cash.tb.ele.me
  399 +```
  400 +
  401 +
  402 +
  403 +Step2: 在AppDelegate下配置如下代码:
  404 +
  405 +```
  406 +func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool {
  407 +
  408 + if url.scheme == "hh-medic.com" {
  409 + NotificationCenter.default.post(name: NSNotification.Name(rawValue: "WX_H5_PAY"), object: nil)
  410 + return true
  411 + }
  412 +
  413 + return true
  414 + }
  415 +```
  416 +
  417 +
  418 +
  419 +### 8.5. 上架 App Store 时,出现 x86_64, i386 架构错误该如何解决?
  420 +
  421 +该问题是由于 App Store 不支持 x86_64, i386 架构引起的,具体解决方法如下:
  422 +
  423 +1. 清空项目编译缓存:
  424 + 选择【Product】>【clean】,按住Alt变成 clean build Folder...,等待操作完成。
  425 +2. 剔除 App Store 不支持的 x86_64 和 i386 架构:
  426 + a. 选择【TARGETS】>【Build Phases】。
  427 + b. 单击加号,选择【New Run Script Phase】。
  428 + c. 添加如下代码:
  429 +
  430 +```
  431 +APP_PATH="${TARGET_BUILD_DIR}/${WRAPPER_NAME}"
  432 +
  433 +# This script loops through the frameworks embedded in the application and
  434 +
  435 +# removes unused architectures.
  436 +
  437 + find "$APP_PATH" -name '*.framework' -type d | while read -r FRAMEWORK
  438 + do
  439 + FRAMEWORK_EXECUTABLE_NAME=$(defaults read "$FRAMEWORK/Info.plist" CFBundleExecutable)
  440 + FRAMEWORK_EXECUTABLE_PATH="$FRAMEWORK/$FRAMEWORK_EXECUTABLE_NAME"
  441 + echo "Executable is $FRAMEWORK_EXECUTABLE_PATH"
  442 +
  443 + EXTRACTED_ARCHS=()
  444 +
  445 + for ARCH in $ARCHS
  446 + do
  447 + echo "Extracting $ARCH from $FRAMEWORK_EXECUTABLE_NAME"
  448 + lipo -extract "$ARCH" "$FRAMEWORK_EXECUTABLE_PATH" -o "$FRAMEWORK_EXECUTABLE_PATH-$ARCH"
  449 + EXTRACTED_ARCHS+=("$FRAMEWORK_EXECUTABLE_PATH-$ARCH")
  450 + done
  451 +
  452 + echo "Merging extracted architectures: ${ARCHS}"
  453 + lipo -o "$FRAMEWORK_EXECUTABLE_PATH-merged" -create "${EXTRACTED_ARCHS[@]}"
  454 + rm "${EXTRACTED_ARCHS[@]}"
  455 +
  456 + echo "Replacing original executable with thinned version"
  457 + rm "$FRAMEWORK_EXECUTABLE_PATH"
  458 + mv "$FRAMEWORK_EXECUTABLE_PATH-merged" "$FRAMEWORK_EXECUTABLE_PATH"
  459 +
  460 + done
  461 +```
  462 +
  463 +### 8.6. 宿主app是基于Object-C时需要注意的问题
  464 +
  465 +1. 需勾选 Always embed swift standard libraries 为 YES 否则在低版本系统会闪退。
  1 +## 和缓视频医生 iOS SDK对接文档 3.4.0(快速接入版本)
1 2
2 -  
3 -<p align="right">  
4 -北京和缓医疗科技有限公司<br/>  
5 -网址:https://www.hh-medic.com <br/>  
6 -地址:北京市东城区东直门来福士7层  
7 -</p>  
8 -[toc]  
9 -  
10 -  
11 -  
12 -## 0. 更新日志  
13 -  
14 -> 3.1.0  
15 -  
16 - - 增加购买会员配置  
17 -  
18 - ```  
19 - 配置方式:  
20 - HHSDKOptions.default.mUserCenterOptions.enableBuyService // 默认不支持  
21 - ```  
22 -  
23 -  
24 -> 3.0.8  
25 -  
26 - - 增加多人视频功能  
27 - - 适配模拟器运行  
28 -  
29 -  
30 -> 3.0.6  
31 -  
32 - - HHMVideoDelegate增加getChatParentView(_ view : UIView),以便开发者在呼叫页面添加自定义view  
33 - - 增加跳转信息流的接口  
34 - - 删除项目中UIWebview的引用  
35 - - 适配不同版本的xcode  
36 -  
37 -> 2.0.2  
38 -  
39 - - 适配 Xcode 10, swift4.2  
40 -  
41 -  
42 -## 1. 集成方式  
43 -  
44 -说明: 接入 HHDoctorSDK 大概会使 ipa 包增加 15M.  
45 - HHDoctorSDK 提供两种集成方式:您既可以通过 CocoaPods 自动集成我们的 SDK,也可以通过手动下载 SDK, 然后添加到您的项目中。  
46 -我们提供的下载地址:  
47 -  
48 - 我们提供了发布仓库: [HHVDoctorSDK](https://code.hh-medic.com/hh_public/hhvDoctorSDK.ios)  
49 - 集成demo地址: [HHDoctorSDK_demo_iOS](https://code.hh-medic.com/hh_public/HHVDoctorSDK-Demo/tree/master) 3 +### 一、引入SDK
  4 +* 配置
50 5
51 由于呼叫视频需要相机相册权限,需要在info.plist中添加对应的权限,否则会导致无法调用。 6 由于呼叫视频需要相机相册权限,需要在info.plist中添加对应的权限,否则会导致无法调用。
52 7
@@ -59,26 +14,6 @@ @@ -59,26 +14,6 @@
59 <string>应用需使用麦克风权限,以便您向医生进行视频咨询。</string> 14 <string>应用需使用麦克风权限,以便您向医生进行视频咨询。</string>
60 ``` 15 ```
61 16
62 -### 1.1. 手动集成  
63 -  
64 -1. 根据自己工程需要,下载对应版本的 HHMSDK,得到 NIMSDK.framework ,NIMAVChat.framework,NVS.framework,SecurityKit.framework 和 HHDoctorSDK.framework,以及未链接的全部三方依赖库 ,将他们导入工程。  
65 -2. 添加其他 HHDoctorSDK 依赖库。  
66 -  
67 - - SystemConfiguration.framework  
68 - - MobileCoreServices.framework  
69 - - AVFoundation.framwork  
70 - - CoreTelephony.framework  
71 - - CoreMedia.framework  
72 - - VideoToolbox.framework  
73 - - AudioToolbox.framework  
74 - - libz  
75 - - libsqlite3.0  
76 - - libc++  
77 -3.`Build Settings` -> `Other Linker Flags` 里,添加选项 `-ObjC`  
78 -4.`Build Settings` -> `Enable Bitcode` 里,设置为 `No`  
79 -5. 如果需要在后台时保持音频通话状态,在 `Capabilities` -> `Background Modes` 里勾选 `audio, airplay, and Picture in Picture`  
80 -  
81 -### 1.2. 自动集成(推荐)  
82 *`Podfile` 文件中加入 17 *`Podfile` 文件中加入
83 18
84 ```shell 19 ```shell
@@ -91,338 +26,46 @@ pod 'HHVDoctorSDK', :git => "http://code.hh-medic.com/hh_public/hhvDoctorSDK.ios @@ -91,338 +26,46 @@ pod 'HHVDoctorSDK', :git => "http://code.hh-medic.com/hh_public/hhvDoctorSDK.ios
91 pod install 26 pod install
92 ``` 27 ```
93 28
94 -### 1.3. 调用规则  
95 -所有 HHDoctorSDK 业务均通过 HHMSDK 单例调用  
96 29
97 -```swift  
98 -public class HHMSDK : NSObject { 30 +### 二、 初始化SDK
99 31
100 - public static let `default`: HHDoctorSDK.HHMSDK  
101 -}  
102 ``` 32 ```
103 -  
104 -## 2. 初始化  
105 -在使用 HHDoctorSDK 任何方法之前,都应该首先调用初始化方法。正常业务情况下,初始化方法有仅只应调用一次。  
106 -  
107 -HHSDKOptions 选项参数列表  
108 -  
109 -参数|类型|说明  
110 -------|---|--------  
111 -productId|String|和缓分配的产品ID(必填)  
112 -isDevelopment|Bool|服务器模式(测试/正式)  
113 -isDebug|Bool|调试模式(是否打印日志)  
114 -APNs|String |推送证书名(由和缓生成)  
115 -hudManager| HHHUDable|自定义 progressHUD  
116 -hudDisTime| Double|hud 自动消失时间  
117 -  
118 -调用示例  
119 -  
120 -```swift  
121 -let option = HHSDKOptions(isDebug: true, isDevelop: true)  
122 -option.cerName = "2cDevTest"  
123 -// let option = HHSDKOptions()  
124 -// option.isDevelopment = true  
125 -// option.isDebug = true  
126 -// option.hudDisTime = 2 33 +swift
  34 +let option = HHSDKOptions(productId: sdkProductId, isDebug: true, isDevelop: true)
127 HHMSDK.default.start(option: option) 35 HHMSDK.default.start(option: option)
128 ``` 36 ```
129 37
  38 +### 三、登录登出
130 39
131 -## 3. 登录账户  
132 -在对医生视频呼叫之前,需要先登录账号信息。账号的 uuid 由和缓提供。  
133 -### 3.1. 登录  
134 -  
135 -*注意: 不能多次调用登录 SDK,否则会导致视频故障。*  
136 -  
137 -* 原型  
138 -  
139 -```swift  
140 -public class HHMSDK : NSObject {  
141 -  
142 - /// 登录账号  
143 - ///  
144 - /// - Parameters:  
145 - /// - uuid: 用户的 唯一标志符  
146 - /// - completion: 完成回调  
147 - public func login(uuid: Int, completion: @escaping HHMedicSDK.HHLoginHandler)  
148 -}  
149 ``` 40 ```
150 -  
151 -* 调用示例  
152 -  
153 -```swift 41 +swift
154 // 登录 42 // 登录
155 -HHMSDK.default.login(uuid: 100001531) { (error) in  
156 - if let aError = error { 43 +HHMSDK.default.login(userToken: "token") { [weak self] in
  44 + if let aError = $0 {
157 print("登录错误: " + aError.localizedDescription) 45 print("登录错误: " + aError.localizedDescription)
  46 + } else {
  47 + print("登录成功")
158 } 48 }
159 } 49 }
160 ``` 50 ```
161 error 为登录错误信息,成功则为 nil。 51 error 为登录错误信息,成功则为 nil。
162 -  
163 -### 3.2. 登出  
164 -应用层登出/注销/切换自己的账号时需要调用 HHMSDK 的登出操作,该操作会通知和缓服务器进行 APNs 推送信息的解绑操作,避免用户已登出但推送依然发送到当前设备的情况发生。  
165 -  
166 -* 原型  
167 -  
168 -```swift  
169 -public class HHMSDK : NSObject {  
170 -  
171 - /// 登出  
172 - public func logout()  
173 -}  
174 ``` 52 ```
175 -  
176 -* 调用示例  
177 -  
178 -```swift 53 +swift
179 // 登出 54 // 登出
180 HHMSDK.default.logout() 55 HHMSDK.default.logout()
181 ``` 56 ```
182 57
183 -## 4. 视频呼叫  
184 -根据实际场景的不同,可以进行成人、儿童方向的向医生咨询。  
185 -  
186 -* 原型  
187 -  
188 -```swift  
189 -public class HHMSDK : NSObject {  
190 -  
191 - /// 主叫发起通话  
192 - ///  
193 - /// - Parameter type: 呼叫类型  
194 - public func startCall(_ type: HHMedicSDK.HHCallType)  
195 -}  
196 -```  
197 -  
198 -* 调用示例  
199 -  
200 -```swift  
201 -// 咨询儿童问题  
202 -HHMSDK.default.startCall(.child)  
203 -  
204 -// 咨询成人问题  
205 -HHMSDK.default.startCall(.adult)  
206 -```  
207 -  
208 -HHCallType 枚举列表  
209 -  
210 -值 | 说明  
211 ---------- | -------------  
212 -child | 儿童  
213 -adult | 成人  
214 -  
215 -## 5. 代理(delegate)(可选)  
216 -代理主要用于视频过程中的状态反馈。如果不需要状态反馈,可以不考虑该代理。  
217 -所有的代理方法都是可选的,可以根据自己的实际需要实现不同的代理方法。  
218 -  
219 -* 原型  
220 -  
221 -```swift  
222 -/// 视频管理器代理  
223 -public protocol HHMVideoDelegate : NSObjectProtocol {  
224 -  
225 - /// 主动视频时的呼叫状态变化  
226 - ///  
227 - /// - Parameter state: 当前呼叫状态  
228 - public func callStateChange(_ state: HHMedicSDK.HHMCallingState)  
229 -  
230 - /// 通话已接通  
231 - public func callDidEstablish()  
232 -  
233 - /// 呼叫失败  
234 - public func onFail(error: Error)  
235 -  
236 - public func onCancel()  
237 -  
238 - /// 通话已结束 (接通之后才有结束)  
239 - public func callDidFinish()  
240 -  
241 - /// 转呼医生  
242 - public func onExtensionDoctor()  
243 -  
244 - /// 接收到呼叫(被呼叫方)  
245 - ///  
246 - /// - Parameters:  
247 - /// - callID: 呼叫的 id  
248 - /// - from: 呼叫人 id  
249 - public func onReceive(_ callID: String, from: String)  
250 -  
251 - /// 收到视频呼入时的操作(被呼叫方)  
252 - ///  
253 - /// - Parameter accept: 接受或者拒接  
254 - public func onResponse(_ accept: Bool)  
255 -  
256 - /// 缺少必要权限  
257 - ///  
258 - /// - Parameter type: 缺少的权限类型  
259 - public func onLeakPermission(_ type: HHMedicSDK.PermissionType)  
260 -}  
261 -```  
262 -  
263 -### 5.1. 加入  
264 -代理支持同时设置多个。  
265 -  
266 -```swift  
267 -HHMSDK.default.add(delegate: self)  
268 -```  
269 -  
270 -### 5.2. 移除  
271 -  
272 -```swift  
273 -HHMSDK.default.remove(delegate: self)  
274 -```  
275 -  
276 -## 6. 信息流  
277 -  
278 -  
279 -  
280 -### 6.1. 跳转信息流  
281 -  
282 -```  
283 -HHMSDK.default.skipChatHome()  
284 -```  
285 -  
286 -  
287 -  
288 -### 6.2. 饿了么购药  
289 -  
290 -正常情况下呼叫完成后,如有必要,医生会发送药卡,如需医生发送饿了么药卡,需在呼叫之前调用发送本地定位的接口。  
291 -  
292 -如需关掉该功能只需发送(0,0)的坐标。具体可参照demo里SettingVC里关于定位的设置。  
293 -  
294 -```  
295 -HHLocation.default.startLocation(lng: "116.431941", lat: "39.940199") /// 此为测试坐标,需替换为用户本地的坐标  
296 -```  
297 -  
298 -在饿了么购药过程中,会涉及到微信支付和支付宝支付。开发者需在自己的项目主Target中配置对应的回调scheme。  
299 -  
300 -分别为,具体可参照demo里的配置  
301 -  
302 -```  
303 -1. identifier : eleme URL Schemes : cash.tb.ele.me  
304 -2. identifier : none URL Schemes : HHPay  
305 -3. identifier : none URL Schemes : alipays  
306 -```  
307 -  
308 -  
309 -  
310 -## 7. 其他配置  
311 -  
312 -### 7.1. APNs  
313 -  
314 -在 appDelegate 中向 SDK 传入 deviceToken 即可。  
315 -  
316 -```swift  
317 -func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {  
318 - HHMSDK.default.updateAPNS(token: deviceToken)  
319 -}  
320 -```  
321 -  
322 -*注意:需要上传 APNs 的 p12 文件,请联系我们上传。*  
323 -  
324 -### 7.2. Background Modes  
325 -  
326 -为了支持用户压后台后音视频的正常使用,需要设置 Background Modes。具体设置如下:  
327 -  
328 -```  
329 -xxx target -> Capabilities -> Background Modes -> 勾选 Audio,Airplay and Picture in Picture  
330 -```  
331 -  
332 -### 7.3. 扩展参数  
333 -  
334 -为了支持收集渠道日志,SDK支持在初始化时传递自定义参数(支持JSON格式)。  
335 -  
336 -```  
337 -HHSDKOptions.default.setCallExtension(callExtension: "xxx")  
338 -```  
339 -  
340 -  
341 -  
342 -### 7.4. 支付跳转配置  
343 -  
344 -在使用SDK叮当购药或会员购买服务时,需要为项目配置支付跳转的scheme.  
345 -  
346 -配置步骤如下:  
347 -  
348 -Step1: 在 Targets - Info - URL Types下增加:  
349 -  
350 -```  
351 -URL1:  
352 -identifier: ''  
353 -URL Schemes: hh-medic.com  
354 -  
355 -URL2:  
356 -identifier: ''  
357 -URL Schemes: alipays  
358 -  
359 -URL3:  
360 -identifier: 'eleme'  
361 -URL Schemes: cash.tb.ele.me  
362 -```  
363 -  
364 -  
365 -  
366 -Step2: 在AppDelegate下配置如下代码: 58 +### 四、跳转首页(必须登录后)
367 59
368 ``` 60 ```
369 -func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool {  
370 -  
371 - if url.scheme == "hh-medic.com" {  
372 - NotificationCenter.default.post(name: NSNotification.Name(rawValue: "WX_H5_PAY"), object: nil)  
373 - return true  
374 - }  
375 -  
376 - return true  
377 - }  
378 -```  
379 -  
380 -  
381 -  
382 -### 7.5. 上架 App Store 时,出现 x86_64, i386 架构错误该如何解决?  
383 -  
384 -该问题是由于 App Store 不支持 x86_64, i386 架构引起的,具体解决方法如下:  
385 -  
386 -1. 清空项目编译缓存:  
387 - 选择【Product】>【clean】,按住Alt变成 clean build Folder...,等待操作完成。  
388 -2. 剔除 App Store 不支持的 x86_64 和 i386 架构:  
389 - a. 选择【TARGETS】>【Build Phases】。  
390 - b. 单击加号,选择【New Run Script Phase】。  
391 - c. 添加如下代码: 61 +HHMSDK.default.skipChatHome(skipType: .present, vc: self)
392 62
393 ``` 63 ```
394 -APP_PATH="${TARGET_BUILD_DIR}/${WRAPPER_NAME}"  
395 -  
396 -# This script loops through the frameworks embedded in the application and  
397 -  
398 -# removes unused architectures.  
399 -  
400 - find "$APP_PATH" -name '*.framework' -type d | while read -r FRAMEWORK  
401 - do  
402 - FRAMEWORK_EXECUTABLE_NAME=$(defaults read "$FRAMEWORK/Info.plist" CFBundleExecutable)  
403 - FRAMEWORK_EXECUTABLE_PATH="$FRAMEWORK/$FRAMEWORK_EXECUTABLE_NAME"  
404 - echo "Executable is $FRAMEWORK_EXECUTABLE_PATH"  
405 -  
406 - EXTRACTED_ARCHS=()  
407 64
408 - for ARCH in $ARCHS  
409 - do  
410 - echo "Extracting $ARCH from $FRAMEWORK_EXECUTABLE_NAME"  
411 - lipo -extract "$ARCH" "$FRAMEWORK_EXECUTABLE_PATH" -o "$FRAMEWORK_EXECUTABLE_PATH-$ARCH"  
412 - EXTRACTED_ARCHS+=("$FRAMEWORK_EXECUTABLE_PATH-$ARCH")  
413 - done  
414 -  
415 - echo "Merging extracted architectures: ${ARCHS}"  
416 - lipo -o "$FRAMEWORK_EXECUTABLE_PATH-merged" -create "${EXTRACTED_ARCHS[@]}"  
417 - rm "${EXTRACTED_ARCHS[@]}"  
418 -  
419 - echo "Replacing original executable with thinned version"  
420 - rm "$FRAMEWORK_EXECUTABLE_PATH"  
421 - mv "$FRAMEWORK_EXECUTABLE_PATH-merged" "$FRAMEWORK_EXECUTABLE_PATH"  
422 -  
423 - done  
424 -``` 65 +### 五、Demo及详细文档
425 66
426 -### 7.6. 宿主app是基于Object-C时需要注意的问题 67 +Demo
  68 +https://github.com/HHMedic/HHDoctorSDK_demo_iOS_TRTC
427 69
428 -1. 需勾选 Always embed swift standard libraries 为 YES 否则在低版本系统会闪退。 70 +详细接入文档
  71 +https://github.com/HHMedic/HHDoctorSDK_demo_iOS_TRTC/blob/main/Document.md