Facebook登陸SDK接入(Android)

官方文檔

Android 版 Facebook 登錄 — 快速入門

接入準備

1】首先去Facebook開發者平臺創建自己的應用,這裏一般是運營的工作。本文主要講解接入過程以及遇到的一些問題,其他不贅述。

集成SDK

1】Maven方式:
項目級的build.gradle

repositories {
      jcenter()  //添加
   }

應用級的build.gradle

dependencies {
   implementation 'com.facebook.android:facebook-login:[5,6)'  //添加

2】jar包導入方式
下載Facebook最新的SDK的 jar包,放到項目的libs文件夾下。
下載地址在上方官方文檔中有

編輯您的資源和清單

1】打開您的 /app/res/values/strings.xml 文件。
添加如下所示的代碼:

<resources>
    <string name="facebook_app_id">後臺有</string>
    <string name="server_client_id">後臺有</string>
</resources>

2】打開 /app/manifest/AndroidManifest.xml 文件。
在 application 元素後添加以下 uses-permission 元素:

<uses-permission android:name="android.permission.INTERNET" />

3】在 application 元素中添加以下 meta-data 元素。 官方文檔添加內容比這多,可以看下。我的項目只添加以下meta-data(添加Facebook的activity會有奇怪的報錯…)

<meta-data 
    android:name="com.facebook.sdk.ApplicationId" 
    android:value="@string/facebook_app_id"/>

將包名填入FB後臺

正確填入即可

生成密鑰散列

官方文檔很坑,直接給了一個debug的生成命令,疏忽的小朋友如果照着文檔執行,測試包不會有問題,但是一旦上線,玩家手機中裝有Facebook應用後,就無法進入遊戲,
提示:登陸錯誤:將你登陸到此應用程序時錯誤,請稍後再試。
所以這裏生成散列要生成兩個,並都填入後臺。

每個 Android 開發環境都將會有一個唯一的開發密鑰散列
打開mac的終端,輸入以下命令就會生成28個字符串的一個散列。
Mac – Debug的:

keytool -exportcert -alias androiddebugkey -keystore ~/.android/debug.keystore | openssl sha1 -binary | openssl base64

Mac – 正式的:

keytool -exportcert -alias **YOUR_RELEASE_KEY_ALIAS** -keystore **YOUR_RELEASE_KEY_PATH** | openssl sha1 -binary | openssl base64

YOUR_RELEASE_KEY_ALIAS:看下你的keyAlias是多少,填入
YOUR_RELEASE_KEY_PATH:你的keystore文件路徑

Windows

keytool -exportcert -alias androiddebugkey -keystore "C:\Users\USERNAME\.android\debug.keystore" | "PATH_TO_OPENSSL_LIBRARY\bin\openssl" sha1 -binary | "PATH_TO_OPENSSL_LIBRARY\bin\openssl" base64

以上,在後臺輸入包名,散列後就可以後面愉快的代碼接入了
1】在onCreate()方法中添加回調

public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        // facebook registerLoginCallback
        callbackManager = CallbackManager.Factory.create();
        LoginManager.getInstance().registerCallback(callbackManager,
                new FacebookCallback<LoginResult>() {
                    @Override
                    public void onSuccess(LoginResult loginResult) {
                        // App code, 登陸成功,自己編寫成功後的方法
						//獲取FB返回的uid:loginResult.getAccessToken().getUserId();
                    }

                    @Override
                    public void onCancel() {
                         // App code, 登陸取消,自行編寫
                    }

                    @Override
                    public void onError(FacebookException exception) {
                         // App code  
                        Log.e(TAG, "exception: " + exception);
                    }
        });
        
        //檢測登陸狀態,可選功能。 在官方文檔中也有介紹,判斷本地是否有登陸緩存,直接登陸
        AccessToken accessToken = AccessToken.getCurrentAccessToken();
        isFBLoggedIn = accessToken != null && !accessToken.isExpired();

2】需要登陸的地方添加以下代碼

LoginManager.getInstance().logInWithReadPermissions(MainActivity.this, Arrays.asList("public_profile"));

3】最後,在 onActivityResult 方法中調用 callbackManager.onActivityResult,通過 callbackManager 將登錄結果傳遞至 LoginManager

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        callbackManager.onActivityResult(requestCode, resultCode, data);
        super.onActivityResult(requestCode, resultCode, data);
    }

至此,接入完成。

遇到的問題

1】第一個問題玩家無法登陸Facebook賬號,在生成散列中已經說明了。
2】如果提示:“xxxxxxxFacebook-login 5.9.0 in AndroidManifest”,就把清單中的FacebookActivity註釋掉。
3】編譯過程遇到的問題可在其他文章中找到解決方案。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章