iOS 接入微博SDK封装的工具类HHWeiboSDK(登录,分
嗯,我使用pod导入的微博SDK,手动导入请看官方开发文档添加需要依赖的库和配置SDK:这里是微博SDK的github链接,里面有源码下载和开发文档
pod "WeiboSDK", :git => "https://github.com/sinaweibosdk/weibo_ios_sdk.git"
pod导入的话很方便,如果你只需要微博登录和微博分享的话不用看官方的开发文档了,看这里就足够了,只要设置工程回调URL Scheme和白名单就ok了,
Appkey
第三方应用申请的 appkey,用来身份鉴证、显示来源等
AppRedirectURL
应用回调页,在进行 Oauth2.0 登录认证时所用。对于 Mobile 客户端应用来说,是不存在 Server 的,故此处的应用回调页地址只要与新浪微博开放平台->我的应用->应用信息-> 高级应用->授权设置->应用回调页中的 url 地址保持一致就可以了
设置URL Scheme
修改 info.plist 文件 URL types 项中后面的URL Schemes内容为"wb+Appkey",例如:wb204543436852(我这里设置了支付宝,qq,微信,微博,只用到微博的话,就添加微博的就ok)
2EA80578-7343-433E-8803-73E4E826BE11.png
添加URL Schemes白名单
在“Info.plist”中增加一个LSApplicationQueriesSchemes值,设置为array, 添加微博需要的几个item:
sinaweibohd
sinaweibo
sinaweibosso
weibosdk
weibosdk2.5
设置https访问
在“Info.plist”中增加一个App Transport Security Settings值, 其中有一个Allow Arbitrary Loads对应的值要设置为YES
39DD2532-0055-4AC0-AC11-920D6A18E179.png
然后就就可以愉快的写代码了
创建了一个继承于NSObject的HHWeiboSDK工具类,我自己简单的封装了一下以往需要微博登录和分享用到的方法,需要别的功能的话,还是要去看官方的开发文档滴.
.h文件
#import <Foundation/Foundation.h>
@interface HHWeiboSDK : NSObject
/**
实例化
*/
+(instancetype) shareInstance;
/**
初始化微博SDK
*/
+(void)initSDK;
/**
openURL回调
*/
+(BOOL)handleOpenURL:(NSURL *)url;
/**
微博登录
*/
+ (void)sendWeiboLoginRequest;
/**
分享到微博
@param content 分享的文字内容
@param urlStr 分享的图片URL字符串
*/
+ (void)shareToWeiboWithContent:(NSString *)content
imageURLStr:(NSString *)urlStr;
@end
.m文件
#import "HHWeiboSDK.h"
#import "WeiboSDK.h"
@interface HHWeiboSDK ()<WeiboSDKDelegate>
@end
@implementation HHWeiboSDK
static NSURL * safeURL(NSString * origin) {
return [NSURL URLWithString:
[origin stringByAddingPercentEscapesUsingEncoding:
NSUTF8StringEncoding]];
}
static HHWeiboSDK* _instance = nil;
//单例模式供外调用对象
+(instancetype) shareInstance{
static dispatch_once_t onceToken ;
dispatch_once(&onceToken, ^{
_instance = [[super allocWithZone:NULL] init] ;
}) ;
return _instance ;
}
+(id) allocWithZone:(struct _NSZone *)zone{
return [HHWeiboSDK shareInstance] ;
}
-(id) copyWithZone:(NSZone *)zone{
return [HHWeiboSDK shareInstance] ;
}
-(id) mutablecopyWithZone:(NSZone *)zone{
return [HHWeiboSDK shareInstance] ;
}
#pragma mark - 回调
/**
收到一个来自微博客户端程序的请求
收到微博的请求后,第三方应用应该按照请求类型进行处理,处理完后必须通过 [WeiboSDK sendResponse:] 将结果回传给微博
@param request 具体的请求对象
*/
- (void)didReceiveWeiboRequest:(WBBaseRequest *)request{ //向微博发送请求
NSLog(@" %@",request.class);
}
/**
微博分享 与 微博登录,成功与否都会走这个方法。 用户根据自己的业务进行处理。
收到一个来自微博客户端程序的响应
收到微博的响应后,第三方应用可以通过响应类型、响应的数据和 WBBaseResponse.userInfo 中的数据完成自己的功能
@param response 具体的响应对象
*/
- (void)didReceiveWeiboResponse:(WBBaseResponse *)response{
//用户登录的回调
if ([response isKindOfClass:WBAuthorizeResponse.class])
{
//0代表成功
NSLog(@"%ld", (long)response.statusCode);
}
//用户分享的回调
if ([response isKindOfClass:WBSendMessageToWeiboResponse.class])
{
NSLog(@"%@", response);
}
}
+(void)initSDK {
// 注册
[WeiboSDK registerApp:Weibo_AppKey];
}
+(BOOL)handleOpenURL:(NSURL *)url {
return [WeiboSDK handleOpenURL:url delegate:[self shareInstance]];;
}
//分享
+ (void)shareToWeiboWithContent:(NSString *)content
imageURLStr:(NSString *)urlStr{
WBAuthorizeRequest *authRequest = [WBAuthorizeRequest request];
//回调地址与 新浪微博开放平台中 我的应用 --- 应用信息 -----高级应用 -----授权设置 ---应用回调中的url保持一致就好了
authRequest.redirectURI = Weibo_RedirectURI;
//SCOPE 授权说明参考http://open.weibo.com/wiki/
authRequest.scope = @"all";
WBImageObject *image = [WBImageObject object];
image.imageData=[NSData dataWithContentsOfURL:safeURL(urlStr)];
WBMessageObject *message = [WBMessageObject message];
message.text = content;
message.imageObject = image;
WBSendMessageToWeiboRequest *request =[WBSendMessageToWeiboRequest requestWithMessage:message authInfo:authRequest access_token:nil ];
[WeiboSDK sendRequest:request];
}
//登陆
+ (void)sendWeiboLoginRequest{
WBAuthorizeRequest *request = [WBAuthorizeRequest request];
//回调地址与 新浪微博开放平台中 我的应用 --- 应用信息 -----高级应用 -----授权设置 ---应用回调中的url保持一致就好了
request.redirectURI = Weibo_RedirectURI;
//SCOPE 授权说明参考 http://open.weibo.com/wiki/
request.scope = @"all";
request.userInfo = nil;
[WeiboSDK sendRequest:request];
}
@end
设置(个人喜欢类方法,调用方便,可自己修改)
在AppDelegate.m文件中初始化
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
//weibo
[HHWeiboSDK initSDK];
}
openURL方法中设置回调(这里一个是iOS9以下的系统调用的系统方法和一个是iOS9以上的系统调用的系统方法,都要设置)
#pragma mark - OpenURL回调结果
//iOS9-
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation{
[self handleOpenURLWithURLHost:url];
return YES;
}
//iOS9和9+
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<NSString*, id> *)options{
[self handleOpenURLWithURLHost:url];
return YES;
}
- (void)handleOpenURLWithURLHost:(NSURL *)url{
NSLog(@"url.host:%@", url.host);
//微博
if ([url.host isEqualToString:@"response"]){
[HHWeiboSDK handleOpenURL:url];
}
}
调用
都是类方法,一个登陆,一个分享,直接在需要的地方调用就可以了.当然,前提是你设置好了Weibo_AppKey和Weibo_RedirectURI,并且保证你的应用取得了登陆和分享的授权.
/**
微博登录
*/
+ (void)sendWeiboLoginRequest;
/**
分享到微博
@param content 分享的文字内容
@param urlStr 分享的图片URL字符串
*/
+ (void)shareToWeiboWithContent:(NSString *)content
imageURLStr:(NSString *)urlStr;