使用新浪微博开放平台api同步微博内容至自己网站(给新手的微博SDK集成教程()微博)

优采云 发布时间: 2022-04-16 15:25

  使用新浪微博开放平台api同步微博内容至自己网站(给新手的微博SDK集成教程()微博)

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

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

  微博开发者账号

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

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

  

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

  

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

  SDK 集成

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

  可可豆荚

  CocoaPods 是一个 iOS 开发的依赖管理工具。什么是依赖?例如,如果您开发一个需要使用微博 SDK 的 App,您的 App 依赖于微博 SDK。在实际项目中,可能会依赖十几个甚至更多的第三方库。如果每个都像微博SDK的手动集成一样集成,会很麻烦,不利于维护。于是神器CocoaPods就诞生了。总之,你只需要维护一个配置文件,里面列出了你需要集成哪些第三方库,然后运行一个命令,CocoaPods 会自动从网上下载相关文件,然后自动帮你配置整个项目。

  安装 CocoaPods

  CocoaPods 是用 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

  将微博 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中的微博发送页面,发完后又回来了)微博。其他如跳转微信发消息、跳转支付宝付钱等),有兴趣的可以看看Inter-App Communication。为此,我们需要配置项目的 URL Schemes。如下图,在项目的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的import框架来导入,不用添加桥接文件,其他很多第三方库都是这样的。)

  让我们授权登录

  1.集成微博SDK后,您可以在应用中调用微博客户端进行授权。在 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请求。如果你的手机上安装了微博客户端,它会跳转到微博App并请求授权。如果没有安装,会弹出一个网页,让你登录你的微博账号进行授权。

  3.这还不够,还需要处理请求的返回结果,发送请求后无法完成请求。WeiboSDK 使用 Cocoas 开发中常用的委托方式来处理请求的结果响应,也就是说,您的请求发出后,响应的结果会在您设置的委托中通知您。这个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 一样。,如果不设置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类的一个对象(自己)。(虽然我不明白为什么要在这里为毛设置委托,而不是在初始化时)。

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

  

  如无意外,授权完成,可以使用access_token调用其他微博接口,比如获取用户信息,比如获取用户微博,比如发送微博等,下次分解。

  完整的工程和代码见微博Demo

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线