# 1. 集成SDK

(1)将下载的BaiduOAuthKit.framework文件添加到工程目录

(2)引入 BaiduOAuthKit.bundle 资源文件。选中工程目录,点击右键,选择【Add Files to “工程名” …】,选择 BaiduOAuthKit.framework/BaiduOAuthKit.bundle,单击 Add,将资源文件引入工程中;

(3)设置 Other Linker Flags。在工程 Build Settings 中,找到 Other Linker Flags,并添加 -ObjC

(4)设置工程回调URL Scheme,修改 info.plist 文件 URL types 项为自己的 sso 回调地址,”bd[你的应用程序的appid]”,例如:bd400086

(5)在“Info.plist”中将要使用的URL Schemes列为白名单

<key>LSApplicationQueriesSchemes</key>
<array>
	<string>bdoa-bdbox</string>
	<string>bdoa-mobimap</string>
	<string>bdoa-tb</string>
	<string>bdoa-netdisk</string>
	<string>bdoa-baiduhaokan</string>
</array>

# 2. 初始化SDK

在 AppDelete 的 application:didFinishLaunchingWithOptions: 方法内或者首页 UIViewController 的 viewDidLoad 方法内初始化 OAuth SDK,确保应用生命周期内初始化一次即可。调用以下方法进行初始化:

[BaiduOAuth registerApikey:YOUR_APIKEY appId:YOUR_APPID scope:YOUR_SCOPE redirectURI:YOUR_REDIRECTURI delegate:YOUR_DELEGATE];
参数 作用
YOUR_APIKEY 注册申请后得到
YOUR_APPID 注册申请后得到
YOUR_SCOPE 第三方应用需要申请的权限列表,使用分割
YOUR_REDIRECTURI 应用回调页,在进行 Oauth2.0 登录认证时所用。
YOUR_DELEGATE 当授权完成后,用来接收回调的对象。

# 3. 处理SSO授权回跳

重写AppDelegate 的handleOpenURL和openURL方法

- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url {
    return [BaiduOAuth handleOpenURL:url];
}
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation {
    return [BaiduOAuth handleOpenURL:url];
}

# 4. OAuth授权认证

调用[BaiduOAuth sendRequestWithConfig:] 方法调起授权认证。 oauthType默认为BDOAuthTypeDefault,调用后会检测是否安装百度系app。

  • 若已安装,跳转到百度系APP。如果当前百度系APP没有登录帐号,则进入登录界面;如果当前百度系APP已经有帐号,则进入授权页面。当授权完成后会回调给第三方应用程序。
  • 若未安装,在第三方APP内打开oauth授权登录页面,登录、授权完成后会回调给第三方应用程序。

若oauthType设置为BDOAuthTypeSSO,调用后会检测是否安装百度系app。

  • 若已安装,跳转到百度系APP。如果当前百度系APP没有登录帐号,则进入登录界面;如果当前百度系APP已经有帐号,则进入授权页面。当授权完成后会回调给第三方应用程序。
  • 若未安装,则回调失败。

若oauthType设置为BDOAuthTypeWeb,在第三方APP内打开oauth授权登录页面,登录、授权完成后会回调给第三方应用程序。

第三方实现BaiduOAuthDelegate监听此次请求的回调。

- (IBAction)btnClick:(id)sender { 
    BDOAuthConfig *config = [[BDOAuthConfig alloc] init];
    config.oauthType = BDOAuthTypeDefault;  
    config.state = @"your_state";
    [BaiduOAuth sendRequestWithConfig:config];
}

#pragma mark - BaiduOAuthDelegate
- (void)didReceiveBaiduResponse:(BDOAuthResponse *)response {
    NSLog(@"OAuth成功回调:%@", response);
}
- (void)didReceiveBaiduError:(NSError *)error {
    NSLog(@"OAuth失败回调:%@", error);
}

回调的参数有

/**
 code 开发者拿到code后,通过服务端换取token,code过期时间10分钟
 */
@property (nonatomic, copy) NSString *code;

/**
 调起授权前传入的state参数
*/
@property (nonatomic, copy) NSString *state;

code 换取 access_token 参考 code获取授权access_token

# 5. 错误码列表

错误码 含义
0 成功
-201 其他错误
-202 参数错误
-203 网络异常
-204 服务返回的异常
-205 用户取消
-206 SDK未初始化、初始化失败
-207 没有安装百度系app
-208 百度系app版本号太低
Last Updated: 2/28/2022, 10:45:02 AM