在日常的app开发中,我们经常会遇到第三方登录和分享的问题,比如我们的微信、qq的分享和登录。再遇到这些问题的时候,我们通常是通过官方的文档去实现相应的功能,但是这也造成了我们代码的繁琐和重复。所以在这个背景下shareSDK被制作出来。
官方网址:http://wiki.mob.com
官方介绍:ShareSDK是一种社会化分享组件,为iOS、Android、WP8 的APP提供社会化功能,集成了一些常用的类库和接口,缩短开发者的开发时间,还有社会化统计分析管理后台。
通过shareSDK我们可以实现第三方登录和一键分享。
同时shareSDK是支持多平台的,这里我们说的是iOS平台的使用。
我们通过项目中的代码来演示:
- 第一步:配置shareSDK
我们通常会选择快速集成sdk,也就是将下载的SDK解压后导入到您的工程中。
这里你点击官方文档查看,解释的还是很详细的快速集成链接
- 第二步:添加实现代码
#import "AppDelegate.h"
//微信SDK头文件
#import "WXApi.h"
//新浪微博SDK头文件
#import "WeiboSDK.h"
#import <TencentOpenAPI/TencentOAuth.h>
#import <TencentOpenAPI/QQApiInterface.h>
//ShareSDK
#import <ShareSDK/ShareSDK.h>
#import <ShareSDKConnector/ShareSDKConnector.h>
//导入头文件并初始化注册第三方平台
NSArray *activePlatforms =@[
@(SSDKPlatformTypeSinaWeibo),
@(SSDKPlatformTypeQQ),
@(SSDKPlatformTypeWechat),
@(SSDKPlatformSubTypeWechatSession),
@(SSDKPlatformSubTypeWechatTimeline)
];
[ShareSDK registerActivePlatforms:activePlatforms onImport:^(SSDKPlatformType platformType) {
switch (platformType)
{
case SSDKPlatformTypeWechat:
[ShareSDKConnector connectWeChat:[WXApi class]];
break;
case SSDKPlatformTypeQQ:
[ShareSDKConnector connectQQ:[QQApiInterface class] tencentOAuthClass:[TencentOAuth class]];
break;
case SSDKPlatformTypeSinaWeibo:
[ShareSDKConnector connectWeibo:[WeiboSDK class]];
break;
default:
break;
}
} onConfiguration:^(SSDKPlatformType platformType, NSMutableDictionary *appInfo) {
switch (platformType)
{
case SSDKPlatformTypeSinaWeibo:
//设置新浪微博应用信息,其中authType设置为使用SSO+Web形式授权
[appInfo SSDKSetupSinaWeiboByAppKey:@""
appSecret:@""
redirectUri:@""
authType:SSDKAuthTypeBoth];
break;
case SSDKPlatformTypeWechat:
[appInfo SSDKSetupWeChatByAppId:@""
appSecret:@""];
break;
case SSDKPlatformTypeQQ:
[appInfo SSDKSetupQQByAppId:@""
appKey:@""
authType:SSDKAuthTypeBoth];
break;
default:
break;
}
}];
- 第三步:实现第三方登录 官方-第三方登录
方法一:authorize:授权,可以获取到授权信息和用户信息,每次都会重新请求授权登录界面,进行跳转
#import <ShareSDK/ShareSDK.h>
[ShareSDK authorize:SSDKPlatformTypeQQ settings:nil onStateChanged:^(SSDKResponseState state, SSDKUser *user, NSError *error) {
if (state == SSDKResponseStateSuccess)
{
NSLog(@"%@",user.rawData);
NSLog(@"uid===%@",user.uid);
NSLog(@"%@",user.credential);
}
else if (state == SSDKResponseStateCancel)
{
NSLog(@"取消");
}
else if (state == SSDKResponseStateFail)
{
NSLog(@"%@",error);
}
}];
方法二:getUserInfo:获取授权用户信息,第一次授权会请求授权界面,之后会默认第一次的授权,直接获取到缓存里的用户信息,不会在跳授权登录界面,如果要重新跳转授权界面,需要调用取消授权的接口
[ShareSDK getUserInfo:SSDKPlatformTypeQQ onStateChanged:^(SSDKResponseState state, SSDKUser *user, NSError *error){
if (state == SSDKResponseStateSuccess){
[ShareSDK cancelAuthorize:SSDKPlatformTypeAny];(目前这个方法已经更新)
NSDictionary *parameters = @{
@"access_token":user.credential.token,
@"openid":user.uid
};
//请求的接口
}
else if (state == SSDKResponseStateCancel)
{
NSLog(@"取消");
}
else if (state == SSDKResponseStateFail)
{
NSLog(@"%@",error);
}
}];
注意:如果上面方法不去取消平台的授权那么每次都会登录第一个的账号。
取消分享平台授权
/* @param platformType 平台类型 */
+ (void)cancelAuthorize:(SSDKPlatformType)platformType result:(void(^)(NSError *error))result;
[ShareSDK cancelAuthorize:SSDKPlatformTypeFacebook result:^(NSError *error) {
if (!error) {
NSLog(@"取消成功");
}
else
{
NSLog(@"%@",error);
}
}];