网站调用新浪微博内容(给新手的微博SDK集成教程()微博)

优采云 发布时间: 2021-11-17 08:17

  网站调用新浪微博内容(给新手的微博SDK集成教程()微博)

  微博SDK初学者集成教程 微博SDK介绍

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

  微博开发者账号

  这个没什么好说的,去微博开放平台报名吧。注册后,添加一个应用,填写应用信息,得到一个A*敏*感*词*ey(这个后面会用到)。需要注意的几点如下:

  1.Bundle ID必须和你的App一致,否则测试时会报错。

  

  2. 回调地址通常填写默认,除非你需要在自己的服务器上处理回调。

  

  3. 测试账号可以添加自己的微博账号,方便测试。

  SDK集成

  可以按照微博文档中的描述手动集成(手动添加依赖源代码、文件等到项目中,手动更改编译配置等),也可以使用CocoaPods工具自动集成。

  可可豆

  CocoaPods 是 iOS 开发的依赖管理工具。什么是依赖?例如,如果您开发的应用程序需要微博 SDK,则您的应用程序依赖于微博 SDK。在实际项目中,可能会依赖十几个甚至更多的第三方库。如果每个都像微博SDK手动集成一样集成,既麻烦又不利于维护。于是神器CocoaPods诞生了。简单来说,你只需要维护一个配置文件。该文件列出了您需要集成的第三方库,然后运行命令。CocoaPods 会自动从网上下载相关文件,然后自动为你配置整个项目。

  安装 CocoaPods

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

  // 删除默认源

$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 会将其余的交给 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 创建一个新的工作区,然后将你原来的项目和一个收录 CocoaPods 管理的所有第三方库的 Pods 项目添加到这个工作区。

  是不是很简单?如果以后需要添加其他第三方库,只需要编辑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 方案

  前面说过,微博SDK可以和你手机上的微博客户端进行交互(比如在你的app中点击一个按钮后,你直接跳转到了微博app中的微博发送页面,我发了微博就回来了。其他的比如跳微信发消息,跳支付宝付钱等等都是一样的。)有兴趣的可以看看应用间通讯。为此,我们需要配置项目的 URL Schemes。如下图,在project Info下,找到URL Types,点击下面的小+按钮,添加一个URL Type,标识符输入com.weibo,URL Schemes输入wb+A*敏*感*词*ey(比如你的A*敏*感*词*ey是123 , 然后在这里填写 wb123) 。

  

  尚未结束

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

  #import "WeiboSDK.h"

  哒哒!您可以在 Swift 代码中引用 WeiboSDK。

  (其实如果WeiboSDK是框架的话,直接使用Swift的导入框架就可以导入了,不需要添加桥接文件,其他很多第三方库都用这种方式。)

  让我们先授权登录

  1. 集成微博SDK后,即可调用App中的微博客户端进行授权。在 AppDelegate.swift 文件中,添加以下代码:

  let a*敏*感*词*ey = "xxxxx" // 记得上面说过的 A*敏*感*词*ey 吧?填在这里

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {

// Override point for customization after application launch.

WeiboSDK.enableDebugMode(true)

WeiboSDK.registerApp(a*敏*感*词*ey)

return true

}

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

  2.只需在ViewController中添加登录授权按钮,在按钮的点击事件中发送微博授权请求即可:

  @IBAction func onLoginBtn(sender: AnyObject) {

let request = WBAuthorizeRequest.request() as? WBAuthorizeRequest

request?.redirectURI = redirectURI

request?.scope = "all"

WeiboSDK.sendRequest(request)

}

  这段代码的意思是每当按钮没有被点击时,向微博SDK发送一个WBAuthorizeRequest请求。如果您的手机上安装了微博客户端,它会跳转到微博应用程序请求授权。如果没有安装,会弹出一个网页,让您登录您的微博账号进行授权。

  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)\nresponse.userId: \((response as! WBAuthorizeResponse).userID)\nresponse.accessToken: \((response as! WBAuthorizeResponse).accessToken)\n响应UserInfo数据: \(response.userInfo)\n原请求UserInfo数据: \(response.requestUserInfo)"

let alert = UIAlertView(title: "认证结果", message: message, delegate: nil, cancelButtonTitle: "确定")

alert.show()

}

}

  由于本例中我们不需要处理微博发送给我们的消息,因此第一种方法为空。在第二种方法中,处理对 WBAuthorizeRequest 请求的响应 WBAuthorizeResponse。收到响应后,弹出窗口会显示结果。

  其实整个过程类似于UITableView的delegate或者datasource。当你调用reloadData方法时,UITableView会去你为数据指定的数据源,显示多少行,每行多高,每行显示什么内容等等,当你点击一行时,UITableView会通知你通过你设置的委托等等。

  4.真的是最后一个了!有什么不见了?对比一下UITableView,你会发现少了设置delegate这一步。如果你不把WeiboSDK的delegate设置为你指定的对象,它就不知道应该把这些消息发送给谁,就像UITableView一样。如果不设置数据源和委托,将无法正确显示结果。

  在 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 Types 中定义的。sourceApplication是com.sina.weibo,意思是新浪微博App想要打开我们的App。我们将这条消息转发给微博SDK进行处理,并将微博SDK的委托设置为 AppDelegate 类的对象(self)。(虽然我不明白毛应该在这里设置delegate,而不是在初始化时设置)。

  此时,当您运行App时,点击“登录”按钮,跳转到微博或弹出网页进行登录,然后返回App,应该会看到如下弹窗:

  

  如果没有意外,则认为授权完成,获取access_token,可以调用其他微博接口,比如获取用户信息,比如获取用户微博,比如发微博等等。下次坏了。

  完整项目及代码见微博Demo

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线