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)


iOS 接入微博SDK封装的工具类HHWeiboSDK(登录,分享)_第1张图片
2EA80578-7343-433E-8803-73E4E826BE11.png

添加URL Schemes白名单

在“Info.plist”中增加一个LSApplicationQueriesSchemes值,设置为array, 添加微博需要的几个item:
sinaweibohd
sinaweibo
sinaweibosso
weibosdk
weibosdk2.5

iOS 接入微博SDK封装的工具类HHWeiboSDK(登录,分享)_第2张图片
4ECDABF8-640E-4CF9-BBB8-C93037F155D9.png

设置https访问

在“Info.plist”中增加一个App Transport Security Settings值, 其中有一个Allow Arbitrary Loads对应的值要设置为YES


39DD2532-0055-4AC0-AC11-920D6A18E179.png

然后就就可以愉快的写代码了

创建了一个继承于NSObject的HHWeiboSDK工具类,我自己简单的封装了一下以往需要微博登录和分享用到的方法,需要别的功能的话,还是要去看官方的开发文档滴.


.h文件

#import 

@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 ()

@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 *)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;

你可能感兴趣的:(iOS 接入微博SDK封装的工具类HHWeiboSDK(登录,分享))