iOS开发之第三方登录微博-- 史上最全最新第三方登录微博方式实现

相关资源地址:

本项目demo地址 :   https://github.com/zhonggaorong/weiboSDKDemo

最新SDK下载:  最新微博SDK

官网注册地址:点击打开链接


最新版本的微博登录实现步骤实现:

1. 使用此SDK需满足以下条件: 

  • 在新浪微博开放平台注册并创建应用   
  • 已定义本应用的授权回调页                   
  • 已选择应用为iOS平台,并正确填写Bundle id和apple id  (要与Xcode 工程中的bundle相对应)

注: 关于授权回调页对移动客户端应用来说对用户是不可见的,所以定义为何种形式都将不影响,但是没有定义将无法使用SDK认证登录。建议使用默认回调页 https://api.weibo.com/oauth2/default.html

2. 最新SDK目录结构预览:
     iOS开发之第三方登录微博-- 史上最全最新第三方登录微博方式实现_第1张图片
     

3. 把SDK集成到工程。
    1.  通过pod 集成。
pod "WeiboSDK"

    2. 手动导入sdk
         1.  把上面预览图上面的文件,全部拖入工程中。
iOS开发之第三方登录微博-- 史上最全最新第三方登录微博方式实现_第2张图片
 2.    Other Linker Flags  增加 -all_load.  (一定要把官方说的 -Objc 换成 -all_load) 好大一个坑。
  iOS开发之第三方登录微博-- 史上最全最新第三方登录微博方式实现_第3张图片
       3. 添加依赖库。
        在   Target->Buid Phases->Link BinaryWith Libraries   下增加以下库:   QuartzCore.framework ImageIO.framework SystemConfiguration.framework Security.framework CoreTelephony.framework CoreText.framework UIKit.framework Foundation.framework CoreGraphics.framework libz.dylib libsqlite3.dylib
iOS开发之第三方登录微博-- 史上最全最新第三方登录微博方式实现_第4张图片
4. 编译工程。应该编译成功。

  5. 针对iOS9的相关问题。
            1. 你需要用到微博的相关功能,如登陆,分享等。并且需要实现跳转到微博的功能,在iOS9系统中就需要在你的app的plist中添加下列键值对。否则在canOpenURL函数执行时,就会返回NO。了解详情请至https://developer.apple.com/videos/wwdc/2015/?id=703
 
LSApplicationQueriesSchemes

    sinaweibohd
    sinaweibo
    weibosdk
    weibosdk2.5
   
     2. 增加url Types。
iOS开发之第三方登录微博-- 史上最全最新第三方登录微博方式实现_第5张图片


注意:  bundle ideatefier 一定要与 微博开发者后台要一致,不然会出现调试不成功,有以下错误出现。
Flag Status: -R ------- networkStatusForFlags
2016-06-21 15:18:31.556 weiboSDKDemo[906:299845] -canOpenURL: failed for URL: "weibosdk://" - error: "(null)"
2016-06-21 15:18:31.720 weiboSDKDemo[906:299845] Reachability Flag Status: -R ------- networkStatusForFlags
2016-06-21 15:18:33.350 weiboSDKDemo[906:299845] -[AppDelegate application:openURL:sourceApplication:annotation:]: unrecognized selector sent to instance 0x12d615090
2016-06-21 15:18:33.351 weiboSDKDemo[906:299845] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[AppDelegate application:openURL:sourceApplication:annotation:]: unrecognized selector sent to instance 0x12d615090'
*** First throw call stack:
(0x1823fee38 0x181a63f80 0x182405ccc 0x182402aa4 0x182300d1c 0x100116a30 0x10021da7c 0x10021da3c 0x1002234e4 0x1823b4dd8 0x1823b2c40 0x1822dcd10 0x183bc4088 0x1875b1f70 0x1000d4f54 0x181e7a8b8)
libc++abi.dyli


4. 正式进行相关编程了。

appDelegate.m中
    1. 向微博进行注册微博, 通过申请的appkey。 
    2. 重写系统方法
 
application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary *)options{}

具体代码如下:

//
//  AppDelegate.h
//  weiboSDKDemo
//
//  Created by 张国荣 on 16/6/21.
//  Copyright © 2016年 BateOrganization. All rights reserved.
//

#import 
#import "WeiboSDK.h"
@protocol WeiBoDelegate 

//登录的代理
-(void)weiboLoginByResponse:(WBBaseResponse *)response;
//分享的大力
-(void)weiboShareSuccessCode:(NSInteger)shareResultCode;
@end

@interface AppDelegate : UIResponder 

@property (strong, nonatomic) UIWindow *window;
@property (weak  , nonatomic) id weiboDelegate;

@end


//
//  AppDelegate.m
//  weiboSDKDemo
//
//  Created by 张国荣 on 16/6/21.
//  Copyright © 2016年 BateOrganization. All rights reserved.
//

#import "AppDelegate.h"
//申请下来的appkey
#define APP_KEY @"app key"

@interface AppDelegate ()

@end

@implementation AppDelegate


- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    // Override point for customization after application launch.
    
    [WeiboSDK registerApp:APP_KEY];
    return YES;
}


// 9.0 后才生效
-(BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary *)options{

    return [WeiboSDK handleOpenURL:url delegate:self];
}


#pragma mark 9.0之前
- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url{
    return [WeiboSDK handleOpenURL:url delegate:self];
}
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(nullable NSString *)sourceApplication annotation:(id)annotation{
    return [WeiboSDK handleOpenURL:url delegate:self];
}


/**
 收到一个来自微博客户端程序的请求
 
 收到微博的请求后,第三方应用应该按照请求类型进行处理,处理完后必须通过 [WeiboSDK sendResponse:] 将结果回传给微博
 @param request 具体的请求对象
 */
- (void)didReceiveWeiboRequest:(WBBaseRequest *)request{ //向微博发送请求
    
    NSLog(@" %@",request.class);
}

/**
 
 微博分享  与 微博登录,成功与否都会走这个方法。 用户根据自己的业务进行处理。
 收到一个来自微博客户端程序的响应
 
 收到微博的响应后,第三方应用可以通过响应类型、响应的数据和 WBBaseResponse.userInfo 中的数据完成自己的功能
 @param response 具体的响应对象
 */
- (void)didReceiveWeiboResponse:(WBBaseResponse *)response{
    if ([response isKindOfClass:WBAuthorizeResponse.class])  //用户登录的回调
    {
    
        if ([_weiboDelegate respondsToSelector:@selector(weiboLoginByResponse:)]) {
            [_weiboDelegate weiboLoginByResponse:response];
        }
    }
}

@end

调用登录的viewController.m 下面是具体的代码:

//
//  ViewController.m
//  weiboSDKDemo
//
//  Created by 张国荣 on 16/6/21.
//  Copyright © 2016年 BateOrganization. All rights reserved.
//

#import "ViewController.h"
#import "WeiboSDK.h"
#import "AppDelegate.h"

#define APP_REDIRECT_URL @"回调地址"
@interface ViewController ()
{
    AppDelegate *delgate;
}
@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
}
- (IBAction)weiboLoginAction:(id)sender {
    delgate = (AppDelegate *)[UIApplication sharedApplication].delegate;
    delgate.weiboDelegate = self;
    WBAuthorizeRequest *request = [WBAuthorizeRequest request];
    
    //回调地址与 新浪微博开放平台中 我的应用  --- 应用信息 -----高级应用    -----授权设置 ---应用回调中的url保持一致就好了
    request.redirectURI = APP_REDIRECT_URL;
    
    //SCOPE 授权说明参考  http://open.weibo.com/wiki/
    request.scope = @"all";
    request.userInfo = nil;
    [WeiboSDK sendRequest:request];
}


-(void)weiboLoginByResponse:(WBBaseResponse *)response{
    NSDictionary *dic = (NSDictionary *) response.requestUserInfo;
    NSLog(@"userinfo %@",dic);
    
}

- (IBAction)weiboShareAction:(id)sender {
}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

@end



你可能感兴趣的:(Object_c)