WeiboSDK.h 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676
  1. //
  2. // WeiboSDKHeaders.h
  3. // WeiboSDKDemo
  4. //
  5. // Created by Wade Cheng on 4/3/13.
  6. // Copyright (c) 2013 SINA iOS Team. All rights reserved.
  7. //
  8. #import <Foundation/Foundation.h>
  9. #import <UIKit/UIKit.h>
  10. #import "WBHttpRequest.h"
  11. typedef NS_ENUM(NSInteger, WeiboSDKResponseStatusCode)
  12. {
  13. WeiboSDKResponseStatusCodeSuccess = 0,//成功
  14. WeiboSDKResponseStatusCodeUserCancel = -1,//用户取消发送
  15. WeiboSDKResponseStatusCodeSentFail = -2,//发送失败
  16. WeiboSDKResponseStatusCodeAuthDeny = -3,//授权失败
  17. WeiboSDKResponseStatusCodeUserCancelInstall = -4,//用户取消安装微博客户端
  18. WeiboSDKResponseStatusCodePayFail = -5,//支付失败
  19. WeiboSDKResponseStatusCodeShareInSDKFailed = -8,//分享失败 详情见response UserInfo
  20. WeiboSDKResponseStatusCodeUnsupport = -99,//不支持的请求
  21. WeiboSDKResponseStatusCodeUnknown = -100,
  22. };
  23. @protocol WeiboSDKDelegate;
  24. @protocol WBHttpRequestDelegate;
  25. @class WBBaseRequest;
  26. @class WBBaseResponse;
  27. @class WBMessageObject;
  28. @class WBImageObject;
  29. @class WBBaseMediaObject;
  30. @class WBHttpRequest;
  31. @class PHAsset;
  32. @class WBNewVideoObject;
  33. /**
  34. 微博SDK接口类
  35. */
  36. @interface WeiboSDK : NSObject
  37. /**
  38. 检查用户是否安装了微博客户端程序
  39. @return 已安装返回YES,未安装返回NO
  40. */
  41. + (BOOL)isWeiboAppInstalled;
  42. /**
  43. 检查用户是否可以通过微博客户端进行分享
  44. @return 可以使用返回YES,不可以使用返回NO
  45. */
  46. + (BOOL)isCanShareInWeiboAPP;
  47. /**
  48. 检查用户是否可以使用微博客户端进行SSO授权
  49. @return 可以使用返回YES,不可以使用返回NO
  50. */
  51. + (BOOL)isCanSSOInWeiboApp;
  52. /**
  53. 打开微博客户端程序
  54. @return 成功打开返回YES,失败返回NO
  55. */
  56. + (BOOL)openWeiboApp;
  57. /**
  58. 获取微博客户端程序的itunes安装地址
  59. @return 微博客户端程序的itunes安装地址
  60. */
  61. + (NSString *)getWeiboAppInstallUrl;
  62. /**
  63. 获取当前微博SDK的版本号
  64. @return 当前微博SDK的版本号
  65. */
  66. + (NSString *)getSDKVersion;
  67. extern NSString * const WeiboSDKGetAidSucessNotification;
  68. extern NSString * const WeiboSDKGetAidFailNotification;
  69. /**
  70. 获取当前微博SDK的aid
  71. 返回的aid值可能为 nil ,当值为 nil 时会尝试获取 aid 值。
  72. 当获取成功( aid 值变为有效值)时,SDK会发出名为 WeiboSDKGetAidSucessNotification 的通知,通知中带有 aid 值。
  73. 当获取失败时,SDK会发出名为 WeiboSDKGetAidFailNotification 的通知,通知中带有 NSError 对象。
  74. @return aid 用于广告的与设备信息相关的标识符
  75. */
  76. + (NSString *)getWeiboAid;
  77. /**
  78. 向微博客户端程序注册第三方应用
  79. @param appKey 微博开放平台第三方应用appKey
  80. @return 注册成功返回YES,失败返回NO
  81. */
  82. + (BOOL)registerApp:(NSString *)appKey;
  83. /**
  84. 处理微博客户端程序通过URL启动第三方应用时传递的数据
  85. 需要在 application:openURL:sourceApplication:annotation:或者application:handleOpenURL中调用
  86. @param url 启动第三方应用的URL
  87. @param delegate WeiboSDKDelegate对象,用于接收微博触发的消息
  88. @see WeiboSDKDelegate
  89. */
  90. + (BOOL)handleOpenURL:(NSURL *)url delegate:(id<WeiboSDKDelegate>)delegate;
  91. /**
  92. 发送请求给微博客户端程序,并切换到微博
  93. 请求发送给微博客户端程序之后,微博客户端程序会进行相关的处理,处理完成之后一定会调用 [WeiboSDKDelegate didReceiveWeiboResponse:] 方法将处理结果返回给第三方应用
  94. @param request 具体的发送请求
  95. @see [WeiboSDKDelegate didReceiveWeiboResponse:]
  96. @see WBBaseResponse
  97. */
  98. + (BOOL)sendRequest:(WBBaseRequest *)request;
  99. /**
  100. 收到微博客户端程序的请求后,发送对应的应答给微博客户端端程序,并切换到微博
  101. 第三方应用收到微博的请求后,异步处理该请求,完成后必须调用该函数将应答返回给微博
  102. @param response 具体的应答内容
  103. @see WBBaseRequest
  104. */
  105. + (BOOL)sendResponse:(WBBaseResponse *)response;
  106. /**
  107. 设置WeiboSDK的调试模式
  108. 当开启调试模式时,WeiboSDK会在控制台输出详细的日志信息,开发者可以据此调试自己的程序。默认为 NO
  109. @param enabled 开启或关闭WeiboSDK的调试模式
  110. */
  111. + (void)enableDebugMode:(BOOL)enabled;
  112. /**
  113. 取消授权,登出接口
  114. 调用此接口后,token将失效
  115. @param token 第三方应用之前申请的Token
  116. @param delegate WBHttpRequestDelegate对象,用于接收微博SDK对于发起的接口请求的请求的响应
  117. @param tag 用户自定义TAG,将通过回调WBHttpRequest实例的tag属性返回
  118. */
  119. + (void)logOutWithToken:(NSString *)token delegate:(id<WBHttpRequestDelegate>)delegate withTag:(NSString*)tag;
  120. /**
  121. 呼起微博客户端或打开微博H5页面,SDK自动检测是否安装微博客户端,当调用SDK相关方法时:
  122. 有的话呼起微博客户端定位到对应界面;
  123. 没有的话打开 webView 加载相应的微博H5页面;
  124. @param uid 用户id
  125. @param mid 微博id
  126. @param aid 文章id
  127. */
  128. //连接到指定用户的微博个人主页,连接后可进行加关注等互动
  129. + (void)linkToUser:(NSString *)uid;
  130. //连接到指定的单条微博详情页,连接后可对这条微博进行转、评、赞等互动
  131. + (void)linkToSingleBlog:(NSString *)uid blogID:(NSString *)mid;
  132. //连接到指定的微博头条文章页
  133. + (void)linkToArticle:(NSString *)aid;
  134. //分享到微博
  135. + (void)shareToWeibo:(NSString *)content;
  136. //评论指定的微博
  137. + (void)commentToWeibo:(NSString *)mid;
  138. //连接到微博搜索内容流
  139. + (void)linkToSearch:(NSString *)keyword;
  140. //连接到我的微博消息流
  141. + (void)linkToTimeLine;
  142. //连接到我的微博个人主页
  143. + (void)linkToProfile;
  144. @end
  145. /**
  146. 接收并处理来至微博客户端程序的事件消息
  147. */
  148. @protocol WeiboSDKDelegate <NSObject>
  149. /**
  150. 收到一个来自微博客户端程序的请求
  151. 收到微博的请求后,第三方应用应该按照请求类型进行处理,处理完后必须通过 [WeiboSDK sendResponse:] 将结果回传给微博
  152. @param request 具体的请求对象
  153. */
  154. - (void)didReceiveWeiboRequest:(WBBaseRequest *)request;
  155. /**
  156. 收到一个来自微博客户端程序的响应
  157. 收到微博的响应后,第三方应用可以通过响应类型、响应的数据和 WBBaseResponse.userInfo 中的数据完成自己的功能
  158. @param response 具体的响应对象
  159. */
  160. - (void)didReceiveWeiboResponse:(WBBaseResponse *)response;
  161. @end
  162. #pragma mark - DataTransferObject and Base Request/Response
  163. /**
  164. 微博客户端程序和第三方应用之间传输数据信息的基类
  165. */
  166. @interface WBDataTransferObject : NSObject
  167. /**
  168. 自定义信息字典,用于数据传输过程中存储相关的上下文环境数据
  169. 第三方应用给微博客户端程序发送 request 时,可以在 userInfo 中存储请求相关的信息。
  170. @warning userInfo中的数据必须是实现了 `NSCoding` 协议的对象,必须保证能序列化和反序列化
  171. @warning 序列化后的数据不能大于10M
  172. */
  173. @property (nonatomic, strong) NSDictionary *userInfo;
  174. /**
  175. 发送该数据对象的SDK版本号
  176. 如果数据对象是自己生成的,则sdkVersion为当前SDK的版本号;如果是接收到的数据对象,则sdkVersion为数据发送方SDK版本号
  177. */
  178. @property (strong, nonatomic, readonly) NSString *sdkVersion;
  179. /**
  180. 当用户没有安装微博客户端程序时是否提示用户打开微博安装页面
  181. 如果设置为YES,当用户未安装微博时会弹出Alert询问用户是否要打开微博App的安装页面。默认为YES
  182. */
  183. @property (nonatomic, assign) BOOL shouldOpenWeiboAppInstallPageIfNotInstalled;
  184. @end
  185. /**
  186. 微博SDK所有请求类的基类
  187. */
  188. @interface WBBaseRequest : WBDataTransferObject
  189. /**
  190. 返回一个 WBBaseRequest 对象
  191. @return 返回一个*自动释放的*WBBaseRequest对象
  192. */
  193. + (id)request;
  194. @end
  195. /**
  196. 微博SDK所有响应类的基类
  197. */
  198. @interface WBBaseResponse : WBDataTransferObject
  199. /**
  200. 对应的 request 中的自定义信息字典
  201. 如果当前 response 是由微博客户端响应给第三方应用的,则 requestUserInfo 中会包含原 request.userInfo 中的所有数据
  202. @see WBBaseRequest.userInfo
  203. */
  204. @property (strong, nonatomic, readonly) NSDictionary *requestUserInfo;
  205. /**
  206. 响应状态码
  207. 第三方应用可以通过statusCode判断请求的处理结果
  208. */
  209. @property (nonatomic, assign) WeiboSDKResponseStatusCode statusCode;
  210. /**
  211. 返回一个 WBBaseResponse 对象
  212. @return 返回一个*自动释放的*WBBaseResponse对象
  213. */
  214. + (id)response;
  215. @end
  216. #pragma mark - Authorize Request/Response
  217. /**
  218. 第三方应用向微博客户端请求认证的消息结构
  219. 第三方应用向微博客户端申请认证时,需要调用 [WeiboSDK sendRequest:] 函数, 向微博客户端发送一个 WBAuthorizeRequest 的消息结构。
  220. 微博客户端处理完后会向第三方应用发送一个结构为 WBAuthorizeResponse 的处理结果。
  221. */
  222. @interface WBAuthorizeRequest : WBBaseRequest
  223. /**
  224. 微博开放平台第三方应用授权回调页地址,默认为`http://`
  225. 参考 http://open.weibo.com/wiki/%E6%8E%88%E6%9D%83%E6%9C%BA%E5%88%B6%E8%AF%B4%E6%98%8E#.E5.AE.A2.E6.88.B7.E7.AB.AF.E9.BB.98.E8.AE.A4.E5.9B.9E.E8.B0.83.E9.A1.B5
  226. @warning 必须保证和在微博开放平台应用管理界面配置的“授权回调页”地址一致,如未进行配置则默认为`http://`
  227. @warning 不能为空,长度小于1K
  228. */
  229. @property (nonatomic, strong) NSString *redirectURI;
  230. /**
  231. 微博开放平台第三方应用scope,多个scrope用逗号分隔
  232. 参考 http://open.weibo.com/wiki/%E6%8E%88%E6%9D%83%E6%9C%BA%E5%88%B6%E8%AF%B4%E6%98%8E#scope
  233. @warning 长度小于1K
  234. */
  235. @property (nonatomic, strong) NSString *scope;
  236. /**
  237. 当用户没有安装微博客户端或微博客户端过低无法支持SSO的时候是否弹出SDK自带的Webview进行授权
  238. 如果设置为YES,当用户没有安装微博客户端或微博客户端过低无法支持SSO的时候会自动弹出SDK自带的Webview进行授权。
  239. 如果设置为NO,会根据 shouldOpenWeiboAppInstallPageIfNotInstalled 属性判断是否弹出安装/更新微博的对话框
  240. 默认为YES
  241. */
  242. @property (nonatomic, assign) BOOL shouldShowWebViewForAuthIfCannotSSO;
  243. @end
  244. /**
  245. 微博客户端处理完第三方应用的认证申请后向第三方应用回送的处理结果
  246. WBAuthorizeResponse 结构中仅包含常用的 userID 、accessToken 和 expirationDate 信息,其他的认证信息(比如部分应用可以获取的 refresh_token 信息)会统一存放到 userInfo 中
  247. */
  248. @interface WBAuthorizeResponse : WBBaseResponse
  249. /**
  250. 用户ID
  251. */
  252. @property (nonatomic, strong) NSString *userID;
  253. /**
  254. 认证口令
  255. */
  256. @property (nonatomic, strong) NSString *accessToken;
  257. /**
  258. 认证过期时间
  259. */
  260. @property (nonatomic, strong) NSDate *expirationDate;
  261. /**
  262. 当认证口令过期时用于换取认证口令的更新口令
  263. */
  264. @property (nonatomic, strong) NSString *refreshToken;
  265. @end
  266. #pragma mark - ProvideMessageForWeibo Request/Response
  267. /**
  268. 微博客户端向第三方程序请求提供内容的消息结构
  269. */
  270. @interface WBProvideMessageForWeiboRequest : WBBaseRequest
  271. @end
  272. /**
  273. 微博客户端向第三方应用请求提供内容,第三方应用向微博客户端返回的消息结构
  274. */
  275. @interface WBProvideMessageForWeiboResponse : WBBaseResponse
  276. /**
  277. 提供给微博客户端的消息
  278. */
  279. @property (nonatomic, strong) WBMessageObject *message;
  280. /**
  281. 返回一个 WBProvideMessageForWeiboResponse 对象
  282. @param message 需要回送给微博客户端程序的消息对象
  283. @return 返回一个*自动释放的*WBProvideMessageForWeiboResponse对象
  284. */
  285. + (id)responseWithMessage:(WBMessageObject *)message;
  286. @end
  287. #pragma mark - SendMessageToWeibo Request/Response
  288. /**
  289. 第三方应用发送消息至微博客户端程序的消息结构体
  290. */
  291. @interface WBSendMessageToWeiboRequest : WBBaseRequest
  292. /**
  293. 发送给微博客户端的消息
  294. */
  295. @property (nonatomic, strong) WBMessageObject *message;
  296. /**
  297. 返回一个 WBSendMessageToWeiboRequest 对象
  298. 此方法生成对象被[WeiboSDK sendRequest:]会唤起微博客户端的发布器进行分享,如果未安装微博客户端或客户端版本太低
  299. 会根据 shouldOpenWeiboAppInstallPageIfNotInstalled 属性判断是否弹出安装/更新微博的对话框
  300. @param message 需要发送给微博客户端的消息对象
  301. @return 返回一个*自动释放的*WBSendMessageToWeiboRequest对象
  302. */
  303. + (id)requestWithMessage:(WBMessageObject *)message;
  304. /**
  305. 返回一个 WBSendMessageToWeiboRequest 对象
  306. 当用户安装了可以支持微博客户端內分享的微博客户端时,会自动唤起微博并分享
  307. 当用户没有安装微博客户端或微博客户端过低无法支持通过客户端內分享的时候会自动唤起SDK內微博发布器
  308. @param message 需要发送给微博的消息对象
  309. @param authRequest 授权相关信息,与access_token二者至少有一个不为空,当access_token为空并且需要弹出SDK內发布器时会通过此信息先进行授权后再分享
  310. @param access_token 第三方应用之前申请的Token,当此值不为空并且无法通过客户端分享的时候,会使用此token进行分享。
  311. @return 返回一个*自动释放的*WBSendMessageToWeiboRequest对象
  312. */
  313. + (id)requestWithMessage:(WBMessageObject *)message
  314. authInfo:(WBAuthorizeRequest *)authRequest
  315. access_token:(NSString *)access_token;
  316. @end
  317. /**
  318. WBSendMessageToWeiboResponse
  319. */
  320. @interface WBSendMessageToWeiboResponse : WBBaseResponse
  321. /**
  322. 可能在分享过程中用户进行了授权操作,当此值不为空时,为用户相应授权信息
  323. */
  324. @property (nonatomic,strong) WBAuthorizeResponse *authResponse;
  325. @end
  326. #pragma mark - MessageObject / ImageObject
  327. /**
  328. 微博客户端程序和第三方应用之间传递的消息结构
  329. 一个消息结构由三部分组成:文字、图片和多媒体数据。三部分内容中至少有一项不为空,图片和多媒体数据不能共存。(新版的多图和视频属于图片数据,并且图片和视频也不能共存)
  330. */
  331. @interface WBMessageObject : NSObject
  332. /**
  333. 消息的文本内容
  334. @warning 长度小于2000个汉字
  335. */
  336. @property (nonatomic, strong) NSString *text;
  337. /**
  338. 消息的图片内容
  339. @see WBImageObject
  340. */
  341. @property (nonatomic, strong) WBImageObject *imageObject;
  342. /**
  343. 消息的多媒体内容
  344. @see WBBaseMediaObject
  345. */
  346. @property (nonatomic, strong) WBBaseMediaObject *mediaObject;
  347. /**
  348. 消息的视频内容
  349. @see WBVideoObject
  350. */
  351. @property (nonatomic, strong) WBNewVideoObject *videoObject;
  352. /**
  353. 返回一个 WBMessageObject 对象
  354. @return 返回一个*自动释放的*WBMessageObject对象
  355. */
  356. + (id)message;
  357. @end
  358. /**
  359. 图片视频分享时错误枚举
  360. */
  361. typedef NS_ENUM(NSInteger, WBSDKMediaTransferErrorCode)
  362. {
  363. WBSDKMediaTransferAlbumPermissionError = 0,//相册权限
  364. WBSDKMediaTransferAlbumWriteError = 0,//相册写入错误
  365. WBSDKMediaTransferAlbumAssetTypeError = 0,//资源类型错误
  366. };
  367. /**
  368. 图片视频分享协议
  369. */
  370. @protocol WBMediaTransferProtocol <NSObject>
  371. /**
  372. 数据准备成功回调
  373. */
  374. -(void)wbsdk_TransferDidReceiveObject:(id)object;
  375. /**
  376. 数据准备失败回调
  377. */
  378. -(void)wbsdk_TransferDidFailWithErrorCode:(WBSDKMediaTransferErrorCode)errorCode andError:(NSError*)error;
  379. @end
  380. /**
  381. 消息中包含的图片数据对象
  382. */
  383. @interface WBImageObject : NSObject
  384. /**
  385. 图片真实数据内容
  386. @warning 大小不能超过10M
  387. */
  388. @property (nonatomic, strong) NSData *imageData;
  389. /**
  390. 是否分享到story
  391. */
  392. @property (nonatomic) BOOL isShareToStory;
  393. /**
  394. 返回一个 WBImageObject 对象
  395. @return 返回一个*自动释放的*WBImageObject对象
  396. */
  397. + (id)object;
  398. /**
  399. 返回一个 UIImage 对象
  400. @return 返回一个*自动释放的*UIImage对象
  401. */
  402. - (UIImage *)image;
  403. /**
  404. 多图分享委托
  405. */
  406. @property(nonatomic,weak)id<WBMediaTransferProtocol> delegate;
  407. /**
  408. 图片对象添加图片数组
  409. */
  410. - (void)addImages:(NSArray<UIImage *>*)imageArray;
  411. /**
  412. 图片对象添加照片数组
  413. */
  414. - (void)addImageAssets:(NSArray<PHAsset*>*)assetArray;
  415. /**
  416. 多图最终传递对象
  417. */
  418. -(NSArray*)finalAssetArray;
  419. @end
  420. @interface WBNewVideoObject : NSObject
  421. /**
  422. 返回一个 WBNewVideoObject 对象
  423. @return 返回一个*自动释放的*WBNewVideoObject对象
  424. */
  425. + (id)object;
  426. /**
  427. 是否分享到story
  428. */
  429. @property (nonatomic) BOOL isShareToStory;
  430. /**
  431. 多图分享委托
  432. */
  433. @property(nonatomic,weak)id<WBMediaTransferProtocol> delegate;
  434. /**
  435. 视频对象添加视频
  436. */
  437. -(void)addVideo:(NSURL*)videoUrl;
  438. /**
  439. 视频对象添加视频资源
  440. */
  441. -(void)addVideoAsset:(PHAsset*)videoAsset;
  442. /**
  443. 视频最终传递对象
  444. */
  445. -(NSString*)finalAsset;
  446. @end
  447. #pragma mark - Message Media Objects
  448. /**
  449. 消息中包含的多媒体数据对象基类,该类后期会被废弃,在发布器不再显示为linkcard样式,只显示为普通网络连接
  450. */
  451. @interface WBBaseMediaObject : NSObject
  452. /**
  453. 对象唯一ID,用于唯一标识一个多媒体内容
  454. 当第三方应用分享多媒体内容到微博时,应该将此参数设置为被分享的内容在自己的系统中的唯一标识
  455. @warning 不能为空,长度小于255
  456. */
  457. @property (nonatomic, strong) NSString *objectID;
  458. /**
  459. 多媒体内容标题
  460. @warning 不能为空且长度小于1k
  461. */
  462. @property (nonatomic, strong) NSString *title;
  463. /**
  464. 多媒体内容描述
  465. @warning 长度小于1k
  466. */
  467. @property (nonatomic, strong) NSString *description;
  468. /**
  469. 多媒体内容缩略图
  470. @warning 大小小于32k
  471. */
  472. @property (nonatomic, strong) NSData *thumbnailData;
  473. /**
  474. 点击多媒体内容之后呼起第三方应用特定页面的scheme
  475. @warning 长度小于255
  476. */
  477. @property (nonatomic, strong) NSString *scheme;
  478. /**
  479. 返回一个 WBBaseMediaObject 对象
  480. @return 返回一个*自动释放的*WBBaseMediaObject对象
  481. */
  482. + (id)object;
  483. @end
  484. #pragma mark - Message WebPage Objects
  485. /**
  486. 消息中包含的网页数据对象
  487. */
  488. @interface WBWebpageObject : WBBaseMediaObject
  489. /**
  490. 网页的url地址
  491. @warning 不能为空且长度不能超过255
  492. */
  493. @property (nonatomic, strong) NSString *webpageUrl;
  494. @end