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

优采云 发布时间: 2021-06-21 05:38

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

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

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

  微博开发者帐号

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

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

  

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

  

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

  SDK 集成

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

  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'

  配置网址架构

  如前所述,微博SDK可以与您手机上的微博客户端进行交互(例如,您在应用程序中单击一个按钮后,直接跳转到微博应用程序中的微博应用程序)。发完这个页面,我又回到了微博。其他的比如跳微信发消息,跳支付宝付钱等等都是一样的。)有兴趣的可以看看应用间通讯。为此,我们需要配置项目的 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的导入框架就可以导入了,不需要添加桥接文件,其他很多第三方库都用这种方式。)

  先授权登录

  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;

  第一个用于处理微博客户端发送的请求,第二个用于处理自己发送的请求的响应消息,比如我们刚刚发送的授权请求,它会是一个结果Deal在第二种方法中使用它。

  我们可以让 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会去你为数据指定的datasource,显示多少行,每行多高,每行显示什么内容等,当你点击某一行时,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是我们在URL Types中定义的,sourceApplication是com.sina.weibo,表示新浪微博App想要打开我们的App,我们将这条消息转发给WeiboSDK进行处理,并设置WeiboSDK的delegate对象AppDelegate 类(自我)。 (虽然我不知道这里怎么给毛设置delegate,而不是在初始化的时候设置)

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

  

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

  完整项目和代码见微博Demo

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线