使用ShareSDK完成第三方(QQ、微信、微博)登录和分享
这几天遇到一个需求:做第三方登录和分享。遇到了一些坑,把整个过程整理记录下来,方便他人,同时也捋一下思路。
当时考虑过把每个平台的SDK下载下来,一个一个弄,一番取舍后决定还是用ShareSDK。这里只做了微博、微信和QQ。过程如下:
1.去ShareSDK官网注册一个账号方便以后对ShareSDK的配置。
2.按照集成文档的步骤开始做,不得不说这个集成文档里面有坑,有坑的地方我会指出。
3.添加一个应用。有很多种方式可以添加一个应用,多点点。这里我创建了一个test应用。
创建后进去的页面如下:
这里的App Key和App Secret(不显示的话,点击显示)很重要,可以用来初始化ShareSDK,
4.下载SDK。
这里是第一个坑,虽然你可以自定义下载SDK,如果你做QQ分享和登录,一定不要忘记下载QQ空间的SDK。因为QQ本身不支持第三方登录,但支持第三方分享包括QQ空间分享,QQ空间支持第三方登录,所以如果你做QQ分享和登录,一定要记得下载QQ空间的SDK。如果只做分享,那只下载QQ的就行。这里我被坑过,ShareSDK提供的文档里面没有说明。
下载后的SDK文件目录:
5.把下载的ShareSDK添加到项目中。
到现在为止运行项目是会报错的,原因是没有添加相关的依赖库。
6.添加相关的依赖库。
以下摘自ShareSDK提供的文档。
必须添加的依赖库如下:
SystemConfiguration.framework
QuartzCore.framework
CoreTelephony.framework
libicucore.dylib
libz.1.2.5.dylib
Security.framework
以下依赖库根据社交平台添加
新浪微博SDK依赖库 (从v2.10.5开始)
ImageIO.framework
QQ好友和QQ空间SSO必要(新注册腾讯开放平台帐号只支持SSO授权,只是老开发者才可以使用网页授权)
libstdc++.dylib
libsqlite3.dylib
添加相应依赖库后的项目结构是这个样子的:
到这里运行项目是不会报错的,如果报错,检查添加的依赖库是缺了、漏了、还是错了。
在AppDelegate.m中添加以下头文件,再运行项目看看,这是不会报错的,如果报错看提示信息,多搜索,相信是能够解决的。
#import <ShareSDK/ShareSDK.h>
#import <TencentOpenAPI/QQApiInterface.h>
#import <TencentOpenAPI/TencentOAuth.h>
#import "WXApi.h"
#import "WeiboSDK.h"
7.到相应开发者平台注册开发者账号,并添加你要进行分享和使用第三方登录应用的信息。
添加新浪微博应用 注册网址 http://open.weibo.com
添加QQ应用 注册网址 http://mobile.qq.com/api/
添加微信应用 http://open.weixin.qq.com
注意:这三家的开放平台,目前为止,页面做的都跟山寨网站似的(微信的好一点),奇卡无比。当然这不是吐槽的重点,重点是注册流程繁琐,还要认证开发者身份,需要等一个工作日。其中如果做微信登录的话,每年要交300元的什么费。这里没有什么难度就是个体力活,就不详说了,有什么疑问,请留言,你的留言也是对我的信任和支持。
注册完,申请完就可以拿到AppID、AppSecret、AppKey等东西。
注:QQ的AppKey在ShareSDK中叫AppSecret。名字不统一,这个比较扯淡。
拿到这些AppID、AppSecret、AppKey等东西后就可以开始对ShareSDK进行初始化。
在AppDelegate.m中添加下面这个方法,并记得在- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions方法中调用。
- (void)initShareSDK {
[ShareSDK registerApp:@"884a1b86xxxx"];
//对新浪微博SDK进行初始化
[ShareSDK connectSinaWeiboWithAppKey:@"406116xxxx"
appSecret:@"b6a542582057e39a6fca582b14dxxxxxx"
redirectUri:@"http://www.xxxx.com"];
//注这里的redirectUri要与你在新浪微博开放平台上填写的那个授权回调页的URL保持一致,否则在使用微博登录的时候会报一个redirectUri找不到的错误,这里是一个坑。
//突然发现这里redirectUri是什么鬼?难道ShareSDK的制作者敲错了?不应该是URL吗?
//QQ分享SDK初始化
[ShareSDK connectQQWithQZoneAppKey:@"110467xxxx"
qqApiInterfaceCls:[QQApiInterface class]
tencentOAuthCls:[TencentOAuth class]];
//QQ登录SDK初始化
[ShareSDK connectQZoneWithAppKey:@"1104677455"
appSecret:@"KnjAB2I0G8Vxxxxx"
qqApiInterfaceCls:[QQApiInterface class]
tencentOAuthCls:[TencentOAuth class]];
// 注:QQ登录的appSecret参数,是你在QQ开放平台是拿到的AppKey
//对微信SDK进行初始化
[ShareSDK connectWeChatWithAppId:@"wx02e84c8fa45xxxx"
appSecret:@"ef9006286ce2637caeb648cb58dxxxx"
wechatCls:[WXApi class]];
}
8.添加URL Schemes。
点击:项目名 > TARGETS > info > URL Types 点击添加URL Types。
如图:
在URL Schemes后面的框里添上对应信息。
新浪微博的URL Schemes是:wb 加上在微博开放平台申请的AppKey。
微信的URL Schemes是:微信开放平台申请的AppID。
QQ空间的URL Schemes是:QQ开放平台申请的 tencent 加上 AppID。(如果只做分享的话,可以不添加,做登录的话必须添加)
QQ的URL Schemes是:QQ 加上 AppID的16进制(如果AppID转换的16进制数不够8位则在前面补0,如转换的是:5FB8B52,则最终填入为:QQ05FB8B52 注意:转换后的字母要大写)
转换16进制的方法:echo 'ibase=10;obase=16;801312852'|bc,其中801312852为QQ的AppID,见下图:
添加完URL Schemes后,在AppDelegate.m文件中添加以下对URL处理的代码:
- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url
{
return [ShareSDK handleOpenURL:url wxDelegate:self];
}
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
{
return [ShareSDK handleOpenURL:url
sourceApplication:sourceApplication
annotation:annotation
wxDelegate:self];
}
到此第三方的准备工作就算是做完了。
9.写分享的代码。
(1)在界面上添加按钮,并绑定响应事件。
(2)写事件处理代码。
事件处理代码,如下:
- (void)thridPartyShareWithShareType:(ShareType)shareType {
//只需要在响应分享按钮的方法中添加以下代码即可
NSString *img = [[NSBundle mainBundle] pathForResource:@"mm" ofType:@"png"];
//构造分享内容
id<ISSContent> publishContent = [ShareSDK content:@"ShareSDK无比强大哦"
defaultContent:@""
image:[ShareSDK imageWithPath:img]
title:@"演示Demo中的标题"
url:@"http://www.mob.com"
description:@"测试DEMO正在制作中,欢迎大家观看"
mediaType:SSPublishContentMediaTypeNews];
[ShareSDK shareContent:publishContent
type:shareType
authOptions:nil
shareOptions:nil
statusBarTips:YES
result:^(ShareType type, SSResponseState state, id<ISSPlatformShareInfo> statusInfo, id<ICMErrorInfo> error, BOOL end) {
if (state == SSPublishContentStateSuccess)
{
NSLog(NSLocalizedString(@"TEXT_SHARE_SUC", @"发表成功"));
}
else if (state == SSPublishContentStateFail)
{
NSLog(NSLocalizedString(@"TEXT_SHARE_FAI", @"发布失败!error code == %d, error code == %@"), [error errorCode], [error errorDescription]);
}
}];
}
方法中的shareType参数传什么值就分享到什么平台:
ShareTypeSinaWeibo //新浪微博
ShareTypeQQSpace //QQ空间 (注意:填写这个类型就可以分享到好友和QQ空间,也可以用来做登录)
ShareTypeWeixiSession //微信好友 (这个类型也可以用来做微信登录)
ShareTypeWeixiTimeline //微信朋友圈
到这里分享就算是做好了。
10.写登录代码。(这里在ShareSDK的文档里,又有一个坑)
(1)在ShareSDK做第三方登录的文档里,这里要求去一个Parse的网站注册下载一大堆东西。并添加一堆依赖库,可这些并没有什么卵用。理由如下:
它让在应用了集成Parse,就是做一个对第三方平台返回的信息(id、nickname、profileImage)进行存储,可这些,我们都是存自己公司服务器的,做这些都是扯淡的,但文档里并没有说明。我靠,让我郁闷半天。
(2)在界面添加按钮,并绑定响应事件。
(3)写响应代码(以QQ登录为例,三个平台的代码是一样的,不同点在Type这个参数上)。
- (IBAction)QQLogin:(UIButton *)sender {
[ShareSDK getUserInfoWithType:ShareTypeQQSpace authOptions:nil result:^(BOOL result, id<ISSPlatformUser> userInfo, id<ICMErrorInfo> error) {
if (result) {
NSLog(@"%hhd", result);
NSLog(@"%@", [userInfo uid]);
NSLog(@"%@", [userInfo nickname]);
NSLog(@"%@", [userInfo profileImage]);
//在这里把拿到的userInfo里面的值做处理,存服务器或者什么的
UIAlertView *alertView = [[UIAlertView alloc]
initWithTitle:@"Hello"
message:@"欢迎注册"
delegate:nil
cancelButtonTitle:@"知道了"
otherButtonTitles: nil];
[alertView show];
} else {
UIAlertView *alertView = [[UIAlertView alloc]
initWithTitle:@"Hello"
message:@"欢迎回来"
delegate:nil
cancelButtonTitle:@"知道了"
otherButtonTitles:nil];
[alertView show];
}
}];
}
到这里第三方登录就算是做好了。
最后,退出登录授权使用一下代码。
[ShareSDK cancelAuthWithType:ShareTypeQQSpace]; //这里以QQ为例了
使用ShareSDK完成第三方(QQ、微信、微博)登录和分享的更多相关文章
- Python 第三方登录 实现QQ 微信 微博 登录
本人写的AgentLogin,能快速返回QQ.微信.微博第三方用户名信息,主要用于快速登录 用 pip命令安装 pip install AgentLogin 用法 : 导入这个包 from Agent ...
- TP QQ 微信 微博登录
use Org\Util\QQconnect; use Org\Util\Wechatauth; use Org\Util\SaeTOAuthV2; use Org\Util\SaeTClientV2 ...
- Oauth2.0 QQ&微信&微博实现第三方登陆
一.写在前面 目前对于大多数的App或Web网站都支持有第三方登陆这个功能,用户可使用 QQ/ 微信/ 微博 帐号快速登录你的网站,降低注册门槛,为你的网站带来海量新用户.最近在新项目上刚好用到了,在 ...
- 访问量分类统计(QQ,微信,微博,网页,网站APP,其他)
刚准备敲键盘,突然想起今天已经星期五了,有点小兴奋,一周又这么愉快的结束,又可以休息了,等等..我好像是来写Java博客的,怎么变成了写日记,好吧,言归正传. 不知道大家有没有遇到过这样的需求:统计一 ...
- 基于Qt下移动平台第三方接入-ShareSDK(新浪微博,微信朋友圈等分享登录)
一. ShareSDK简介 ShareSDK是为iOS.Android.WP8的APP提供社会化功能的一个组件,开发者只需10分钟即 可集成到自己的APP中,它不仅支持如QQ.微信.新浪微博.腾讯微博 ...
- android 集成QQ互联 (登录,分享)
参考:http://blog.csdn.net/syz8742874/article/details/39271117 http://blog.csdn.net/woblog/article/deta ...
- 关于在vue-cli中使用微信自动登录和分享
(以下所有接口由后台提供) 一.微信自动登录 //定义事件 methods:{ //判断是否微信登陆 是不是微信浏览器 isWeiXin() { let ua = window.navigator.u ...
- qq 微信 微博 第三方分享
<html> <head> <meta charset="utf-8"> <meta name="viewport" ...
- 分享-QQ/微信/微博(环境搭建)
QQ环境搭建
- QQ 微信 新浪 无法 分享 收集
1.网络请求报错.升级Xcode 7.0发现网络访问失败.输出错误信息 The resource could not be loaded because the App Transport Secur ...
随机推荐
- Servlet字符编码过滤器
在Java Web程序开发中,由于Web容器内部使用编码格式并不支持中文字符集,所以,处理浏览器请求中的中文数据就会出现乱码的现象.由于Web容器使用了ISO-8859-1的编码格式,所以在Web应用 ...
- NLP 依存分析
NLP 依存分析 https://blog.csdn.net/sinat_33741547/article/details/79258045
- Java基础(四):Java Number & Math 类、Character 类、String 类、StringBuffer & StringBuilder 类
一.Java Number & Math 类: 1.Number类: 一般地,当需要使用数字的时候,我们通常使用内置数据类型,如:byte.int.long.double 等.然而,在实际开发 ...
- scala 学习笔记十 一 伴生对象
1.介绍 a.所谓伴生对象就是和某个class同名的object, 并且object 必须和class在同一个scala源文件中. b.在scala中,没有像java中的静态类,静态方法和静态成员等, ...
- 强连通tarjan模版
#include<stdio.h> #include<iostream> #include<math.h> #include<queue> #inclu ...
- Configuring Time in Windows 7 and Win 200
http://www.windowsnetworking.com/articles-tutorials/windows-7/Configuring-Time-Windows-7-Win-2008-R2 ...
- Qtcreator中常用快捷键总结
F1 查看帮助F2 跳转到函数定义(和Ctrl+鼠标左键一样的效果)Shift+F2 声明和定义之间切换F4 头文件和源文件之间切换Ctrl+1 ...
- https://leetcode-cn.com/
https://leetcode-cn.com/ 码,马不停蹄,码不停题 英文版:https://leetcode.com/
- 【nodejs】修改了下对股票表进行crud操作的代码
表是这样的: id是自增长字段,code和name都是255位的varchar. 下面是主角app.js的代码: 'use strict'; var express=require('express' ...
- STL - 容器 - List
List内部结构完全不同于array, vector, deque. 它提供了两个pointer,指向第一个和最后一个元素. 不支持随机访问元素,因此要访问第n个元素必须爬过n - 1个元素. 在任何 ...