【淘宝账号】请咨询淘宝客服进行密码找回,【点击咨询】
【UC账号】请走账号申诉流程找回,【账号申诉】
*若申诉失败,请进行“开发者认领”。

阿里分发平台开发者违法违规处置及申诉流程
一、开发者违法违规处置标准
| 序号违法违规处置内容次数阈值处置时间 1开发者注册时提交用户资料存在虚假信息,提醒无修改 3次永久 2重复提交盗版、侵权、山寨、有害的应用3次永久 3同一用户提交内容、功能雷同或几乎完全一致的应用3次永久 4提交彩票售卖、赌博类等政策不允许收录的应用1次永久 5应用证明材料提交伪造软件著作权或伪造公章2次1个月 6提交应用未按回复上传、补充资质重复提交 连续3次累计5次1个月 7提交被主流杀毒软件提示病毒或风险的应用连续3次累计5次1个月 8提交含有恶意弹窗广告应用连续3次累计5次1个月 9其他危害较低违规,重复提醒无效 连续3次累计5次1个月 |
二、开发者违法违规影响范围
开发者被处置期间,以下关联对象或业务将会受到影响:
1. 该开发者不能提交、更新应用等;
2. 该开发者名下应用将会同步下线;
3. 该开发者信息不支持开发者认领;
4. 该开发者关联的实名制信息不支持换绑。
三、解除处置流程适用对象
处置时间非永久,违规操作危害性较小、态度良好,有改正意愿,配合提供整改声明
四、邮件申请解除处置过程
申请开发者账号解除处置:请将相关信息提交邮箱 aliappdev@service.alibaba.com,我们将在3个工作日内处理,处理完毕后将邮件回复。
邮件标题:开发者账号解除处置申请+公司名称/个人名称
正文内容:
1、开发者账号被处置原因(必填)
2、注册营业执照号/身份证+公司名称/个人名称,请求开发者账号解除处置
附件:
1、企业开发者:营业执照
2、个人开发者:露出手臂的手持身份证正面半身照
3、整改报告(企业开发者需加盖公章)(点击下载并填写该模板)
报告内容包含:
违规行为,被处置原因
违规认识
整改措施
声明(接受平台规定,保证不再出现违规操作)
阿里分发平台开发者实名认证教程
一、开发者实名认证简介
根据国家网信办颁布的《移动互联网应用程序信息服务管理规定》,阿里应用分发开放平台按规定实行开发者实名制认证管理,开发者账号运营者需登录阿里应用分发开发平台进行实名认证,点击平台右上角的“开发者实名认证”并使用手机支付宝APP扫描二维码,根据提示进行相关操作,并按流程上传运营人员的身份证正反面照片,然后进行人脸识别验证。
二、开发者实名认证操作流程
提示:开发者实名认证前请准备好身份证、手机、已实名的支付宝帐号。
1、在阿里应用分发开放平台完成开发者注册流程后,登录帐号。
2、点击右上角登录账号,下拉点击“开发者实名认证(未认证)”进入认证页面。
3、出现二维码扫描页面,需打开手机支付宝扫一扫扫描二维码。
4、根据提示扫描身份证正反面,完成后确认并提交相关身份信息。
5、根据提示进行“采集本人人脸”的操作,采集成功后回到电脑端刷新页面即完成实名认证,无需等待审核。
6、刷新后可看到是否已经实名认证成功,若需要更换实名制认证可点击进行操作。
三、开发者实名认证常见问题
1、如果不实名认证,可以提交应用或者更新应用吗?
答:从2018年2月7日起,如未进行实名认证,将无法提交应用,也无法编辑更新应用,请尽快完成实名认证。
2、实名认证支持企业支付宝认证吗?
答:实名认证对象是软件发布者这一行为人,因此不支持企业支付宝认证,仅支持个人支付宝进行认证,且实名认证的对象不限定身份,可使用公司法人、应用负责人或其他相关人员的支付宝进行认证。
3、实名认证后的信息会发生泄露吗?
答:根据《移动互联网应用程序信息服务管理规定》的要求,阿里应用分发开放平台开展的实名认证严格按照相关法律法规执行,不会造成个人信息泄露。
4、实名认证需要收费吗?认证完成后有效期是长期的吗?
答: 实名认证不收取任何费用(平台以及认证的个人支付宝都不会产生任何扣费),且认证完成后长期有效。
5、实名认证后的身份信息支持更换吗?
答:实名认证后的身份信息支持更换,只需使用新的支付宝账号进行认证,不需要原支付宝账号进行任何操作。如果运营人员发生变更,请尽快按照以下步骤更换绑定。
点击右上角登录账号,下拉点击“开发者实名认证(已认证)”进入认证页面,点击更换实名制认证即可。
6、开发者账号被封停后,该开发者关联的实名制信息支持换绑吗?
答:开发者账号被封停后,该开发者关联的实名制信息不支持换绑。
7、已经提交了开发者资料为什么还需使用个人支付宝进行实名认证?实名认证与开发者注册有什么区别吗?
答: 开发者注册提交的资料信息是对开发者主体进行审核认证,属于账号主体注册,而实名认证对象是该开发者主体所对应的具体软件发布行为人,属于软件发布者实名。只有开发者注册的账号通过了审核,在使用该账号发布软件时,才需要对软件发布者进行实名认证,且只需认证一次,后续即可进行软件的发布、更新维护等操作。
阿里分发平台开发者注册流程
一、开发者注册流程
注册淘宝账号 → 使用淘宝账号登录开放平台 – 进行开发者信息认证
注意:如已有淘宝账号,无需重新注册,可直接登录。
二、注册淘宝账号
1、点击平台主页右上角“注册”,进入“淘宝账号注册页面”注册淘宝账号。
注意:本平台新注册账号仅支持使用淘宝账号作为登陆账号,账号使用需遵循淘宝网规定,如注册认证或登录账号环节出现异常,可联系淘宝账号客服查询具体异常原因,不便之处敬请见谅。
三、开发者信息认证
1、登陆开放平台(https://open.9game.cn/login )
同“注册账号入口”,可在首页选择右上方的“登陆”登陆开放平台
2、选择开发者类型
点击 应用分发 – 安卓应用管理 – 选择注册开发者类型:企业开发者/个人开发者,填写信息即可。
注意,类型选择后不支持再变更,选择企业开发者后不支持再变更为个人开发者,个人开发者可升级为企业开发者类型。
3、填写开发者信息
(1)企业开发者
第一步、填写基本信息
上传营业执照注意事项:
(1)请提交营业执照原件照片或扫描件,若是复印件,需加盖公司红色印章。
(2)请勿遮挡营业执照边缘部分,请上传一张完整的清晰证照,谢谢。
(3)证件不能含有专项使用说明字样或水印,否则无法用于阿里应用开发者认证。
第二步、填写正确联系方式
(2)个人开发者
第一步、填写基本信息
上传身份证扫描件注意事项:
(1)本人手持身份证正面照;(重要)
(2)照片内持证人五官清晰可见;
(3)照片内所持身份证需为正面,且信息完整清晰,无遮挡;
(4)照片内完整露出持证手臂;(重要)
(5)照片没有任何修改痕迹;
(6)姓名,性别,身份证号码务必真实.
第二步、填写正确联系方式
阿里应用分发平台介绍
一、平台概述
「阿里应用分发」整合豌豆荚、阿里游戏·九游、PP助手、UC应用商店、神马搜索,并联合YunOS应用商店等应用分发平台,共同实现全流量矩阵布局。
二、平台理念
踏实做好行业的“里子”,让开发者安心做“面子”。
依托更雄厚的资源、做好更全面的服务、打造更适合中国安卓开发者的开放平台。
我们是年轻的品牌,各位是年轻的行业力量,我们愿与诸位一同成长,共赢未来。
三、渠道资源
阿里应用分发开放平台整合豌豆荚、PP助手、阿里游戏、YunOS 应用商店、UC应用商店、神马搜索6大亿级产品矩阵,实现「一点接入,全平台分发」,只要接入一个开放平台即可共享六大亿级平台海量资源。
1、UC应用商店
针对用户手机应用过多、追求更便捷轻量的操作体验痛点,基于移动互联网而推出的轻便WAP端应用市场。入口常驻UC浏览器九宫格,坐拥UC浏览器5亿用户、过亿日活用户流量和大数据。
【产品网址】http://m.pp.cn/home.html
2、PP助手安卓版
延续PP助手IOS端的强大品牌口碑,为安卓手机用户提供资源丰富、操作流畅的产品体验,同时提供全方位跟进的服务体验。并接入支付宝备受追捧的集分宝货币,成为首款能赚钱的应用市场。
【产品网址】http://pro.25pp.com/pp_android
3、神马搜索
无缝对接被UC浏览器等众多优质产品指定为官方移动搜索引擎的中国第二大移动搜索引擎——神马搜索,依托神马搜索首创的APP化“蓝光搜索模式”、场景化搜索等众多领先搜索技术,以及其不断增长的移动搜索市场份额,牢牢抓住移动搜索的海量流量,进行应用精准曝光,获得超乎想象的高转化率。
【产品网址】http://m.sm.cn/
4、阿里巴巴·九游
与阿里巴巴·九游强强联合,由阿里巴巴·九游为PP助手提供游戏接入、评测、预热、活动运营等联运服务,坐拥九游近亿月活跃游戏用户,进一步提高游戏发行能力。
【产品网址】http://app.9game.cn/
5、豌豆荚
豌豆荚是中国知名的安卓应用商店。 2016 年 7 月,豌豆荚正式并入阿里巴巴移动事业群。 从 2010 年发布至今。豌豆荚始终坚持着用精湛的技术和精良的设计,让用户更为简单地把应用、 音乐、资讯等优质应用、内容放进手机里,成功帮助 5 亿用户发现了更大更美好的世界。 “从解决问题,到完美地解决问题”,是豌豆荚思考与行动的起点,也是豌豆荚的核心竞争力。
【产品网址】https://www.wandoujia.com/
四、推广服务
1、首发推广:全程线上化申请,包含新产品首发/更新首发、独家/联合多样的首发合作方式,长达5天的首发专区展示,直观醒目的首发角标,享受海量免费推广资源。
2、福利活动:通过应用发放福利特权从而刺激用户下载、安装应用。实现下载和安装转化率双重飙升,增强品牌认知。福利越多,收获越大。
3、竞价广告:无需排期,随到随推广;严格去重,保证投放效果 账户可控,把握投放节奏;数据透明开放,随时查看。
4、开发者与PP助手开放平台互相利用自身资源推广对方产品的合作形式。一般以激活量(CPA)来计算,根据换量产品不同略有差别。可换量产品:PP助手安卓版、UC浏览器、九游、书旗小说。
5、付费推广:提供按下载付费(CPD)为主,辅以CPA、CPT的合作模式,覆盖渠道包括不限于PP助手客户端,UC应用商店,神马搜索,超高性价比。
五、移动开发服务
1、联合阿里聚安全、阿里移动质量中心,免费体验APP稳定性、兼容性等综合测试功能,以及强大的风险扫描、应用加固、安全组件,让、支付宝级别的强大安全服务为你的APP安全护航。
2、联合阿里云、阿里大于,版权家,专业定制化的云服务场景、海量稳定云服务器,快速的软件资质申办渠道,优质便捷的云通信服务,为广大开发者解决应用推广过程中遇到的痛点难点。
六、优质应用扶持计划
闪屏推荐、活动曝光、品牌营销、内容共创
更多问题咨询请关注官方微信了解。
如何给APP集成OAID获取OAID的SDK集成
1.登录http://www.msa-alliance.cn/mCenter.jsp注册账号;注册账号之后等待1天或者半天,之后才能登录,之后上传自己公司营业执照,之后再耐心等待人家的审核。
根据 MSA 的要求,下载 SDK 和集成文档前需要注册一个企业账户,这一步按照指引提交相关信息和资料即可,一般 1~2 个工作日就可以审核通过。
注册账号
上传营业执照等待审核
2.下载SDK
下载链接地址:http://www.msa-alliance.cn/col.jsp?id=120
如果提示不能下载,需要注册账号和认证账号!
从 v1.0.26 开始,SDK 引入了证书校验机制,每个 APP 都需要申请一个证书文件(包名.cert.pem),并且只有包名与证书匹配的 APP 才能正常获取补充设备 ID。默认证书的有效期为 1 年,证书过期也会影响获取补充设备 ID。因此你还需要根据实际场景需要设计证书更新机制,比如在应用中内置一个默认证书,并应用开到期时提前从后台服务器更新证书。申请证书需要向 msa@caict.ac.cn 发送申请邮件,并附带表格 example_batch.csv,例如:
企业账号注册并审核通过后,就可以从官网下载到相关资料了(因为 MSA 禁止第三方违规分发 SDK,所以小伙伴们还是得自己去下载)。
之后就可以拿到SDK进行设置了!
开发集成进自己的APP就可以,直接将SDK拖到库里面进行定义封装即可。
QQ互联SDK隐私保护声明,如果APP有使用到QQ分享登录等SDK能力需要在隐私协议做三方SDK申明,并列出QQsdk的协议地址
试列:
三方SDK申明
SDK名称:QQ互联SDK
读取权限:操作系统信息、设备型号信息、剪切板信息、内存卡权限、应用列表信息
隐私协议地址:https://wiki.connect.qq.com/qq%e4%ba%92%e8%81%94sdk%e9%9a%90%e7%a7%81%e4%bf%9d%e6%8a%a4%e5%a3%b0%e6%98%8e
QQ互联UnionID介绍
此接口用于获取个人信息。开发者可通过openID来获取用户的基本信息。特别需要注意的是,如果开发者拥有多个移动应用、网站应用,可通过获取用户的unionID来区分用户的唯一性,因为只要是同一QQ互联平台下的不同应用,unionID是相同的。换句话说,同一用户,对同一个QQ互联平台下的不同应用,unionID是相同的。(已支持官网自助获取:点此查看操作指引)
https://graph.qq.com/oauth2.0/me?access_token=ACCESSTOKEN&unionid=1
| 参数 | 是否必需 | 说明 |
|---|---|---|
| access_token | 是 | 用户凭证 |
| unionid | 否 | 是否申请unionID |
| fmt | 否 | 因历史原因,默认是jsonpb格式,如果填写json,则返回json格式 |
返回说明:
正确的返回结果(如果fmt参数未指定json)
callback(
{
"client_id":"YOUR_APPID",
"openid":"YOUR_OPENID",
"unionid":"YOUR_UNIONID"
}
);
错误的(如果fmt参数未指定json)返回示例
callback(
{
"error":100016,
"error_description":"access token check failed",
}
);
| 错误码 | 描述 | 说明 |
|---|---|---|
| 100016 | access token check failed | 用户凭据过期(30天)或者不正确 |
| 100048 | companyid not set | 未申请unionID接口调用权限,请邮件申请 |
调用获取unionID信息接口的示例代码如下
private void getUnionId() {
if (mTencent != null && mTencent.isSessionValid()) {
IUiListener listener = new IUiListener() {
@Override
public void onError(UiError e) {
Toast.makeText(MainActivity.this,"onError",Toast.LENGTH_LONG).show();
}
@Override
public void onComplete(final Object response) {
if(response != null){
JSONObject jsonObject = (JSONObject)response;
try {
String unionid = jsonObject.getString("unionid");
Util.showResultDialog(MainActivity.this, "unionid:\n"+unionid, "onComplete");
Util.dismissDialog();
}catch (Exception e){
Toast.makeText(MainActivity.this,"no unionid",Toast.LENGTH_LONG).show();
}
}else {
Toast.makeText(MainActivity.this,"no unionid",Toast.LENGTH_LONG).show();
}
}
@Override
public void onCancel() {
Toast.makeText(MainActivity.this,"onCancel",Toast.LENGTH_LONG).show();
}
};
UnionInfo unionInfo = new UnionInfo(this, mTencent.getQQToken());
unionInfo.getUnionId(listener);
} else {
Toast.makeText(this,"please login frist!",Toast.LENGTH_LONG).show();
}
}
返回说明:
正确的返回结果
{
"client_id":"YOUR_APPID",
"openid":"YOUR_OPENID",
"unionid":"YOUR_UNIONID"
}
(三)IOS_SDK 请求方式:
调用获取unionID信息接口的示例代码如下
BOOL bRet = [[[sdkCall getinstance] oauth] RequestUnionId];
if (!bRet) {
UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"提示" message:@"信息不足,请先登录。"
delegate:nil cancelButtonTitle:@"好的" otherButtonTitles:nil, nil];
[alertView show];
__RELEASE(alertView);
}
返回说明:
如果获取成功会在TencentLoginDelegate的didGetUnionID回调中回调,最后在oauth实例中获取,正确的返回结果
NSString *result = [NSString stringWithFormat:@"获取成功 appid = %@,\n openid = %@,\n unionid = %@", [[sdkCall getinstance].oauth.appId], [sdkCall getinstance].oauth.openId, [sdkCall getinstance].oauth.unionId];
| 说明 | |
|---|---|
| client_id | 应用唯一标识 |
| openid | QQ用户在应用的唯一账号标识,同一个用户在不同应用的openid不一样。 |
| unionid | QQ用户在开发者在多个应用间(打通后)的标识,打通后,不同应用的unionid一样 |
(1)开发者应该注意保存openID、unionID信息,以便以后在不同应用之间进行用户信息互通;
(2)同一开发者名下最多支持60个应用进行UnionID打通,请开发者申请时注意;
(3) unionID至少是36个字节长度,建议开发者预留64字节存储空间。
QQ 互联UnionID打通业务自助处理指引
QQ互联UnionID打通业务已支持在互联官网(connect.qq.com)自助申请。
通过QQ互联邮箱渠道申请的打通业务,将于2019年9月2日停止服务,请有相关需求的开发者请到QQ互联官网进行申请,感谢您的支持与配合!
操作流程指引:
1. 应用所属的开发者帐号登录互联官网 connect.qq.com 进入应用管理界面;
2. 对需要进行UnionID打通的应用进行【查看】操作(该应用审核状态必须为“通过”);
3. 选择【应用接口】,在Unionid一栏选择【申请】,等待审核获取;
4. 接口获取成功。
UnionID介绍:https://wiki.connect.qq.com/unionid%e4%bb%8b%e7%bb%8d
QQ三方授权登录access_token过期后怎么处理?
access_token过期调用接口时,平台会返回错误码为100014的错误,此时需要引导用户重新进行授权。建议在每次获得用户授权时保存过期时间,在每次调用接口前判断用户access_token是否过期。
token过期时间为30天。如果存储的access token过期,请重新走登录流程,通过Authentication_Code 获取新的access token值。
后续access_token后续会支持自动续期,请开发者继续关注。
如果有任何疑问请联系企业QQ:800030681。
在实现OAuth2.0协议时应该注意什么?
答:建议使用QQ互联提供的SDK。如果没有合适的语言版本,请注意server-side模式的Step1中的state参数的处理:
1.在发起授权流程生成state参数时,要保证随机生成,并且尽量避免重复。例如:state= MD5(时间戳+当前帐号)。
2.生成后要和当前登录的用户进行绑定。这里建议两种实现方式:
1)把state放在用户的cookie中;
2)把state放在该用户在服务端的session里。
3.在Step1请求Authorization Code时必须传递state参数。
4.腾讯服务器在响应Step1的请求后,将重定向到开发者的服务器。此时开发者的服务器应检测state参数是否一致(即cookie或session里的state)。如果不一致,开发者的服务器应该拒绝此请求,并且不再发起换取access_token的请求。如果一致,则流程正常运行。
强烈建议开发者实现以上过程,以防止CSRF攻击。
实现QQ三方授权登录教程 开发攻略_Client-side
本开发攻略适用于使用Implicit Grant方式获取Access Token的授权验证流程,适用于需要通过客户端访问的方式,例如需要通过浏览器的javascript代码,或者电脑/移动终端上的客户端访问时。
阅读本开发攻略前,请阅读使用Implicit Grant方式获取Access Token以了解认证流程。
1. 浏览器访问:http://qzs.qq.com/qzone/openapi/client.html 。
2. 点击页面中的“登录”按钮:
3. 在弹出的登录框中输入QQ帐号和密码:
4. 登录成功后,跳转到指定的回调地址,URL中带有Access Token:
1. 请确保您的网站已经提交接入QQ登录的申请,并成功获取到appid和appkey。申请接入
2. 请在你的服务器上ping graph.qq.com ,保证网站和互联的连接畅通。
网站需要下载“QQ登录”按钮图片,并按照UI规范将按钮放置在页面合适的位置。
按钮图标下载
按钮放置规范
1. 打开浏览器,访问如下地址(请将client_id,redirect_uri,scope等参数值替换为你自己的):
2. 跳转登录授权页,如下图所示:
3. 如果用户点击“授权并登录”,则成功跳转到指定的redirect_uri,并在URL后加“#”号,带上Access Token以及expires_in等参数。如果redirect_uri地址后已经有“#”号,则加“&”号,带上相应的返回参数。
例如回调地址是:www.qq.com,则会跳转到:
http://www.qq.com/?#access_token=YOUR_ACCESS_TOKEN&expires_in=3600
特别提示:
1. 请求时传入的recirect_uri必须与注册时填写的回调地址一致,用来进行第三方应用的身份验证。
2. 可通过js方法:window.location.hash来获取URL中#后的参数值,详见下面的示例代码。
3. 建议用js设置cookie存储token。
4. 获取到的access token具有30天有效期,用户再次登录时自动刷新。
1. 发送请求到如下地址(请将access_token等参数值替换为你自己的):
https://graph.qq.com/oauth2.0/me?access_token=YOUR_ACCESS_TOKEN
2. 获取到用户OpenID,返回包如下:
callback( {"client_id":"YOUR_APPID","openid":"YOUR_OPENID"} );
1. 建议网站在用户登录后,即调用get_user_info接口,获得该用户的头像、昵称并显示在网站上,使用户体验统一。
2. 调用其他OpenAPI,以访问和修改用户数据。所有OpenAPI详见API列表。
以调用get_user_info接口为例:
(1)发送请求到get_user_info的URL(请将access_token,appid等参数值替换为你自己的):
(2)成功返回后,即可获取到用户数据:
{
"ret":0,
"msg":"",
"nickname":"YOUR_NICK_NAME",
...
}
下面给出了一个JavaScript的样例(只需要按照注释修改部分代码即可运行)
<html>
<head>
<title>Client Flow Example</title>
</head>
<body>
<script>
function callback(user)
{
var userName = document.getElementById('userName');
var greetingText = document.createTextNode('Greetings, '+ user.openid + '.');
userName.appendChild(greetingText);
}
//应用的APPID,请改为你自己的
var appID = "YOUR_APP_ID";
//成功授权后的回调地址,请改为你自己的
var redirectURI = "http://qzs.qq.com/qzone/openapi/success.html";
//构造请求
if (window.location.hash.length == 0)
{
var path = 'https://graph.qq.com/oauth2.0/authorize?';
var queryParams = ['client_id=' + appID,'redirect_uri=' + redirectURI,'
scope=' + 'get_user_info,list_album,upload_pic,add_feeds,do_like','response_type=token'];
var query = queryParams.join('&');
var url = path + query;
window.open(url);
}
else
{
//获取access token
var accessToken = window.location.hash.substring(1);
//使用Access Token来获取用户的OpenID
var path = "https://graph.qq.com/oauth2.0/me?";
var queryParams = [accessToken, 'callback=callback'];
var query = queryParams.join('&');
var url = path + query;
var script = document.createElement('script');
script.src = url;
document.body.appendChild(script);
}
</script>
</body>
</html>
为了让应用更快接入,腾讯提供了JS SDK,应用只需引入js脚本,再进行少量的代码修改,即可接入QQ登录,过程非常简单快速。
详见:
JS SDK使用说明
网站实现QQ三方授权登录 开发攻略_Server-side
本开发攻略基于使用Authorization Code获取Access Token的授权验证流程,适用于需要从web server访问的应用,例如Web/wap网站。
阅读本开发攻略前,请阅读使用Authorization Code获取Access Token以了解认证流程。
注:
本体验基于无Server端模式,但体验效果与有Server端模式一致。
1. 浏览器访问:http://qzs.qq.com/qzone/openapi/client.html 。
2. 点击页面中的“登录”按钮:
3. 在弹出的登录框中输入QQ帐号和密码:
4. 登录成功后,跳转到指定的回调地址,URL中带有Access Token:
1. 请确保您的网站已经提交接入QQ登录的申请,并成功获取到appid和appkey。申请接入
2. 请在你的服务器上ping graph.qq.com,保证网站和互联的连接畅通。
网站需要下载“QQ登录”按钮图片,并按照UI规范将按钮放置在页面合适的位置。
按钮图标下载
按钮放置规范
1. 打开浏览器,访问如下地址(请将client_id,redirect_uri,scope等参数值替换为你自己的):
2. 跳转登录授权页,如下图所示:
3. 如果用户点击“授权并登录”,则成功跳转到指定的redirect_uri,并跟上Authorization Code(注意此code会在10分钟内过期)。
例如回调地址是:www.qq.com/my.php,则会跳转到:
http://www.qq.com/my.php?code=520DD95263C1CFEA0870FBB66E******
注意:
回调地址建议设置为网站首页或网站的用户中心。
1.发送请求到如下地址(请将参数值替换为你自己的,参数解释详见这里):
2. 即可获取到Access Token:
access_token=YOUR_ACCESS_TOKEN&expires_in=3600
可在回调URL对应的程序(见下文的示例代码)中接受请求,并完成获取Access Token的工作。
特别提示:
获取到的access token具有30天有效期,用户再次登录时自动刷新。
第三方网站可存储access token信息,以便后续调用OpenAPI访问和修改用户信息时使用。
1. 发送请求到如下地址(请将access_token等参数值替换为你自己的):
https://graph.qq.com/oauth2.0/me?access_token=YOUR_ACCESS_TOKEN
2. 获取到用户OpenID,返回包如下:
callback( {“client_id”:”YOUR_APPID”,”openid”:”YOUR_OPENID”} );
1. 建议网站在用户登录后,即调用get_user_info接口,获得该用户的头像、昵称并显示在网站上,使用户体验统一。
2. 调用其他OpenAPI,以访问和修改用户数据。所有OpenAPI详见API列表。
以调用get_user_info接口为例:
(1)发送请求到get_user_info的URL(请将access_token,appid等参数值替换为你自己的):
(2)成功返回后,即可获取到用户数据:
{
"ret":0,
"msg":"",
"nickname":"YOUR_NICK_NAME",
...
}
<?php
//应用的APPID
$app_id = "YOUR_APP_ID";
//应用的APPKEY
$app_secret = "YOUR_APP_KEY";
//成功授权后的回调地址
$my_url = "YOUR_REDIRECT_URL";
//Step1:获取Authorization Code
session_start();
$code = $_REQUEST["code"];
if(empty($code))
{
//state参数用于防止CSRF攻击,成功授权后回调时会原样带回
$_SESSION['state'] = md5(uniqid(rand(), TRUE));
//拼接URL
$dialog_url = "https://graph.qq.com/oauth2.0/authorize?response_type=code&client_id="
. $app_id . "&redirect_uri=" . urlencode($my_url) . "&state="
. $_SESSION['state'];
echo("<script> top.location.href='" . $dialog_url . "'</script>");
}
//Step2:通过Authorization Code获取Access Token
if($_REQUEST['state'] == $_SESSION['state'])
{
//拼接URL
$token_url = "https://graph.qq.com/oauth2.0/token?grant_type=authorization_code&"
. "client_id=" . $app_id . "&redirect_uri=" . urlencode($my_url)
. "&client_secret=" . $app_secret . "&code=" . $code;
$response = file_get_contents($token_url);
if (strpos($response, "callback") !== false)
{
$lpos = strpos($response, "(");
$rpos = strrpos($response, ")");
$response = substr($response, $lpos + 1, $rpos - $lpos -1);
$msg = json_decode($response);
if (isset($msg->error))
{
echo "<h3>error:</h3>" . $msg->error;
echo "<h3>msg :</h3>" . $msg->error_description;
exit;
}
}
//Step3:使用Access Token来获取用户的OpenID
$params = array();
parse_str($response, $params);
$graph_url = "https://graph.qq.com/oauth2.0/me?access_token="
$params['access_token'];
$str = file_get_contents($graph_url);
if (strpos($str, "callback") !== false)
{
$lpos = strpos($str, "(");
$rpos = strrpos($str, ")");
$str = substr($str, $lpos + 1, $rpos - $lpos -1);
}
$user = json_decode($str);
if (isset($user->error))
{
echo "<h3>error:</h3>" . $user->error;
echo "<h3>msg :</h3>" . $user->error_description;
exit;
}
echo("Hello " . $user->openid);
}
else
{
echo("The state does not match. You may be a victim of CSRF.");
}
?>
QQ登录OAuth2.0总体处理流程?
QQ登录OAuth2.0总体处理流程如下:
Step1:申请接入,获取appid和apikey;
Step2:开发应用,并设置协作者帐号进行测试联调;
Step3:放置QQ登录按钮;
Step4:通过用户登录验证和授权,获取Access Token;
Step5:通过Access Token获取用户的OpenID;
Step6:调用OpenAPI,来请求访问或修改用户授权的资源。
QQ登录OAuth2.0接入方式?
QQ登录OAuth2.0支持网站接入和移动应用接入。
网站可通过以下两种方式接入:
(1)使用QQ互联提供的SDK包,用户体验统一,只需要修改少量代码,不需要理解验证授权流程,需要快速接入QQ登录的网站和移动应用可选用此方法。
QQ互联提供JavaScript,PHP,Java等多个版本的SDK,详见:SDK下载
QQ登录JS SDK详见:JS SDK使用说明
(2)根据QQ登录OAuth2.0协议,自主开发,此方法自定义程度较高,需要与现有系统进行整合的网站和移动应用可选用此方法。
详见:OAuth2.0开发文档
移动应用开发可通过以下两种方式接入:
(1)使用QQ互联提供的iOS,Android等平台的SDK包,用户体验统一,只需要修改少量代码,不需要理解验证授权流程,需要快速接入QQ登录的应用可选用此方法。
iOS与Android版本的SDK均支持web view与浏览器两种方式,即支持跳转到手机浏览器上进行QQ登录与验证流程,开发者可在SDK包中选择浏览器模式即可,但浏览器方式用户跳跃较大,不建议使用。
详见:SDK下载
(2)根据QQ登录OAuth2.0协议,自主开发,此方法自定义程度较高,需要与现有系统进行整合的移动应用可选用此方法。
建议移动应用使用webview的方式打开登录页面,登录成功后,获取accesstoken与openid,webview控件关闭,用户体验较好。
详见:OAuth2.0开发文档
对于Android2.1以下版本,访问https时会遇到签名证书验证的问题,解决方案可参考这里。
什么是“QQ登录OAuth2.0”
OAuth: OAuth(开放授权)是一个开放标准,允许用户授权第三方网站访问他们存储在另外的服务提供者上的信息,而不需要将用户名和密码提供给第三方网站或分享他们数据的所有内容。
QQ登录OAuth2.0:对于用户相关的OpenAPI(例如获取用户信息等),为了保护用户数据的安全和隐私,第三方网站访问用户数据前都需要显式的向用户征求授权。
Tips:
如果您想对OAuth2.0开放标准进行扩展阅读,请参看:OAuth标准(英文) | OAuth维基百科(中文)
APP唤起QQ实现登录 iOS_SDK功能列表
https://wiki.connect.qq.com/ios_sdk%e5%8a%9f%e8%83%bd%e5%88%97%e8%a1%a8
APP唤起QQ实现三方授权登录 iOS_SDK环境搭建
QQ登录iOS SDK 封装了QQ登录的登录授权以及大部分OpenAPI,应用只需要修改相应参数,不需要理解验证授权流程,即可快速实现QQ登录功能。
iOS平台上(iPad,iPhone,iPod)的应用,请在申请appid,appkey后,使用QQ互联提供的iOS SDK。
1.5版本增加 QQAPI 对象,以支持手机QQ的调用。以前申请过 APPID 类似“QQXXXXXXXX”的开发商,建议重新申请。为了兼容旧版本的手机QQ,需要增加 URL Scheme,QQ + 十六进制新AppId,不足八位在首部补0。(如 appid=222222 则 scheme=QQ0003640E)
详情请参考iOS_SDK_API_使用说明
本SDK仅适用于移动应用,即基于使用Implicit_Grant方式获取Access_Token接入的应用。
可参考文档 iOS_SDK历史变更
请到SDK下载页面下载最新版本QQ登录iOS SDK。
iOS SDK包中带有两个文件:
1. TencentOpenAPI.framework打包了iOS SDK的头文件定义和具体实现。
2. TencentOpenApi_iOS_Bundle.bundle 打包了iOS SDK需要的资源文件。(从sdk3.3.5版本开始,此文件可以不要了)
1. 将iOS SDK中的TencentOpenAPI.framework和TencentOpenApi_IOS_Bundle.bundle文件拷贝到应用开发的目录下。
然后将TencentOpenAPI.framework从SDK的保存目录拖拽到工程导航视图(project navigator)中的Frameworks虚拟目录下。
注意TencentOpenAPI.framework和TencentOpenApi_IOS_Bundle.bundle必须放到应用的资源的根目录下,否则会出现资源无法加载的问题。
2. 在弹出的对话框中勾选“Create groups for any added folders”,去掉“copy items into destination group’s folder(if needed)”,在Add to targets中选择要加入SDK的target之后点击finish。完成之后就将iOS SDK的framework文件加入了开发工程中。
3. 添加SDK依赖的系统库文件。分别是“Security.framework”,“libiconv.dylib”,“SystemConfiguration.framework”,“CoreGraphics.Framework”、“libsqlite3.dylib”、“CoreTelephony.framework”、“libstdc++.dylib”、“libz.dylib”。
在Xcode中打开工程配置文件,选择“summary”一栏。
4. 在“summary”中选择“Linked Frameworks and Libraries”一栏,点击“+”图标。
5. 直接在默认库文件中选择后点击“Add”,下图以添加“SystemConfiguration.framework”为例:
6. 返回后看到“SystemConfiguration.framework”已经在“Linked Frameworks and Libraries”中出现。
7. 在Xcode中打开工程配置文件,选择“Build Phases”一栏。
8.在“Build Phases”中选择展开“Copy Bundle Resources”一栏,并点击“+”图标
9. 选择“Add Other…”,进入iOS SDK文件所在目录,选择TencentOpenApi_IOS_Bundle.bundle,点击回车或者点击“Open”。
10. 返回后看到TencentOpenApi_IOS_Bundle.bundle已经在“Copy Bundle Resources”中出现。
11. 修改必要的工程配置属性。
在工程配置中的“Build Settings”一栏中找到“Linking”配置区,给“Other Linker Flags”配置项添加属性值“-fobjc-arc”。
在XCode中,选择你的工程设置项,选中“TARGETS”一栏,在“info”标签栏的“URL type”添加一条新的“URL scheme”,新的scheme = tencent + appid。如果您使用的是XCode3或者更低的版本,则需要在plist文件中添加。Demo中我们注册的appid是222222。如下图
如下图对照sdkDemo的配置,进行填写,根据备注中的说明可以酌情删减。
| 互联SDK中使用的scheme | 备注 |
| mqq:// | 比较常用 |
| mqqapi:// | 比较常用 |
| tim:// | 比较常用 |
| mqqopensdknopasteboard:// | 比较常用 |
| mqqopensdkapiV2:// | 比较常用 |
| mqqgamebindinggroup:// | 判断设备上QQ是否支持绑定群 |
| mqqopensdkavatar:// | 判断设备上QQ是否支持设置头像 |
| mqqopensdkfriend:// | 判断设备上QQ是否支持添加好友 |
| mqqopensdklaunchminiapp:// | 判断设备上QQ是否支持启动小程序 |
| mqzone:// | 判断设备上是否安装了QQ空间 |
| tencentapi.qq.reqContent:// | 只在 [TencentApiInterface isTencentAppSupportTencentApi]方法中用到 |
| tencentapi.qzone.reqContent:// | 只在 [TencentApiInterface isTencentAppSupportTencentApi]方法中用到 |
| mqqthirdappgroup:// | 判断设备上QQ是否支持第三方应用加群 |
| mqqopensdkminiapp:// | 判断设备上QQ是否支持小程序的相关API |
如果这个URL Scheme没有正确配置的话,跳到手Q会报这个错误:
openURL:
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation{
return [TencentOAuth HandleOpenURL:url];
}
handleOpenURL:
- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url{
return [TencentOAuth HandleOpenURL:url];
}
注意:Xcode11之后引入的SceneDelegate,如果业务的应用不支持多窗口可以直接删除项目info.plist文件中的Application Scene Manifest的配置数据,如果要支持多窗口,需要对系统AppDelegate和SceneDelegate做一些异化处理,总之QQ回来的URL交给TencentOauth来handle。
具体协议可以参照TencentOpenAPI.framework /Headers中的TencentOAuth.h文件。
(1) 创建TencentOAuth并初始化其appid,demo为222222。delegate为实现TencentSessionDelegate的对象:
[TencentOAuth setIsUserAgreedAuthorization:YES];
_tencentOAuth = [[TencentOAuth alloc] initWithAppId:@"222222", andDelegate:self];
这里delegate不能为空
(2) 初始化redirectURI(这里需要填写注册APP时填写的域名。默认可以不用填写。建议不用填写。demo中注册时的地址是“www.qq.com”):
_tencentOAuth.redirectURI = @"www.qq.com";
(3)设置应用需要用户授权的API列表。 (建议如果授权过多的话,可能会造成用户不愿意授权。这里最好只授权应用需要用户赋予的授权。):
_permissions = [[NSArray arrayWithObjects:@"get_user_info",@"get_simple_userinfo", @"add_t", nil] retain];
3.5.7版本更新后,在初始化SDK之前必须设置用户同意授权隐私协议,如果没有设置或者设置为NO(不同意)则无法使用SDK的接口,设置方式如下:
[TencentOAuth setIsUserAgreedAuthorization:YES];
1.登录时,调用TencetnOAuth对象的authorize方法:
[_tencentOAuth authorize:_permissions inSafari:NO];
2. 登录完成后,会调用TencentSessionDelegate中关于登录的协议方法。
登录成功:
@protocol TencentSessionDelegate <NSObject>
- (void)tencentDidLogin
{
_labelTitle.text = @"登录完成";
if (_tencentOAuth.accessToken && 0 != [_tencentOAuth.accessToken length])
{
// 记录登录用户的OpenID、Token以及过期时间
_labelAccessToken.text = _tencentOAuth.accessToken;
}
else
{
_labelAccessToken.text = @"登录不成功 没有获取accesstoken";
}
}
非网络错误导致登录失败:
@protocol TencentSessionDelegate <NSObject>
-(void)tencentDidNotLogin:(BOOL)cancelled
{
if (cancelled)
{
_labelTitle.text = @"用户取消登录";
}
else
{
_labelTitle.text = @"登录失败";
}
}
网络错误导致登录失败:
@protocol TencentSessionDelegate <NSObject>
-(void)tencentDidNotNetWork
{
_labelTitle.text=@"无网络连接,请设置网络";
}
3. 登录成功后,即可获取到access token和openid。accessToken和 openid保存在TencentOAuth对象中。可以通过相应的属性方法直接获得。
[_tencentOAuth accessToken] ; [_tencentOAuth openId] ;
特别提示:
1.由于登录是异步过程,这里可能会由于用户的行为导致整个登录的的流程无法正常走完,即有可能由于用户行为导致登录完成后不会有任何登录回调被调用。开发者在使用SDK进行开发的时候需要考虑到这点,防止由于一直在同步等待登录的回调而造成应用的卡死,建议在登录的时候将这个实现做成一个异步过程。
2.获取到的access token具有30天有效期,过期后提示用户重新登录授权。
3. 第三方网站可存储access token信息,以便后续调用OpenAPI访问和修改用户信息时使用。如果需要保存授权信息,需要保存登录完成后返回的accessToken,openid 和 expirationDate三个数据,下次登录的时候直接将这三个数据是设置到TencentOAuth对象中即可。
获得:
[_tencentOAuth accessToken] ; [_tencentOAuth openId] ; [_tencentOAuth expirationDate] ;
设置:
[_tencentOAuth setAccessToken:accessToken] ; [_tencentOAuth setOpenId:openId] ; [_tencentOAuth setExpirationDate:expirationDate] ;
4. 建议应用在用户登录后,即调用getUserInfo接口获得该用户的头像、昵称并显示在界面上,使用户体验统一。
错误码100016 APP拉起QQ登录返回错误码100016
access_token校验失败。建议先重新走登录流程来换取新的access_token,使用新的access_token仍然无法通过校验,请通过企业QQ联系技术支持(号码:800030681。直接在QQ的“查找联系人”中输入号码即可开始对话)。
| 100016 | access_token校验失败。建议先重新走登录流程来换取新的access_token,使用新的access_token仍然无法通过校验,请通过企业QQ联系技术支持(号码:800030681。直接在QQ的“查找联系人”中输入号码即可开始对话)。 |
返回错误码100015 APP唤起QQ登录返回错误码100015
access_token失效。要重新走登录流程,获取新的access_token。
产生该错误有两个原因:
1. 用户在QQ空间里取消了对应用的授权,会导致当前保存到应用里的AccessToken被废除掉。
2. 用户在不同的设备上进行了QQ登录,导致在原来设备上的保存的AccessToken被废除掉。
| 100015 | access_token失效。要重新走登录流程,获取新的access_token。 产生该错误有两个原因: 1. 用户在QQ空间里取消了对应用的授权,会导致当前保存到应用里的AccessToken被废除掉。 2. 用户在不同的设备上进行了QQ登录,导致在原来设备上的保存的AccessToken被废除掉。 |