1. 程式人生 > >facebook, twitter, google第三方登入

facebook, twitter, google第三方登入

第三方登入相關問題記錄

接過好幾次的第三方登入了,但是由於第三方登入的相關id和secret是另外一個組負責的,每次出問題之後就得配合他們檢查相關配置。故在此記錄一下需要注意的地方

Facebook登入

  • 在申請facebook登入時需要一個填寫一個金鑰雜湊,如果簽名檔案在你手上,你可以採用官網提供的方式來獲取金鑰雜湊。而像我們公司,簽名是公司統一管理的,然後應用在構建系統上構建。這樣你可以先在手機上安裝一個構建好的應用,然後通過如下方式獲取應用金鑰雜湊
private void generateKeyHash() {
        try {
            int i = 0;
            PackageInfo info = getPackageManager().getPackageInfo("應用包名",  PackageManager.GET_SIGNATURES);
            for (Signature signature : info.signatures) {
                i++;
                MessageDigest md = MessageDigest.getInstance("SHA");
                md.update(signature.toByteArray());
                String KeyHash = Base64.encodeToString(md.digest(), Base64.DEFAULT);
                Utils.Log.e("hashkey: " + KeyHash);
            }
        }
        catch (PackageManager.NameNotFoundException e) {

        }
        catch (NoSuchAlgorithmException e) {

        }
    }
  • 應用未釋出前需要使用測試賬號

           登入facebook的時候,提示:應用未設定:應用仍處於開發模式,你沒有訪問許可權。請切換為已註冊的測試使用者,或向        應用管理員申請訪問許可權。而測試賬號可以在管理後臺生成。生成了測試賬號之後記得修改一下測試賬號的密碼。不然的話好      像會提示:登入的時候提示測試使用者無法訪問facebook網路,需要在測試使用者工具內授予非企業內訪問許可權。

            應用上線之前記得釋出一下應用,然後用真實的facebook賬號登入測試一下。

Google登入

  • 和facebook登入差不多的是,google登入申請相關資訊時需要獲取一個sha1值,如果你沒有簽名檔案的話可以通過如下方式獲取。
public static String generateSHA1() {

        try{

            PackageInfo info = getPackageManager().getPackageInfo("應用包名", PackageManager.GET_SIGNATURES);

            byte[] cert = info.signatures[0].toByteArray();

            MessageDigest md = MessageDigest.getInstance("SHA1");

            byte[] publicKey = md.digest(cert);

            StringBuffer hexString =new StringBuffer();

            for(int i =0; i < publicKey.length; i++) {

                String appendString = Integer.toHexString(0xFF& publicKey[i]).toUpperCase(Locale.US);

                if(appendString.length() ==1) hexString.append("0");

                hexString.append(appendString);

                hexString.append(":");

            }

            String result = hexString.toString();

            return result.substring(0, result.length() -1);

        }catch(PackageManager.NameNotFoundException e) {

            e.printStackTrace();

        }catch(NoSuchAlgorithmException e) {

            e.printStackTrace();

        }

        return null;

    }
  •  關於客戶端id的獲取,以下標紅的兩個地方是需要注意的。本來第一次接的時候,申請時上面的Api金鑰是配置好了的,第二次那邊沒有配置搞得我調了好久。第二個需要注意的地方是我們app需要的id是下面Web client對應的id.

  • 一般我們的應用接google登入的話,還會接Firebase。這裡就需要注意了因為Firebase和google註冊的時候都是需要包名和sha1值,分開申請會衝突,需要關聯一下。一般由google賬號直接建立Firebase賬號就好了

Twitter登入

  • 最後就是Twitter登入了,Twitter登入不需要像上面一樣去申請,但是有兩個地方需要注意的。首先是Callback URLs,最開始這個地方填了一個後臺配的網址就可以了。之後不知道是twitter更新了還是怎麼回事,全部都登入不上了。後端最後發現是需要填如下的URls

  • 第二個問題是,需要下載Twitter客戶端才能登入,如果沒下載的話就登入不了。只要把下面的一項勾選就可以的

總結

其實接入這些第三方sdk最重要的資料就是官網,官網上有些雖然是英文,但是流程還是挺清楚的,對著走一遍就能接入的差不多。然後遇到問題,先定位出是什麼問題。然後可以去stackoverflow上查詢,一般會有的。