QYSDK.h 9.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328
  1. //
  2. // QYSDK.h
  3. // QYSDK
  4. //
  5. // version 5.16.0
  6. //
  7. // Created by Netease on 12/21/15.
  8. // Copyright (c) 2017 Netease. All rights reserved.
  9. //
  10. #import <Foundation/Foundation.h>
  11. #import "QYHeaders.h"
  12. @protocol NIMCustomAttachmentCoding;
  13. /**
  14. * 完成回调
  15. */
  16. typedef void(^QYCompletionBlock)(BOOL success);
  17. /**
  18. * 完成回调,带错误参数
  19. */
  20. typedef void(^QYResultCompletionBlock)(BOOL success, NSError *error);
  21. /**
  22. * 完成结果回调
  23. */
  24. typedef void(^QYCompletionWithResultBlock)(BOOL isSuccess);
  25. /**
  26. * 推送消息回调
  27. */
  28. typedef void(^QYPushMessageBlock)(QYPushMessage *pushMessage);
  29. /**
  30. * 清理缓存回调
  31. */
  32. typedef void(^QYCleanCacheCompletion)(NSError *error);
  33. /**
  34. * 错误码
  35. */
  36. typedef NS_ENUM(NSInteger, QYLocalErrorCode) {
  37. QYLocalErrorCodeUnknown = 0, //未知错误
  38. QYLocalErrorCodeInvalidParam = 1, //错误参数
  39. QYLocalErrorCodeFusionNeeded = 2, //必须为融合SDK
  40. QYLocalErrorCodeAccountNeeded = 3, //帐号错误-底层通信IM帐号未登录
  41. QYLocalErrorCodeInvalidUserId = 4, //userId错误,应与帐号相同
  42. QYLocalErrorCodeNeedLogout = 5, //userId变化,应走帐号切换逻辑,先调用logout
  43. };
  44. /**
  45. * 语言
  46. */
  47. typedef NS_ENUM(NSInteger, QYLanguage) {
  48. QYLanguageChineseSimplified = 0, //简体中文
  49. QYLanguageChineseTraditional = 1, //繁体中文
  50. QYLanguageEnglish = 2, //英语
  51. };
  52. /**
  53. * QYSDK:单例模式
  54. */
  55. @interface QYSDK : NSObject
  56. /**
  57. * 获取SDK单例
  58. *
  59. * @return SDK单例
  60. */
  61. + (instancetype)sharedSDK;
  62. /**
  63. * 获取七鱼SDK版本号
  64. *
  65. * @return 七鱼SDK版本号
  66. */
  67. - (NSString *)sdkVersion;
  68. /**
  69. * 获取融合SDK版本号
  70. *
  71. * @return 融合SDK版本号
  72. */
  73. - (NSString *)fusionSdkVersion;
  74. /**
  75. * 当前服务器配置
  76. * @discussion 私有化需进行自定义配置;必须在注册SDK前配置
  77. */
  78. @property (nonatomic, strong) QYServerSetting *serverSetting;
  79. /**
  80. * 语言设置,默认简体中文
  81. * @discussion 目前仅支持简体中文、繁体中文、英语
  82. * @discussion 因部分设置项文案需在App启动时刻配置,故修改语言后会影响此部分配置项自定义,即可能会恢复默认设置;因此推荐调用顺序为SDK注册后,即刻设置语言,之后再配置一些自定义属性
  83. */
  84. @property (nonatomic, assign) QYLanguage language;
  85. /**
  86. * 是否跟随系统语言自动变化,默认YES
  87. * @discussion 开启时设置language无效,仅跟随系统变化
  88. */
  89. @property (nonatomic, assign) BOOL followSystemLanguage;
  90. /**
  91. * 注册SDK
  92. *
  93. * @param appKey 对应管理后台分配的appkey
  94. * @param appName 对应管理后台添加一个App时填写的App名称 (就是SDK1.0.0版本的cerName,参数名变动)
  95. * @discussion 如果需要更多注册选项,推荐使用 registerWithOption:
  96. */
  97. - (void)registerAppId:(NSString *)appKey appName:(NSString *)appName;
  98. /**
  99. * 注册SDK
  100. *
  101. * @param option 注册选项
  102. */
  103. - (void)registerWithOption:(QYSDKOption *)option;
  104. /**
  105. * 获取AppKey
  106. *
  107. * @return 返回当前注册的AppKey
  108. */
  109. - (NSString *)appKey;
  110. /**
  111. * 获取客服聊天ViewController,非单例,每次调用新建会话页面
  112. *
  113. * @return 会话ViewController
  114. * @discussion 为保证功能完整性,必须嵌入至UINavigationController中使用;保证全局仅有一个VC实例,退出后可正常释放
  115. */
  116. - (QYSessionViewController *)sessionViewController;
  117. /**
  118. * 获取自定义UI配置单例,可设置界面内的UI展示效果
  119. *
  120. * @return 自定义UI配置单例
  121. */
  122. - (QYCustomUIConfig *)customUIConfig;
  123. /**
  124. * 获取自定义事件配置单例,可设置事件处理
  125. *
  126. * @return 自定义事件配置单例
  127. */
  128. - (QYCustomActionConfig *)customActionConfig;
  129. /**
  130. * 返回会话管理类
  131. *
  132. * @return 会话管理类
  133. */
  134. - (QYConversationManager *)conversationManager;
  135. /**
  136. * 获取当前设置的用户信息ID
  137. *
  138. * @return 返回当前已设置的用户信息ID
  139. */
  140. - (NSString *)currentUserID;
  141. /**
  142. * 获取当前登录的底层IM通信帐号ID,可据此判断当前是否已登录IM帐号
  143. *
  144. * @return 返回当前登录的accountID
  145. * @discussion 此帐号与外部设置的userId不同,是底层长连接通信帐号,七鱼内部会自动创建并登录;与外部传入的userId形成映射关系
  146. */
  147. - (NSString *)currentIMAccountID;
  148. /**
  149. * 设置用户信息,App帐号登录成功后上传
  150. *
  151. * @param userInfo 用户信息
  152. * @discussion 此方法尽量在App帐号登录成功后调用,不应仅在进入客服界面时调用;否则可能会造成客服连接状态不稳定
  153. * @discussion 若设置的userId与上次设置不同,即需要实现帐号切换,应先调用logout还原为匿名帐号再进行设置
  154. */
  155. - (void)setUserInfo:(QYUserInfo *)userInfo;
  156. /**
  157. * 设置用户信息,App帐号登录成功后上传,带结果回调
  158. *
  159. * @param userInfo 用户信息
  160. * @param userInfoBlock userInfo上报结果回调
  161. * @discussion 此方法尽量在App帐号登录成功后调用,不应仅在进入客服界面时调用;否则可能会造成客服连接状态不稳定
  162. * @discussion 若设置的userId与上次设置不同,即需要实现帐号切换,应先调用logout还原为匿名帐号再进行设置
  163. */
  164. - (void)setUserInfo:(QYUserInfo *)userInfo userInfoResultBlock:(QYResultCompletionBlock)userInfoBlock;
  165. /**
  166. * 注销当前帐号,App帐号注销时调用
  167. *
  168. * @param completion 完成回调
  169. * @discussion 切换帐号包含注销和登录过程,在注销阶段也要调用此函数
  170. */
  171. - (void)logout:(QYCompletionBlock)completion;
  172. /**
  173. * 设置待校验的authToken
  174. */
  175. - (void)setAuthToken:(NSString *)authToken;
  176. /**
  177. * 设置用户信息,App帐号登录成功后上传,带authToken校验
  178. *
  179. * @param userInfo 用户信息
  180. * @param block authToken校验结果回调
  181. */
  182. - (void)setUserInfo:(QYUserInfo *)userInfo authTokenVerificationResultBlock:(QYCompletionWithResultBlock)block;
  183. /**
  184. * 设置用户信息,App帐号登录成功后上传,带authToken校验,带结果回调
  185. *
  186. * @param userInfo 用户信息
  187. * @param userInfoBlock userInfo上报结果回调
  188. * @param authTokenBlock authToken校验结果回调
  189. * @discussion 此方法尽量在App帐号登录成功后调用,不应仅在进入客服界面时调用;否则可能会造成客服连接状态不稳定
  190. * @discussion 若设置的userId与上次设置不同,即需要实现帐号切换,应先调用logout还原为匿名帐号再进行设置
  191. */
  192. - (void)setUserInfo:(QYUserInfo *)userInfo userInfoResultBlock:(QYResultCompletionBlock)userInfoBlock authTokenResultBlock:(QYCompletionBlock)authTokenBlock;
  193. /**
  194. * 访问轨迹
  195. * @param title 标题
  196. * @param enterOrOut 进入还是退出
  197. */
  198. - (void)trackHistory:(NSString *)title enterOrOut:(BOOL)enterOrOut key:(NSString *)key;
  199. /**
  200. * 行为轨迹
  201. * @param title 标题
  202. * @param description 具体信息,以key-value表示信息对,例如key为“商品价格”,value为“999”
  203. */
  204. - (void)trackHistory:(NSString *)title description:(NSDictionary *)description key:(NSString *)key;
  205. /**
  206. * 更新推送token
  207. *
  208. * @param token 推送token
  209. * @discussion 传入DeviceToken原始数据,NSData类型
  210. */
  211. - (void)updateApnsToken:(NSData *)token;
  212. /**
  213. * 获取七鱼推送消息,非APNs推送
  214. *
  215. * @param messageId 消息id
  216. */
  217. - (void)getPushMessage:(NSString *)messageId;
  218. /**
  219. * 注册七鱼推送消息通知回调
  220. *
  221. * @param block 收到消息的回调
  222. */
  223. - (void)registerPushMessageNotification:(QYPushMessageBlock)block;
  224. /**
  225. * 获取七鱼日志文件路径
  226. *
  227. * @return 日志文件路径
  228. */
  229. - (NSString *)qiyuLogPath;
  230. /**
  231. * 清理接收文件缓存
  232. * @param completion 清理缓存完成回调
  233. */
  234. - (void)cleanResourceCacheWithBlock:(QYCleanCacheCompletion)completion;
  235. /**
  236. * 清理帐号信息
  237. * @param cleanAll 是否清理当前所有帐号信息,NO表示清理历史无用帐号,YES表示清理全部
  238. * @param completion 清理缓存完成回调
  239. * @discussion 清理全部帐号信息会登出当前帐号,并新建匿名帐号,请在调用完成后使用setUserInfo:接口恢复为有名帐号;请在合理时机调用本接口
  240. */
  241. - (void)cleanAccountInfoForAll:(BOOL)cleanAll completion:(QYCleanCacheCompletion)completion;
  242. #pragma mark - Fusion
  243. /**
  244. * 设置用户信息,带authToken校验,仅融合SDK使用
  245. *
  246. * @param userInfo 用户信息,注意userId应与当前登录的云信帐号相同,否则userInfoBlock返回error
  247. * @param userInfoBlock userInfo上报结果回调
  248. * @param authTokenBlock authToken校验结果回调
  249. * @discussion App帐号登录成功后,调用此函数上报。若非融合SDK调用,则userInfoBlock返回error
  250. */
  251. - (void)setUserInfoForFusion:(QYUserInfo *)userInfo
  252. userInfoResultBlock:(QYResultCompletionBlock)userInfoBlock
  253. authTokenResultBlock:(QYCompletionBlock)authTokenBlock;
  254. /**
  255. * 注册云信自定义消息解析器,仅融合SDK使用
  256. *
  257. * @param decoder 自定义消息解析器
  258. * @discussion 若使用自定义消息类型,需注册自定义消息解析器,将透传过来的消息反序列化成上层应用可识别的对象
  259. * @discussion 使用融合SDK时,若需解析自定义消息,请使用该接口设置;若仍使用云信提供接口,则会覆盖七鱼解析器造成部分客服消息无法解析
  260. */
  261. - (void)registerCustomDecoderForFusion:(id<NIMCustomAttachmentCoding>)decoder;
  262. #pragma mark - Deprecated
  263. ///**
  264. // * 已废弃
  265. // * 追踪用户浏览信息;暂时客服端还没有入口可以查看这部分信息
  266. // * @param urlString 浏览url
  267. // * @param attributes 附加信息
  268. // */
  269. //- (void)trackHistory:(NSString *)urlString withAttributes:(NSDictionary *)attributes;
  270. ///**
  271. // * 已废弃,使用setUserInfo替代
  272. // * 设置userInfo.userId即可,userInfo.data忽略
  273. // * 添加个人信息
  274. // *
  275. // * @param infos 个人信息;目前有两个key,“foreignid”表示用户id,“name”表示用户名
  276. // */
  277. //- (void)addUserInfo:(NSDictionary *)infos;
  278. @end