shmily

README

@@ -7,26 +7,26 @@ @@ -7,26 +7,26 @@
7 </p> 7 </p>
8 8
9 * [HHDoctorSDK 接入说明](#hhdoctorsdk-接入说明) 9 * [HHDoctorSDK 接入说明](#hhdoctorsdk-接入说明)
10 - * [1. 概要介绍](#1-概要介绍)  
11 - * [2. 集成方式](#2-集成方式)  
12 - * [2.1. 手动集成](#21-手动集成)  
13 - * [2.2. 自动集成](#22-自动集成)  
14 - * [2.3. 调用规则](#23-调用规则)  
15 - * [3. 初始化](#3-初始化)  
16 - * [4. 登录账户](#4-登录账户)  
17 - * [4.1. 登录](#41-登录)  
18 - * [4.2. 登出](#42-登出)  
19 - * [5. 视频呼叫](#5-视频呼叫)  
20 - * [6. 代理(delegate)(可选)](#6-代理delegate可选)  
21 - * [6.1. 加入](#61-加入)  
22 - * [6.2. 移除](#62-移除) 10 + * [1. 集成方式](#1-集成方式)
  11 + * [1.1. 手动集成](#11-手动集成)
  12 + * [1.2. 自动集成](#12-自动集成)
  13 + * [1.3. 调用规则](#13-调用规则)
  14 + * [2. 初始化](#2-初始化)
  15 + * [3. 登录账户](#3-登录账户)
  16 + * [3.1. 登录](#31-登录)
  17 + * [3.2. 登出](#32-登出)
  18 + * [4. 视频呼叫](#4-视频呼叫)
  19 + * [5. 代理(delegate)(可选)](#5-代理delegate可选)
  20 + * [5.1. 加入](#51-加入)
  21 + * [5.2. 移除](#52-移除)
23 22
24 -## 1.概要介绍  
25 -## 2.集成方式 23 +
  24 +## 1. 集成方式
26 HHDoctorSDK 提供两种集成方式:您既可以通过 CocoaPods 自动集成我们的 SDK,也可以通过手动下载 SDK, 然后添加到您的项目中。 25 HHDoctorSDK 提供两种集成方式:您既可以通过 CocoaPods 自动集成我们的 SDK,也可以通过手动下载 SDK, 然后添加到您的项目中。
27 我们提供的下载地址: 26 我们提供的下载地址:
28 27
29 - 我们提供了发布仓库 [HHDoctorSDK](https://code.hh-medic.com/hh_public/HHDoctorSDK.ios) 28 + 我们提供了发布仓库: [HHDoctorSDK](https://code.hh-medic.com/hh_public/HHDoctorSDK.ios)
  29 + 集成demo地址: [HHDoctorSDK_demo_iOS](https://github.com/HHMedic/HHDoctorSDK_demo_iOS)
30 30
31 由于呼叫视频需要相机相册权限,需要在info.plist中添加对应的权限,否则会导致无法调用。 31 由于呼叫视频需要相机相册权限,需要在info.plist中添加对应的权限,否则会导致无法调用。
32 32
@@ -39,7 +39,7 @@ @@ -39,7 +39,7 @@
39 <string>应用需使用麦克风权限,以便您向医生进行视频咨询。</string> 39 <string>应用需使用麦克风权限,以便您向医生进行视频咨询。</string>
40 ``` 40 ```
41 41
42 -### 2.1.手动集成 42 +### 1.1. 手动集成
43 43
44 1. 根据自己工程需要,下载对应版本的 HHMSDK,得到 NIMSDK.framework ,NIMAVChat.framework,NVS.framework,SecurityKit.framework 和 HHDoctorSDK.framework,以及未链接的全部三方依赖库 ,将他们导入工程。 44 1. 根据自己工程需要,下载对应版本的 HHMSDK,得到 NIMSDK.framework ,NIMAVChat.framework,NVS.framework,SecurityKit.framework 和 HHDoctorSDK.framework,以及未链接的全部三方依赖库 ,将他们导入工程。
45 2. 添加其他 HHDoctorSDK 依赖库。 45 2. 添加其他 HHDoctorSDK 依赖库。
@@ -58,7 +58,7 @@ @@ -58,7 +58,7 @@
58 4.`Build Settings` -> `Enable Bitcode 里,设置为 `No` 58 4.`Build Settings` -> `Enable Bitcode 里,设置为 `No`
59 5. 如果需要在后台时保持音频通话状态,在 `Capabilities` -> `Background Modes` 里勾选 `audio, airplay, and Picture in Picture` 59 5. 如果需要在后台时保持音频通话状态,在 `Capabilities` -> `Background Modes` 里勾选 `audio, airplay, and Picture in Picture`
60 60
61 -### 2.2.自动集成 61 +### 1.2. 自动集成
62 *`Podfile` 文件中加入 62 *`Podfile` 文件中加入
63 63
64 ```shell 64 ```shell
@@ -71,7 +71,7 @@ pod 'HHDoctorSDK', :git => "git@code.hh-medic.com:hh_public/HHDoctorSDK.ios.git" @@ -71,7 +71,7 @@ pod 'HHDoctorSDK', :git => "git@code.hh-medic.com:hh_public/HHDoctorSDK.ios.git"
71 pod install 71 pod install
72 ``` 72 ```
73 73
74 -### 2.3.调用规则 74 +### 1.3. 调用规则
75 所有 HHDoctorSDK 业务均通过 HHMSDK 单例调用 75 所有 HHDoctorSDK 业务均通过 HHMSDK 单例调用
76 76
77 ```swift 77 ```swift
@@ -81,7 +81,7 @@ public class HHMSDK : NSObject { @@ -81,7 +81,7 @@ public class HHMSDK : NSObject {
81 } 81 }
82 ``` 82 ```
83 83
84 -## 3.初始化 84 +## 2. 初始化
85 在使用 HHDoctorSDK 任何方法之前,都应该首先调用初始化方法。正常业务情况下,初始化方法有仅只应调用一次。 85 在使用 HHDoctorSDK 任何方法之前,都应该首先调用初始化方法。正常业务情况下,初始化方法有仅只应调用一次。
86 86
87 HHSDKOptions 选项参数列表 87 HHSDKOptions 选项参数列表
@@ -104,9 +104,9 @@ let option = HHSDKOptions(isDebug: true, isDevelop: true) @@ -104,9 +104,9 @@ let option = HHSDKOptions(isDebug: true, isDevelop: true)
104 HHMSDK.default.start(option: option) 104 HHMSDK.default.start(option: option)
105 ``` 105 ```
106 106
107 -## 4. 登录账户 107 +## 3. 登录账户
108 在对医生视频呼叫之前,需要先登录账号信息。账号的 uuid 由和缓提供。 108 在对医生视频呼叫之前,需要先登录账号信息。账号的 uuid 由和缓提供。
109 -### 4.1. 登录 109 +### 3.1. 登录
110 110
111 * 原型 111 * 原型
112 112
@@ -134,7 +134,7 @@ HHMSDK.default.login(uuid: 100001531) { (error) in @@ -134,7 +134,7 @@ HHMSDK.default.login(uuid: 100001531) { (error) in
134 ``` 134 ```
135 error 为登录错误信息,成功则为 nil。 135 error 为登录错误信息,成功则为 nil。
136 136
137 -### 4.2. 登出 137 +### 3.2. 登出
138 应用层登出/注销/切换自己的账号时需要调用 HHMSDK 的登出操作,该操作会通知和缓服务器进行 APNs 推送信息的解绑操作,避免用户已登出但推送依然发送到当前设备的情况发生。 138 应用层登出/注销/切换自己的账号时需要调用 HHMSDK 的登出操作,该操作会通知和缓服务器进行 APNs 推送信息的解绑操作,避免用户已登出但推送依然发送到当前设备的情况发生。
139 139
140 * 原型 140 * 原型
@@ -154,7 +154,7 @@ public class HHMSDK : NSObject { @@ -154,7 +154,7 @@ public class HHMSDK : NSObject {
154 HHMSDK.default.logout() 154 HHMSDK.default.logout()
155 ``` 155 ```
156 156
157 -## 5. 视频呼叫 157 +## 4. 视频呼叫
158 根据实际场景的不同,可以进行成人、儿童方向的向医生咨询。 158 根据实际场景的不同,可以进行成人、儿童方向的向医生咨询。
159 159
160 * 原型 160 * 原型
@@ -186,7 +186,7 @@ HHCallType 枚举列表 @@ -186,7 +186,7 @@ HHCallType 枚举列表
186 child | 儿童 186 child | 儿童
187 adult | 成人 187 adult | 成人
188 188
189 -## 6. 代理(delegate)(可选) 189 +## 5. 代理(delegate)(可选)
190 代理主要用于视频过程中的状态反馈。如果不需要状态反馈,可以不考虑该代理。 190 代理主要用于视频过程中的状态反馈。如果不需要状态反馈,可以不考虑该代理。
191 所有的代理方法都是可选的,可以根据自己的实际需要实现不同的代理方法。 191 所有的代理方法都是可选的,可以根据自己的实际需要实现不同的代理方法。
192 192
@@ -234,14 +234,14 @@ public protocol HHMVideoDelegate : NSObjectProtocol { @@ -234,14 +234,14 @@ public protocol HHMVideoDelegate : NSObjectProtocol {
234 } 234 }
235 ``` 235 ```
236 236
237 -### 6.1. 加入 237 +### 5.1. 加入
238 代理支持同时设置多个。 238 代理支持同时设置多个。
239 239
240 ```swift 240 ```swift
241 HHMSDK.default.add(delegate: self) 241 HHMSDK.default.add(delegate: self)
242 ``` 242 ```
243 243
244 -### 6.2. 移除 244 +### 5.2. 移除
245 245
246 ```swift 246 ```swift
247 HHMSDK.default.remove(delegate: self) 247 HHMSDK.default.remove(delegate: self)
  1 +#!/usr/bin/env bash
  2 +
  3 +#
  4 +# Steps:
  5 +#
  6 +# 1. Download corresponding html file for some README.md:
  7 +# curl -s $1
  8 +#
  9 +# 2. Discard rows where no substring 'user-content-' (github's markup):
  10 +# awk '/user-content-/ { ...
  11 +#
  12 +# 3.1 Get last number in each row like ' ... </span></a>sitemap.js</h1'.
  13 +# It's a level of the current header:
  14 +# substr($0, length($0), 1)
  15 +#
  16 +# 3.2 Get level from 3.1 and insert corresponding number of spaces before '*':
  17 +# sprintf("%*s", substr($0, length($0), 1)*3, " ")
  18 +#
  19 +# 4. Find head's text and insert it inside "* [ ... ]":
  20 +# substr($0, match($0, /a>.*<\/h/)+2, RLENGTH-5)
  21 +#
  22 +# 5. Find anchor and insert it inside "(...)":
  23 +# substr($0, match($0, "href=\"[^\"]+?\" ")+6, RLENGTH-8)
  24 +#
  25 +
  26 +gh_toc_version="0.5.0"
  27 +
  28 +gh_user_agent="gh-md-toc v$gh_toc_version"
  29 +
  30 +#
  31 +# Download rendered into html README.md by its url.
  32 +#
  33 +#
  34 +gh_toc_load() {
  35 + local gh_url=$1
  36 +
  37 + if type curl &>/dev/null; then
  38 + curl --user-agent "$gh_user_agent" -s "$gh_url"
  39 + elif type wget &>/dev/null; then
  40 + wget --user-agent="$gh_user_agent" -qO- "$gh_url"
  41 + else
  42 + echo "Please, install 'curl' or 'wget' and try again."
  43 + exit 1
  44 + fi
  45 +}
  46 +
  47 +#
  48 +# Converts local md file into html by GitHub
  49 +#
  50 +# ➥ curl -X POST --data '{"text": "Hello world github/linguist#1 **cool**, and #1!"}' https://api.github.com/markdown
  51 +# <p>Hello world github/linguist#1 <strong>cool</strong>, and #1!</p>'"
  52 +gh_toc_md2html() {
  53 + local gh_file_md=$1
  54 + URL=https://api.github.com/markdown/raw
  55 + TOKEN="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/token.txt"
  56 + if [ -f "$TOKEN" ]; then
  57 + URL="$URL?access_token=$(cat $TOKEN)"
  58 + fi
  59 + curl -s --user-agent "$gh_user_agent" \
  60 + --data-binary @"$gh_file_md" -H "Content-Type:text/plain" \
  61 + $URL
  62 +}
  63 +
  64 +#
  65 +# Is passed string url
  66 +#
  67 +gh_is_url() {
  68 + case $1 in
  69 + https* | http*)
  70 + echo "yes";;
  71 + *)
  72 + echo "no";;
  73 + esac
  74 +}
  75 +
  76 +#
  77 +# TOC generator
  78 +#
  79 +gh_toc(){
  80 + local gh_src=$1
  81 + local gh_src_copy=$1
  82 + local gh_ttl_docs=$2
  83 + local need_replace=$3
  84 +
  85 + if [ "$gh_src" = "" ]; then
  86 + echo "Please, enter URL or local path for a README.md"
  87 + exit 1
  88 + fi
  89 +
  90 +
  91 + # Show "TOC" string only if working with one document
  92 + if [ "$gh_ttl_docs" = "1" ]; then
  93 +
  94 + echo "Table of Contents"
  95 + echo "================="
  96 + echo ""
  97 + gh_src_copy=""
  98 +
  99 + fi
  100 +
  101 + if [ "$(gh_is_url "$gh_src")" == "yes" ]; then
  102 + gh_toc_load "$gh_src" | gh_toc_grab "$gh_src_copy"
  103 + if [ "$need_replace" = "yes" ]; then
  104 + echo
  105 + echo "!! '$gh_src' is not a local file"
  106 + echo "!! Can't insert the TOC into it."
  107 + echo
  108 + fi
  109 + else
  110 + local toc=`gh_toc_md2html "$gh_src" | gh_toc_grab "$gh_src_copy"`
  111 + echo "$toc"
  112 + if [ "$need_replace" = "yes" ]; then
  113 + local ts="<\!--ts-->"
  114 + local te="<\!--te-->"
  115 + local dt=`date +'%F_%H%M%S'`
  116 + local ext=".orig.${dt}"
  117 + local toc_path="${gh_src}.toc.${dt}"
  118 + local toc_footer="<!-- Added by: `whoami`, at: `date --iso-8601='minutes'` -->"
  119 + # http://fahdshariff.blogspot.ru/2012/12/sed-mutli-line-replacement-between-two.html
  120 + # clear old TOC
  121 + sed -i${ext} "/${ts}/,/${te}/{//!d;}" "$gh_src"
  122 + # create toc file
  123 + echo "${toc}" > "${toc_path}"
  124 + echo -e "\n${toc_footer}\n" >> "$toc_path"
  125 + # insert toc file
  126 + if [[ "`uname`" == "Darwin" ]]; then
  127 + sed -i "" "/${ts}/r ${toc_path}" "$gh_src"
  128 + else
  129 + sed -i "/${ts}/r ${toc_path}" "$gh_src"
  130 + fi
  131 + echo
  132 + echo "!! TOC was added into: '$gh_src'"
  133 + echo "!! Origin version of the file: '${gh_src}${ext}'"
  134 + echo "!! TOC added into a separate file: '${toc_path}'"
  135 + echo
  136 + fi
  137 + fi
  138 +}
  139 +
  140 +#
  141 +# Grabber of the TOC from rendered html
  142 +#
  143 +# $1 — a source url of document.
  144 +# It's need if TOC is generated for multiple documents.
  145 +#
  146 +gh_toc_grab() {
  147 + # if closed <h[1-6]> is on the new line, then move it on the prev line
  148 + # for example:
  149 + # was: The command <code>foo1</code>
  150 + # </h1>
  151 + # became: The command <code>foo1</code></h1>
  152 + sed -e ':a' -e 'N' -e '$!ba' -e 's/\n<\/h/<\/h/g' |
  153 + # find strings that corresponds to template
  154 + grep -E -o '<a.*id="user-content-[^"]*".*</h[1-6]' |
  155 + # remove code tags
  156 + sed 's/<code>//' | sed 's/<\/code>//' |
  157 + # now all rows are like:
  158 + # <a id="user-content-..." href="..."><span ...></span></a> ... </h1
  159 + # format result line
  160 + # * $0 — whole string
  161 + echo -e "$(awk -v "gh_url=$1" '{
  162 + print sprintf("%*s", substr($0, length($0), 1)*3, " ") "* [" substr($0, match($0, /a>.*<\/h/)+2, RLENGTH-5)"](" gh_url substr($0, match($0, "href=\"[^\"]+?\" ")+6, RLENGTH-8) ")"}' | sed 'y/+/ /; s/%/\\x/g')"
  163 +}
  164 +
  165 +#
  166 +# Returns filename only from full path or url
  167 +#
  168 +gh_toc_get_filename() {
  169 + echo "${1##*/}"
  170 +}
  171 +
  172 +#
  173 +# Options hendlers
  174 +#
  175 +gh_toc_app() {
  176 + local app_name="gh-md-toc"
  177 + local need_replace="no"
  178 +
  179 + if [ "$1" = '--help' ] || [ $# -eq 0 ] ; then
  180 + echo "GitHub TOC generator ($app_name): $gh_toc_version"
  181 + echo ""
  182 + echo "Usage:"
  183 + echo " $app_name [--insert] src [src] Create TOC for a README file (url or local path)"
  184 + echo " $app_name - Create TOC for markdown from STDIN"
  185 + echo " $app_name --help Show help"
  186 + echo " $app_name --version Show version"
  187 + return
  188 + fi
  189 +
  190 + if [ "$1" = '--version' ]; then
  191 + echo "$gh_toc_version"
  192 + return
  193 + fi
  194 +
  195 + if [ "$1" = "-" ]; then
  196 + if [ -z "$TMPDIR" ]; then
  197 + TMPDIR="/tmp"
  198 + elif [ -n "$TMPDIR" -a ! -d "$TMPDIR" ]; then
  199 + mkdir -p "$TMPDIR"
  200 + fi
  201 + local gh_tmp_md
  202 + gh_tmp_md=$(mktemp $TMPDIR/tmp.XXXXXX)
  203 + while read input; do
  204 + echo "$input" >> "$gh_tmp_md"
  205 + done
  206 + gh_toc_md2html "$gh_tmp_md" | gh_toc_grab ""
  207 + return
  208 + fi
  209 +
  210 + if [ "$1" = '--insert' ]; then
  211 + need_replace="yes"
  212 + shift
  213 + fi
  214 +
  215 + for md in "$@"
  216 + do
  217 + echo ""
  218 + gh_toc "$md" "$#" "$need_replace"
  219 + done
  220 +
  221 + echo ""
  222 + echo "Created by [gh-md-toc](https://github.com/ekalinin/github-markdown-toc)"
  223 +}
  224 +
  225 +#
  226 +# Entry point
  227 +#
  228 +gh_toc_app "$@"