最近突然因为QQ第三方登录被拒,在这里记录一下。据说,由于QQ近期进行整体安全升级,原有部分第三方开发者通过拼接登录url或调起H5登录的方式,存在重大安全风险,1月31日起,第三方应用使用QQ登录时,仅可使用QQ或tim进行一键授权登录,其他所有登录方式将全部停止支持。
具体方案:1.移动应用使用openSDK时,直接调起一键登录,如果未安装qq或tim则 提示进行下载2.移动应用在浏览器内使用QQ登录时,直接调起一键登录,若手机内未 安装qq或tim则提示进行下载
1、QQ没有安装时提示下载被拒
反馈信息:
QQ没有安装时,点击后没有web的登录页,而是一个 提示下载页采取措施:
根据是否安装了QQ与微信来控制第三方登录按钮的显示与隐藏
[QQApiInterface isQQInstalled]; [WXApi isWXAppInstalled];
遇到问题:
其中,微信的判断遇到了问题,判断结果不准确,原因是AppDelegate.m里没有调用微信的注册App方法
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
[WXApi registerApp:@"微信开放平台的AppId"];
}
2、满怀期望的提交审核后第二天已然被拒
反馈信息:
Apple给了两张截图:1. QQ没有安装时,登录页没有QQ的登录按钮(iPad截图)。2.登录页有QQ的登录按钮(iPhone截图)。看来是被抓住一次后重点照顾了,居然特意去下载一个QQ来对比。采取措施:
根据App Store里的版本号以及App的版本号做判断,在审核状态下不显示第三方登录按钮。
// 获取本地版本号
NSString *currentVersion = [NSBundle mainBundle].infoDictionary[@"CFBundleShortVersionString"]; //info.plist里的 version
// 取得AppStore信息
NSString *url = [[NSString alloc] initWithFormat:@"http://itunes.apple.com/lookup?id=%@", @"App 在AppStore的ID"];
// 拿上面的URL走get请求,下面是简单的数据处理
NSArray *resultArr = responseObject[@"results"];
NSDictionary *resultsDict = resultArr.firstObject;
// app store 最新版本号
NSString *AppStoreVersion = resultsDict[@"version"];
// AppStore版本号大于当前版本号
if ([AppStoreVersion compare:currentVersion options:NSNumericSearch] == NSOrderedDescending) {
// 已上线 手机不是最新版
[[NSUserDefaults standardUserDefaults] setObject:@"YES" forKey:kIsShowLoginWithThird];
}else if ([AppStoreVersion compare:currentVersion options:NSNumericSearch] == NSOrderedAscending) {
//该版本 还未上线
[[NSUserDefaults standardUserDefaults] setObject:@"NO" forKey:kIsShowLoginWithThird];
} else {
// 已上线 手机是最新版
[[NSUserDefaults standardUserDefaults] setObject:@"YES" forKey:kIsShowLoginWithThird];
}