美文网首页iOS支付分享
iOS 接入微博SDK封装的工具类HHWeiboSDK(登录,分

iOS 接入微博SDK封装的工具类HHWeiboSDK(登录,分

作者: Hai1丶HydrA | 来源:发表于2017-06-14 13:51 被阅读395次

    嗯,我使用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

    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 <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;
    

    相关文章

      网友评论

      本文标题:iOS 接入微博SDK封装的工具类HHWeiboSDK(登录,分

      本文链接:https://www.haomeiwen.com/subject/vessqxtx.html