资讯专栏INFORMATION COLUMN

给新手的新浪微博 SDK 集成教程【一】

HelKyle / 2355人阅读

摘要:给新手的微博集成教程微博介绍是对新浪微博公开接口的一些封装,应用的开发者可以使用它来访问新浪微博的,进行登录授权,获取用户信息,获取微博列表,发微博等等。可以把自己的微博账户添加到测试账户以方便测试。

给新手的微博 SDK 集成教程 微博 SDK 介绍

WeiboSDK是对新浪微博公开接口的一些封装,iOS 应用的开发者可以使用它来访问新浪微博的 API,进行登录授权,获取用户信息,获取微博列表,发微博等等。其实就是对 微博 API 的包装,无非就是给新浪的服务器发送一个请求,然后处理收到的回复(当然,其实不止这么多,它还可以跟你手机上的微博客户端做交互)。

微博开发者账户

这个没什么好说的,到微博开放平台去注册吧。注册完了,添加一个应用,填写应用信息,就可以获得一个 AppKey(这个在后面要用到)。需要注意的几个点如下:

1.Bundle ID 必须与你的 App 一直,否则测试时会出错。

2.回调地址填一般填默认的就可以了,除非你需要在自己的服务器处理回调。

3.可以把自己的微博账户添加到测试账户以方便测试。

SDK 集成

可以按照微博文档里说的方式手工集成(把依赖的源码,文件等都手工加入到工程里,手工的更改编译配置等),又或者可以使用 CocoaPods 工具自动集成。

CocoaPods

CocoaPods 是一个 iOS 开发的依赖管理工具。什么叫依赖呢?比如说你开发一个 App,里面需要用到微博 SDK,则你的这个 App 依赖于微博 SDK。一个实际的项目中,可能会依赖十几个甚至更多的第三方库,如果每一个都像手工集成微博 SDK 那样集成,会很麻烦,也不利于维护。于是产生了神器 CocoaPods,简单的来说,你只需要维护一份配置文件,这个文件里列出来你需要集成哪些第三方库,然后运行一条命令,CocoaPods 会自动地从网上下载相关的文件,然后自动地帮你配置好整个工程。

安装 CocoaPods

CocoaPods 是使用 Ruby 写的,OS X 上已经默认安装了 Ruby,所以可以直接使用它来安装 CocoaPods。在安装之前需要注意一下,由于众所周知的原因,在国内访问国外的很多网站会很慢,比如 Ruby 的默认源,但是不用担心,taobao 做了一个 Ruby 源的镜像,所以在安装之前,最好先把 Ruby 的默认源改为 taobao 的镜像:

// 删除默认源
$gem sources --remove https://rubygems.org/
// 添加淘宝的 Ruby 镜像
$gem sources -a https://ruby.taobao.org/

// 查看结果
$gem sources -l

替换成功之后就可以安装 CocoaPods 了:

 $sudo gem install cocoapods

参照 CocoaPods 安装教程 上所述,如果你的系统升级到了 OS X EL Capitan,则使用下面的命令安装:

$sudo gem install -n /usr/local/bin cocoapods

安装完之后,运行一下 setup,耐心,这一步很慢:

$pod setup
使用 CocoaPods 集成微博 SDK

如前面所述,你只需要提供一个配置文件就可以, 其它的都交给 CocoaPods,这份配置文件就是 Podfile。假设你现在有个工程叫做 WeiboDemo.xcodeproj,在你的 WeiboDemo.xcodeproj 文件相同的目录下新建一个名叫 Podfile 的文件(或者运行 pod init),用任何文本编辑器打开该文件,输入一下内容:

# Uncomment this line to define a global platform for your project
platform :ios, "8.0"
# Uncomment this line if you"re using Swift
use_frameworks!

target "WeiboDemo" do

pod "WeiboSDK", :git => "https://github.com/sinaweibosdk/weibo_ios_sdk.git"

end

先不用在意这个配置文件的格式,大部分时候,你只需要写类似 pod xxxx 就可以,别的地方都不用动。保存 Podfile 文件后,运行:

$ pod install

安装完成后,项目目录下会多出一个叫做 WeiboDemo.xcworkspace 的文件,注意:之后打开工程的时候都不能再通过原来的 WeiboDemo.xcodeproj 文件了,而是需要打开 WeiboDemo.xcworkspace。CocoaPods 新建了一个 workspace,然后把你原来的工程以及一个包含所有 CocoaPods 管理的第三方库的 Pods 工程都加入到这个 workspace 里去。

是不是很简单?如果以后你需要增加别的第三方库,只需要编辑 Podfile 文件, 然后重新运行一下 pod install 命令就可以了。比如下面这个就是我们某个项目里用到的第三方库:

platform :ios, "8.0"
inhibit_all_warnings!
use_frameworks!

pod "RestKit", "~> 0.25.0"
pod "SDWebImage", "~>3.7.2"
pod "BlocksKit", "~>2.2.5"
pod "pop", "~> 1.0.8"
pod "MBProgressHUD", "~> 0.8"
pod "Qiniu", :git => "https://github.com/KyleXie/objc-sdk.git", :branch => "AFNetworking-1.x"
pod "KTCenterFlowLayout"
pod "ReactiveCocoa", "4.0.4-alpha-1"
pod "SnapKit", "~> 0.15.0"
pod "SwiftAddressBook", "~> 0.5.0"
pod "WeiboSDK", :git => "https://github.com/sinaweibosdk/weibo_ios_sdk.git"
pod "UICollectionViewLeftAlignedLayout"
pod "UMengAnalytics-NO-IDFA"
pod "Locksmith"
pod "iRate", :git => "https://github.com/nicklockwood/iRate.git"
pod "TSMessages", :git => "https://github.com/KrauseFx/TSMessages.git"
配置 URL schemes

前面有提到微博的 SDK 可以跟你手机上的微博客户端做交互(举个栗子,你在自己的 App 里点了某个按钮后,直接跳到了微博 App 里的微博发送页面,发完微博又回来了。其它如跳转到微信发个消息,跳转到支付宝付个钱等也都是同理),感兴趣的可以看一看 Inter-App Communication。为了做到这个,我们需要配置一下项目的 URL Schemes。如下图所示, 在工程的 Info 下,找到 URL Types, 点击下方的小 + 按钮,新增一个 URL Type,identifier 填入 com.weibo,URL Schemes 填入 wb+AppKey(比如说你的 AppKey 是 123, 则这里填入 wb123)。

还没完

新浪微博的 SDK 是用 ObjC 写的,而你的项目可能已经在使用 Swift 了,这里你需要加一个桥接的头文件,以便于你在 Swift 的代码里调用 ObjC 的代码。操作起来也很简单,随便在工程里添加一个 ObjC 的文件,Xcode 就会提示你添加 WeiboDemo-Bridging-Header.h 文件(WeiboDemo 是项目名称,也可以手工添加这个文件)。在 WeiboDemo-Bridging-Header.h 文件里加入:

#import "WeiboSDK.h"

哒哒!你就可以在 Swift 的代码里引用 WeiboSDK 了。
(其实,如果 WeiboSDK 是一个 framework 的话,大家就可以直接使用 Swift 的 import framework 来引入了,不需要添加桥接的文件,很多其他的第三方库都是这种方式。)

先来个授权登录吧

1.集成完微博 SDK 之后,就可以在自己的 App 里调用调起微博客户端来进行授权了, 在 AppDelegate.swift 文件里,加入以下代码:

let appKey = "xxxxx" // 记得上面说过的 AppKey 吧?填在这里


func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
    // Override point for customization after application launch.
    WeiboSDK.enableDebugMode(true)
    WeiboSDK.registerApp(appKey)
    return true
}

这里主要是微博 SDK 的初始化,打开 debug 模式,可以看到更多的调试信息,如果出错了也可以知道错在哪里。

2.随便在某个 ViewController 里添加一个登录授权的按钮,在按钮的点击事件里发送微博授权的请求:

@IBAction func onLoginBtn(sender: AnyObject) {
    let request = WBAuthorizeRequest.request() as? WBAuthorizeRequest
    request?.redirectURI = redirectURI
    request?.scope = "all"
        
    WeiboSDK.sendRequest(request)
}

这段代码的意思就是每当这个按钮别点击的时候,就向微博的 SDK 发送一个 WBAuthorizeRequest 请求,如果你的手机上装了微博客户端,则会跳转到微博 App,请求授权,如果没有安装,则会弹出一个 web 页面,让你登录微博账户来授权。

3.这样还不够,你还需要处理请求的返回结果,不能发完请求就完事了。WeiboSDK 使用的是在 Cocoas 开发中很常用的 delegate 模式来处理请求的结果响应,也就是说你的请求发送出去之后,响应的结果会在你设置的 delegate 里通知你。这个 delegate 就是 WeiboSDKDelegate 协议,所以你需要有个类实现 WeiboSDKDelegate 协议,该协议下声明了两个方法:

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

/**
 收到一个来自微博客户端程序的响应
 
 收到微博的响应后,第三方应用可以通过响应类型、响应的数据和 WBBaseResponse.userInfo 中的数据完成自己的功能
 @param response 具体的响应对象
 */
- (void)didReceiveWeiboResponse:(WBBaseResponse *)response;

第一个是用来处理微博客户端发来的请求的, 第二个是用来处理自己发送的请求的响应消息的,比如说我们刚才发的授权请求,有结果了就会在这第二个方法里处理。

我们可以让 AppDelegate 类实现 WeiboSDKDelegate 协议。首先声明 AppDelegate 服从 WeiboSDKDelegate:

class AppDelegate: UIResponder, UIApplicationDelegate, WeiboSDKDelegate {

然后在 AppDelegate 类里实现 WeiboSDKDelegate 的两个方法:

func didReceiveWeiboRequest(request: WBBaseRequest!) {
    if (request.isKindOfClass(WBProvideMessageForWeiboRequest)) {
        
    }
}
    
func didReceiveWeiboResponse(response: WBBaseResponse!) {
    if (response.isKindOfClass(WBAuthorizeResponse)) {
        let message = "响应状态: (response.statusCode.rawValue)
response.userId: ((response as! WBAuthorizeResponse).userID)
response.accessToken: ((response as! WBAuthorizeResponse).accessToken)
响应UserInfo数据: (response.userInfo)
原请求UserInfo数据: (response.requestUserInfo)"
        let alert = UIAlertView(title: "认证结果", message: message, delegate: nil, cancelButtonTitle: "确定")
        alert.show()
    }
}

由于我们这个示例里不需要处理微博发送给我们的消息,第一个方法为空。第二个方法里对 WBAuthorizeRequest 请求的响应 WBAuthorizeResponse 做了处理,当收到该响应时, 弹窗显示结果。

其实这整个过程跟 UITableView 的 delegate 或 datasource 是类似的,当你调用 reloadData 方法时,UITableView 会去找你指定的 datasource 要数据,有多少行要显示,每一行是多高,每一行显示什么内容等,当你点击了某一行的时候,UITableView 会通过你设置的 delegate 来通知你等等。

4.真的是最后一条了!还缺什么呢?如果你类比 UITableView 的话, 就会发现,还少了设置 delegate 这一步,如果你不设置 WeiboSDK 的 delegate 为你指定的对象,它自己是不知道该把这些消息发送给谁处理的,就像 UITableView 一样,如果你不设置 datasource 和 delegate,它是没有办法正确显示结果的。

在 AppDelegate 里添加如下方法:

func application(application: UIApplication, openURL url: NSURL, sourceApplication: String?, annotation: AnyObject) -> Bool {
    return WeiboSDK.handleOpenURL(url, delegate: self)
}

如果你还记得前面说的 App 间交互(URL Schemes),这个方法从名字就可以看出来它的用处,打开一个 url,如果你在这个方法里打个断点,看一看 url 的值,就会发现:


url 就是咱们在 URL Types 里定义的内容, sourceApplication 是 com.sina.weibo,这说明是新浪微博 App 想要打开我们的 App,我们把这个消息转发给 WeiboSDK 来处理,并设置 WeiboSDK 的 delegate 为 AppDelegate 类的对象(self)。(虽然搞不懂为毛要在这里设置 delegate,而不是初始化的时候就设置)。

至此,当你运行 App,点击“登录”按钮,跳到微博或者弹出网页登录,然后再回到 App 的时候应该可以看到如下的弹窗:

如果没有意外的话, 授权算是完成了,拿到了 access_token, 就可以用它来调用别的微博接口了,比如获取用户信息,比如获取用户微博,比如发微博等。这些等着下回分解吧。

完整的项目及代码见WeiboDemo

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/16147.html

相关文章

  • 体积减少40%、集成步骤精简50%!友盟社会化组件放大招

    摘要:友盟社会化组件正式上线了此次相比于以往的版本,是一次颠覆性创新是友盟社会化组件自年版本推出后最大的一次版本重构升级经过近半年的内测和开发,现在终于正式上线此次版本升级,本着帮助开发者省时省力省事的方针,将主要包体积减少了,删除了旧版本中所有 友盟社会化组件Android SDK 5.0正式上线了!此次Android SDK5.0相比于以往的版本,是一次颠覆性创新;是友盟社会化组件自20...

    ARGUS 评论0 收藏0
  • android集成极光社会化分享攻略

    摘要:简介本文的主旨是帮助开发者快速使用极光分享,实现分享的基本功能,这样用户就不用集成,微信,新浪微博的接口,只要集成极光分享就可以实现多个平台的分享功能。配置微信回调如不需要分享到微信,可跳过。 1.简介本文的主旨是帮助开发者快速使用极光分享,实现分享的基本功能,这样用户就不用集成QQ,微信,新浪微博的接口,只要集成极光分享就可以实现多个平台的分享功能。 2. 开发者帐号及appkey开...

    remcarpediem 评论0 收藏0
  • node.js中文资料导航

    摘要:中文资料导航官网七牛镜像深入浅出系列进阶必读中文文档被误解的编写实战系列热门模块排行榜,方便找出你想要的模块多线程,真正的非阻塞浅析的类利用编写异步多线程的实例中与的区别管道拒绝服务漏洞高级编程业界新闻看如何评价他们的首次尝鲜程序员如何说服 node.js中文资料导航 Node.js HomePage Node官网七牛镜像 Infoq深入浅出Node.js系列(进阶必读) Nod...

    geekidentity 评论0 收藏0
  • 利用新浪API实现数据抓取微博数据爬取微博爬虫

    摘要:本人长期出售超大量微博数据旅游网站评论数据,并提供各种指定数据爬取服务,。如果用户传入伪造的,则新浪微博会返回一个错误。 PS:(本人长期出售超大量微博数据、旅游网站评论数据,并提供各种指定数据爬取服务,Message to YuboonaZhang@Yahoo.com。由于微博接口更新后限制增大,这个代码已经不能用来爬数据了。如果只是为了收集数据可以咨询我的邮箱,如果是为了学习爬虫,...

    liuyix 评论0 收藏0
  • 利用新浪API实现数据抓取微博数据爬取微博爬虫

    摘要:本人长期出售超大量微博数据旅游网站评论数据,并提供各种指定数据爬取服务,。如果用户传入伪造的,则新浪微博会返回一个错误。 PS:(本人长期出售超大量微博数据、旅游网站评论数据,并提供各种指定数据爬取服务,Message to YuboonaZhang@Yahoo.com。由于微博接口更新后限制增大,这个代码已经不能用来爬数据了。如果只是为了收集数据可以咨询我的邮箱,如果是为了学习爬虫,...

    Keagan 评论0 收藏0

发表评论

0条评论

HelKyle

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<