iOS因QQ第三方登入被拒

weixin_34253539發表於2018-03-01

最近突然因為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];
    }
        
    

相關文章