JMSGConstants.h 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543
  1. /*
  2. * | | | | \ \ / / | | | | / _______|
  3. * | |____| | \ \/ / | |____| | / /
  4. * | |____| | \ / | |____| | | | _____
  5. * | | | | / \ | | | | | | |____ |
  6. * | | | | / /\ \ | | | | \ \______| |
  7. * | | | | /_/ \_\ | | | | \_________|
  8. *
  9. * Copyright (c) 2011 ~ 2015 Shenzhen HXHG. All rights reserved.
  10. */
  11. #ifndef JMessage_JMSGConstants____FILEEXTENSION___
  12. #define JMessage_JMSGConstants____FILEEXTENSION___
  13. #import <Foundation/Foundation.h>
  14. ///----------------------------------------------------
  15. /// @name type & define
  16. ///----------------------------------------------------
  17. /*!
  18. * @abstract 异步回调 block
  19. *
  20. * @discussion 大多数异步 API 都会以过个 block 回调。
  21. *
  22. * - 如果调用出错,则 error 不为空,可根据 error.code 来获取错误码。该错误码 JMessage 相关文档里有详细的定义。
  23. * - 如果返回正常,则 error 为空。从 resultObject 去获取相应的返回。每个 API 的定义上都会有进一步的定义。
  24. *
  25. */
  26. typedef void (^JMSGCompletionHandler)(id resultObject, NSError *error);
  27. /*!
  28. * @abstract 空的 CompletionHandler.
  29. *
  30. * @discussion 用于不需要进行处理时.
  31. */
  32. #define JMSG_NULL_COMPLETION_BLOCK ^(id resultObject, NSError *error){}
  33. /*!
  34. * @abstract 数据返回的异步回调
  35. *
  36. * @discussion 专用于数据返回 API.
  37. *
  38. * - objectId 当前数据的ID标识.
  39. * - 消息里返回 voice/image 的 media data 时, objectId 是 msgId;
  40. * - 用户里返回 avatar 头像数据时, objectId 是 username.
  41. *
  42. */
  43. typedef void (^JMSGAsyncDataHandler)(NSData *data, NSString *objectId, NSError *error);
  44. /*!
  45. * @abstract 媒体上传进度 block
  46. *
  47. * @discussion 在发送消息时,可向 JMSGMessage 对象设置此 block,从而可以得到上传的进度
  48. */
  49. typedef void (^JMSGMediaProgressHandler)(float percent, NSString *msgId);
  50. /*!
  51. * @abstract Generic 泛型
  52. */
  53. #if __has_feature(objc_generics) || __has_extension(objc_generics)
  54. # define JMSG_GENERIC(...) <__VA_ARGS__>
  55. #else
  56. # define JMSG_GENERIC(...)
  57. #endif
  58. /*!
  59. * @abstract nullable 用于定义某属性或者变量是否可允许为空
  60. */
  61. #if __has_feature(nullability)
  62. # define JMSG_NONNULL __nonnull
  63. # define JMSG_NULLABLE __nullable
  64. #else
  65. # define JMSG_NONNULL
  66. # define JMSG_NULLABLE
  67. #endif
  68. #if __has_feature(assume_nonnull)
  69. # ifdef NS_ASSUME_NONNULL_BEGIN
  70. # define JMSG_ASSUME_NONNULL_BEGIN NS_ASSUME_NONNULL_BEGIN
  71. # else
  72. # define JMSG_ASSUME_NONNULL_BEGIN _Pragma("clang assume_nonnull begin")
  73. # endif
  74. # ifdef NS_ASSUME_NONNULL_END
  75. # define JMSG_ASSUME_NONNULL_END NS_ASSUME_NONNULL_END
  76. # else
  77. # define JMSG_ASSUME_NONNULL_END _Pragma("clang assume_nonnull end")
  78. # endif
  79. #else
  80. # define JMSG_ASSUME_NONNULL_BEGIN
  81. # define JMSG_ASSUME_NONNULL_END
  82. #endif
  83. ///----------------------------------------------------
  84. /// @name enums
  85. ///----------------------------------------------------
  86. /*!
  87. * 会话类型 - 单聊、群聊
  88. */
  89. typedef NS_ENUM(NSInteger, JMSGConversationType) {
  90. /// 单聊
  91. kJMSGConversationTypeSingle = 1,
  92. /// 群聊
  93. kJMSGConversationTypeGroup = 2,
  94. /// 聊天室
  95. kJMSGConversationTypeChatRoom = 3,
  96. };
  97. /*!
  98. * 群组类型 - 私有、公开
  99. */
  100. typedef NS_ENUM(NSInteger, JMSGGroupType) {
  101. /// 私有群
  102. kJMSGGroupTypePrivate = 1,
  103. /// 公开群
  104. kJMSGGroupTypePublic = 2,
  105. };
  106. /*!
  107. * 消息内容类型 - 文本、语音、图片等
  108. */
  109. typedef NS_ENUM(NSInteger, JMSGContentType) {
  110. /// 不知道类型的消息
  111. kJMSGContentTypeUnknown = 0,
  112. /// 文本消息
  113. kJMSGContentTypeText = 1,
  114. /// 图片消息
  115. kJMSGContentTypeImage = 2,
  116. /// 语音消息
  117. kJMSGContentTypeVoice = 3,
  118. /// 自定义消息
  119. kJMSGContentTypeCustom = 4,
  120. /// 事件通知消息。服务器端下发的事件通知,本地展示为这个类型的消息展示出来
  121. kJMSGContentTypeEventNotification = 5,
  122. /// 文件消息
  123. kJMSGContentTypeFile = 6,
  124. /// 地理位置消息
  125. kJMSGContentTypeLocation = 7,
  126. /// 提示性消息
  127. kJMSGContentTypePrompt = 8,
  128. };
  129. /*!
  130. * 提示性消息的类型 - 消息撤回提示、后台自定义消息提示等
  131. */
  132. typedef NS_ENUM(NSInteger, JMSGPromptContentType) {
  133. /// 消息撤回提示
  134. kJMSGPromptContentTypeRetractMessage = 0,
  135. /// 自定义提示
  136. kJMSGPromptContentTypeAPPRbag = 1,
  137. };
  138. /*!
  139. * 消息状态
  140. */
  141. typedef NS_ENUM(NSInteger, JMSGMessageStatus) {
  142. /// 发送息创建时的初始状态
  143. kJMSGMessageStatusSendDraft = 0,
  144. /// 消息正在发送过程中. UI 一般显示进度条
  145. kJMSGMessageStatusSending = 1,
  146. /// 媒体类消息文件上传失败
  147. kJMSGMessageStatusSendUploadFailed = 2,
  148. /// 媒体类消息文件上传成功
  149. kJMSGMessageStatusSendUploadSucceed = 3,
  150. /// 消息发送失败
  151. kJMSGMessageStatusSendFailed = 4,
  152. /// 消息发送成功
  153. kJMSGMessageStatusSendSucceed = 5,
  154. /// 接收中的消息(还在处理)
  155. kJMSGMessageStatusReceiving = 6,
  156. /// 接收消息时自动下载媒体失败
  157. kJMSGMessageStatusReceiveDownloadFailed = 7,
  158. /// 接收消息成功
  159. kJMSGMessageStatusReceiveSucceed = 8,
  160. };
  161. /*!
  162. * 上传文件的类型
  163. */
  164. typedef NS_ENUM(NSInteger, JMSGFileType) {
  165. /// 未知的文件类型
  166. kJMSGFileTypeUnknown,
  167. /// 图片类型
  168. kJMSGFileTypeImage,
  169. /// 语音类型
  170. kJMSGFileTypeVoice,
  171. /// 文件类型
  172. kJMSGFileTypeFile,
  173. };
  174. /*!
  175. * 平台类型
  176. */
  177. typedef NS_ENUM(NSInteger, JMSGPlatformType) {
  178. /// 所有平台
  179. kJMSGPlatformTypeAll = 0,
  180. /// Android 端
  181. kJMSGPlatformTypeAndroid = 1,
  182. /// iOS 端
  183. kJMSGPlatformTypeiOS = 2,
  184. /// Windows 端
  185. kJMSGPlatformTypeWindows = 4,
  186. /// web 端
  187. kJMSGPlatformTypeWeb = 16,
  188. };
  189. /*!
  190. * 发送消息透传的的类型
  191. */
  192. typedef NS_ENUM(NSInteger,JMSGTransMessageType) {
  193. /// 单聊透传消息
  194. kJMSGTransMessageTypeSingle = 1,
  195. /// 群里透传消息
  196. kJMSGTransMessageTypeGroup = 2,
  197. /// 设备间透传消息
  198. kJMSGTransMessageTypeCrossDevice = 3,
  199. };
  200. /*!
  201. * 通知事件类型
  202. *
  203. * 本类 JMSGEventNotificationType 是 SDK 下发的通知事件类型,主要分为:消息事件、非消息事件
  204. *
  205. * #### 消息事件
  206. *
  207. * 如:群事件,SDK 会作为一个特殊的消息类型下发,上层通过 JMSGMessageDelegate 类接收消息的代理方法接收消息事件.
  208. *
  209. * #### 非消息事件
  210. *
  211. * 如:被踢、登录状态异常、加好友等,SDK 会作为通知事件下发,上层通过 JMSGEventDelegate 类的代理方法可监听此类事件.
  212. *
  213. * #### 注意:
  214. *
  215. * 1、事件分类详细说明 和 事件对应监听方法请查看 JMSGNotificationEvent 类
  216. *
  217. * 2、不要直接使用数字来判断事件类型
  218. */
  219. typedef NS_ENUM(NSInteger, JMSGEventNotificationType) {
  220. // 用户登录状态变更事件
  221. /// 事件类型: 登录被踢
  222. kJMSGEventNotificationLoginKicked = 1,
  223. /// 事件类型: 非客户端修改密码强制登出事件
  224. kJMSGEventNotificationServerAlterPassword = 2,
  225. /// 事件类型:用户登录状态异常事件(需要重新登录)
  226. kJMSGEventNotificationUserLoginStatusUnexpected = 70,
  227. /// 事件类型:当前登录用户信息变更通知事件(非客户端修改)
  228. kJMSGEventNotificationCurrentUserInfoChange = 40,
  229. /// 事件类型:当前登录用户被删除事件(本地用户信息会被清空)
  230. kJMSGEventNotificationCurrentUserDeleted = 10001,
  231. /// 事件类型:当前登录用户被禁用事件(本地用户信息会被清空)
  232. kJMSGEventNotificationCurrentUserDisabled = 10002,
  233. // 消息事件
  234. /// 事件类型: 群组被创建
  235. kJMSGEventNotificationCreateGroup = 8,
  236. /// 事件类型: 退出群组
  237. kJMSGEventNotificationExitGroup = 9,
  238. /// 事件类型: 群组添加新成员
  239. kJMSGEventNotificationAddGroupMembers = 10,
  240. /// 事件类型: 群组成员被踢出
  241. kJMSGEventNotificationRemoveGroupMembers = 11,
  242. /// 事件类型: 群信息更新
  243. kJMSGEventNotificationUpdateGroupInfo = 12,
  244. /// 事件类型: 群禁言通知事件
  245. kJMSGEventNotificationGroupMemberSilence = 65,
  246. /// 事件类型: 管理员角色变更通知事件
  247. kJMSGEventNotificationGroupAdminChange = 80,
  248. /// 事件类型: 群主变更通知事件
  249. kJMSGEventNotificationGroupOwnerChange = 82,
  250. /// 事件类型: 解散群组
  251. kJMSGEventNotificationDissolveGroup = 11001,
  252. // 好友相关事件
  253. /// 事件类型: 收到好友邀请
  254. kJMSGEventNotificationReceiveFriendInvitation = 51,
  255. /// 事件类型: 对方接受了你的好友邀请
  256. kJMSGEventNotificationAcceptedFriendInvitation = 52,
  257. /// 事件类型: 对方拒绝了你的好友邀请
  258. kJMSGEventNotificationDeclinedFriendInvitation = 53,
  259. /// 事件类型: 对方将你从好友中删除
  260. kJMSGEventNotificationDeletedFriend = 6,
  261. /// 事件类型:非客户端修改好友关系收到好友更新事件
  262. kJMSGEventNotificationReceiveServerFriendUpdate = 7,
  263. /// 事件类型: 消息撤回
  264. kJMSGEventNotificationMessageRetract = 55,
  265. /// 事件类型: 消息透传
  266. kJMSGEventNotificationMessageTransparent = 12001,
  267. /// 事件类型: 消息回执变更
  268. kJMSGEventNotificationMessageReceiptStatusChange = 12002,
  269. };
  270. ///----------------------------------------------------
  271. /// @name errors
  272. ///----------------------------------------------------
  273. /*!
  274. * @abstract JMessage SDK 的错误码汇总
  275. *
  276. * @discussion 错误码以 86 打头,都为 iOS SDK 内部的错误码
  277. */
  278. typedef NS_ENUM(NSInteger, JMSGSDKErrorCode) {
  279. // --------------------- Network (860xxx)
  280. /// 下载失败
  281. kJMSGErrorSDKNetworkDownloadFailed = 860015,
  282. /// 其他网络原因
  283. kJMSGErrorSDKNetworkOtherError = 860016,
  284. /// 服务器获取用户Token失败
  285. kJMSGErrorSDKNetworkTokenFailed = 860017,
  286. /// 上传资源文件失败
  287. kJMSGErrorSDKNetworkUploadFailed = 860018,
  288. /// 上传资源文件Token验证失败
  289. kJMSGErrorSDKNetworkUploadTokenVerifyFailed = 860019,
  290. /// 获取服务器Token失败
  291. kJMSGErrorSDKNetworkUploadTokenGetFailed = 860020,
  292. /// 服务器返回数据错误(没有按约定返回)
  293. kJMSGErrorSDKNetworkResultUnexpected = 860021,
  294. /// 服务器端返回数据格式错误
  295. kJMSGErrorSDKNetworkDataFormatInvalid = 860030,
  296. // --------------------- DB & Global params (861xxx)
  297. /// 数据库删除失败 (预期应该成功)
  298. kJMSGErrorSDKDBDeleteFailed = 861000,
  299. /// 数据库更新失败 (预期应该成功)
  300. kJMSGErrorSDKDBUpdateFailed = 861001,
  301. /// 数据库查询失败 (预期应该成功)
  302. kJMSGErrorSDKDBSelectFailed = 861002,
  303. /// 数据库插入失败 (预期应该成功)
  304. kJMSGErrorSDKDBInsertFailed = 861003,
  305. /// 数据库迁移失败
  306. kJMSGErrorSDKDBMigrateFailed = 861004,
  307. /// Appkey 不合法
  308. kJMSGErrorSDKParamAppkeyInvalid = 861100,
  309. /// SDK 内部方法参数检查错误
  310. kJMSGErrorSDKParamInternalInvalid = 861101,
  311. // ------------------------ Third party (862xxx)
  312. /// 七牛相关
  313. kJMSGQiniuTokenInvalid = 862001,
  314. // ------------------------ User (863xxx)
  315. /// 用户名不合法
  316. kJMSGErrorSDKParamUsernameInvalid = 863001,
  317. /// 用户密码不合法
  318. kJMSGErrorSDKParamPasswordInvalid = 863002,
  319. /// 用户未登录
  320. kJMSGErrorSDKUserNotLogin = 863004,
  321. // 请求用户数量超出限制(目前单次最大请求500个)
  322. kJMSGErrorSDKUserNumberOverflow = 863005,
  323. // 用户已登录
  324. kJMSGErrorSDKUserInvalidState = 863006,
  325. // 用户正在退出的过程中
  326. kJMSGErrorSDKUserLogoutingState = 863007,
  327. // 添加好友失败
  328. kJMSGErrorSDKUserAddFriendFailState = 863008,
  329. // 删除好友失败
  330. kJMSGErrorSDKUserDeleteFriendFailState = 863009,
  331. // ------------------------ Media Resource (864xxx)
  332. /// 这不是一条媒体消息
  333. kJMSGErrorSDKNotMediaMessage = 864001,
  334. /// 下载媒体资源路径或者数据意外丢失
  335. kJMSGErrorSDKMediaResourceMissing = 864002,
  336. /// 媒体CRC码无效
  337. kJMSGErrorSDKMediaCrcCodeIllegal = 864003,
  338. /// 媒体CRC校验失败
  339. kJMSGErrorSDKMediaCrcVerifyFailed = 864004,
  340. /// 上传媒体文件时, 发现文件不存在
  341. kJMSGErrorSDKMediaUploadEmptyFile = 864005,
  342. /// 媒体HASH码无效
  343. kJMSGErrorSDKMediaHashCodeIllegal = 864006,
  344. /// 媒体HASH校验失败
  345. kJMSGErrorSDKMediaHashVerifyFailed = 864007,
  346. /// 这条消息不支持转发
  347. kJMSGErrorSDKMessageNotSupportForward = 864008,
  348. // ------------------------ Message (865xxx)
  349. /// 无效的消息内容
  350. kJMSGErrorSDKParamContentInvalid = 865001,
  351. /// 空消息
  352. kJMSGErrorSDKParamMessageNil = 865002,
  353. /// 消息不符合发送的基本条件检查
  354. kJMSGErrorSDKMessageNotPrepared = 865003,
  355. /// 你不是群组成员
  356. kJMSGErrorSDKMessageNotInGroup = 865004,
  357. /// 非法的 JSON 格式, 无法解析 Message JSON Protocol
  358. kJMSGErrorSDKMessageProtocolInvalidJsonFormat = 865005,
  359. /// 消息协议格式不正确, 可能缺少了字段
  360. kJMSGErrorSDKMessageProtocolLackFields = 865006,
  361. /// 消息协议格式不正确, 字段值非法
  362. kJMSGErrorSDKMessageProtocolInvalidFieldValue = 865007,
  363. /// 本地消息协议需要升级(收到新版本)
  364. kJMSGErrorSDKMessageProtocolUpgradeNeeded = 865008,
  365. /// 收到不支持消息内容类型(建议升级)
  366. kJMSGErrorSDKMessageProtocolContentTypeNotSupport = 865009,
  367. // ------------------------ Conversation (866xxx)
  368. /// 未知的会话类型
  369. kJMSGErrorSDKParamConversationTypeUnknown = 866001,
  370. /// 会话 username 无效
  371. kJMSGErrorSDKParamConversationUsernameInvalid = 866002,
  372. /// 会话 groupId 无效
  373. kJMSGErrorSDKParamConversationGroupIdInvalid = 866003,
  374. /// 会话没有找到
  375. kJMSGErrorSDKparamConversationNotFound = 866004,
  376. /// 会话头像没找到
  377. kJMSGErrorSDKConversationAvatarNotFound = 866005,
  378. // ------------------------ Group (867xxx)
  379. /// groupId 无效
  380. kJMSGErrorSDKParamGroupGroupIdInvalid = 867001,
  381. /// group 相关字段无效
  382. kJMSGErrorSDKParamGroupGroupInfoInvalid = 867002,
  383. // ------------------------ ChatRoom (868xxx)
  384. /// ChatRoom 不支持
  385. kJMSGErrorSDKChatRoomNotSupport = 868001,
  386. /// ChatRoom 不存在
  387. kJMSGErrorSDKChatRoomNotExist = 868002,
  388. /// unknown
  389. kJMSGErrorSDKUnknownError = 869999,
  390. };
  391. /*!
  392. * @abstract SDK依赖的内部 HTTP 服务返回的错误码。
  393. *
  394. * @discussion 这些错误码也会直接通过 SDK API 返回给应用层。
  395. */
  396. typedef NS_ENUM(NSUInteger, JMSGHttpErrorCode) {
  397. /// 服务器端内部错误
  398. kJMSGErrorHttpServerInternal = 898000,
  399. /// 注册用户已经存在 (403)
  400. kJMSGErrorHttpUserExist = 898001,
  401. /// 用户不存在 (403)
  402. kJMSGErrorHttpUserNotExist = 898002,
  403. /// 参数无效 (400)
  404. kJMSGErrorHttpPrameterInvalid = 898003,
  405. /// 密码错误 (403)
  406. kJMSGErrorHttpPasswordError = 898004,
  407. /// 内部UID 无效 (403)
  408. kJMSGErrorHttpUidInvalid = 898005,
  409. /// Gid不存在 (403)
  410. kJMSGErrorHttpGroupNotExist = 898006,
  411. /// Http 请求没有验证信息
  412. kJMSGErrorHttpMissingAuthenInfo = 898007,
  413. /// Http 请求验证失败
  414. kJMSGErrorHttpAuthenticationFailed = 898008,
  415. /// Appkey 不存在
  416. kJMSGErrorHttpAppkeyNotExist = 898009,
  417. /// Http 请求 token 过期
  418. kJMSGErrorHttpTokenExpired = 898010,
  419. /// 服务器端响应超时
  420. kJMSGErrorHttpServerResponseTimeout = 898030,
  421. };
  422. /*!
  423. * @abstract SDK依赖的内部 TCP 服务返回的错误码
  424. *
  425. * @discussion 这些错误码也会直接通过 SDK API 返回给应用层。
  426. */
  427. typedef NS_ENUM(NSUInteger, JMSGTcpErrorCode) {
  428. /// appKey 未被注册
  429. kJMSGErrorTcpAppkeyNotRegistered = 800003,
  430. /// 服务器端内部错误
  431. kJMSGErrorTcpServerInternalError = 800009,
  432. /// 用户在登出状态
  433. kJMSGErrorTcpUserLogoutState = 800012,
  434. /// 用户在离线状态
  435. kJMSGErrorTcpUserOfflineState = 800013,
  436. /// 发起请求的用户设备不匹配
  437. kJMSGErrorTcpUserDeviceNotMatch = 800016,
  438. /// 用户未注册
  439. kJMSGErrorTcpUserNotRegistered = 801003,
  440. /// 用户密码错误
  441. kJMSGErrorTcpUserPasswordError = 801004,
  442. /// 多通道同时登录错误,登录失败
  443. kJMSGErrorTcpLoginMultiChannelError = 801007,
  444. /// 目标用户不存在
  445. kJMSGErrorTcpTargetUserNotExist = 803003,
  446. /// 目标群组不存在
  447. kJMSGErrorTcpTargetGroupNotExist = 803004,
  448. /// 用户不在群组里
  449. kJMSGErrorTcpUserNotInGroup = 803005,
  450. /// 用户在黒名单里
  451. kJMSGErrorTcpUserInBlacklist = 803008,
  452. /// 内容不合法
  453. kJMSGErrorTcpContentIsIllegal = 803009,
  454. /// 发送消息失败,请求用户被禁言
  455. kJMSGErrorTcpUserBannedSendMessage = 803012,
  456. /// 群组成员列表为空
  457. kJMSGErrorTcpGroupMembersEmpty = 810002,
  458. /// 群组成员重复
  459. kJMSGErrorTcpGroupMembersDuplicated = 810007,
  460. };
  461. ///----------------------------------------------------
  462. /// @name Global keys 全局静态变量定义
  463. ///----------------------------------------------------
  464. // General key
  465. static NSString *const KEY_APP_KEY = @"appkey";
  466. // User
  467. static NSString *const KEY_USERNAME = @"username";
  468. static NSString *const KEY_PASSWORD = @"password";
  469. static NSString *const KEY_NEW_PASSWORD = @"new_password";
  470. static NSString *const KEY_OLD_PASSWORD = @"old_password";
  471. static NSString *const KEY_NICKNAME = @"nickname"; //昵称
  472. static NSString *const KEY_AVATAR = @"avatar"; //头像
  473. static NSString *const KEY_GENDER = @"gender"; //性别
  474. static NSString *const KEY_BIRTHDAY = @"birthday"; //生日
  475. static NSString *const KEY_REGION = @"region"; //区域
  476. static NSString *const KEY_SIGNATURE = @"signature";//签名
  477. static NSString *const KEY_ADDRESS = @"address"; //地址
  478. static NSString *const KEY_STAR = @"star";
  479. #endif