NIMCustomObject.h 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  1. //
  2. // NIMCustomObject.h
  3. // NIMLib
  4. //
  5. // Created by Netease.
  6. // Copyright (c) 2015年 Netease. All rights reserved.
  7. //
  8. #import "NIMMessageObjectProtocol.h"
  9. NS_ASSUME_NONNULL_BEGIN
  10. /*
  11. 除了 SDK 预定义的几种消息类型,上层APP开发者如果想要实现更多的消息类型,不可避免需要使用自定义消息这种类型
  12. 由于 SDK 并不能预测上层 APP 的应用场景,所以 NIMCustomObject 采取消息透传的方式以提供给上层开发者最大的自由度
  13. 即 SDK 只负责发送和收取由 NIMCustomObject 中 id<NIMCustomAttachment> attachment 序列化和反序列化后的字节流
  14. 在发送端,SDK 获取 encodeAttachment 后得到的字节流发送至对面端
  15. 在接收端,SDK 读取字节流,并通过上层 APP 设置的反序列化对象进行解析 (registerCustomDecoder:)
  16. 文件上传:
  17. 为了方便 APP 在自定义消息类型中进行文件的上传,SDK 也提供了三个接口文件上传
  18. 即只要 APP 实现上传相关的接口,资源的上传就可以由 SDK 自动完成
  19. 如需要上传资源需要实现的接口有:
  20. 1. - (BOOL)attachmentNeedsUpload 是否有文件需要上传,在有文件且文件没有上传成功时返回YES
  21. 2. - (NSString *)attachmentPathForUploading 返回需要上传的文件路径
  22. 3. - (void)updateAttachmentURL:(NSString *)urlString 上传成功后SDK会调用这个接口,APP 需要实现这个接口来保存上传后的URL
  23. 具体可以参考 DEMO 中阅后即焚的实现
  24. */
  25. /**
  26. * 自定义消息对象附件协议
  27. */
  28. @protocol NIMCustomAttachment <NSObject>
  29. @required
  30. /**
  31. * 序列化attachment
  32. *
  33. * @return 序列化后的结果,将用于透传
  34. */
  35. - (NSString *)encodeAttachment;
  36. @optional
  37. #pragma mark - 上传相关接口
  38. /**
  39. * 是否需要上传附件
  40. *
  41. * @return 是否需要上传附件
  42. */
  43. - (BOOL)attachmentNeedsUpload;
  44. /**
  45. * 需要上传的附件路径
  46. *
  47. * @return 路径
  48. */
  49. - (NSString *)attachmentPathForUploading;
  50. /**
  51. * 更新附件URL
  52. *
  53. * @param urlString 附件url
  54. */
  55. - (void)updateAttachmentURL:(NSString *)urlString;
  56. #pragma mark - 下载相关接口
  57. /**
  58. * 是否需要下载附件
  59. *
  60. * @return 是否需要上传附件
  61. */
  62. - (BOOL)attachmentNeedsDownload;
  63. /**
  64. * 需要下载的附件url
  65. *
  66. * @return 附件url
  67. * @discussion 如果当前字段是云信的 http url 地址,那么需要调用 id<NIMResourceManager> 中 normalizeURLString: 方法将这个地址进行转 https 和 cdn 加速格式
  68. */
  69. - (NSString *)attachmentURLStringForDownloading;
  70. /**
  71. * 需要下载的附件本地路径
  72. *
  73. * @return 附件本地路径
  74. * @discussion 上层需要保证路径的
  75. */
  76. - (NSString *)attachmentPathForDownloading;
  77. @end
  78. /**
  79. * 自定义消息对象附件序列化协议
  80. */
  81. @protocol NIMCustomAttachmentCoding<NSObject>
  82. @required
  83. /**
  84. * 反序列化
  85. *
  86. * @param content 透传的自定义消息
  87. *
  88. * @return 自定义消息附件
  89. */
  90. - (nullable id<NIMCustomAttachment>)decodeAttachment:(nullable NSString *)content;
  91. @end
  92. /**
  93. * 用户自定义消息对象
  94. */
  95. @interface NIMCustomObject : NSObject<NIMMessageObject>
  96. /**
  97. * 用户自定义附件
  98. * @discussion SDK负责将attachment通过encodeAttachment接口序列化后的结果进行透传
  99. */
  100. @property(nullable, nonatomic, strong) id<NIMCustomAttachment> attachment;
  101. /**
  102. * 注册自定义消息解析器
  103. *
  104. * @param decoder 自定义消息解析器
  105. * @disucssion 如果用户使用自定义消息类型,就需要注册自定义消息解析器,负责将透传过来的自定义消息反序列化成上层应用可识别的对象
  106. */
  107. + (void)registerCustomDecoder:(id<NIMCustomAttachmentCoding>)decoder;
  108. @end
  109. NS_ASSUME_NONNULL_END