標籤:項目 功能表列 data- home protected prot one def 注意
之前都是做國內的應用開發,沒有用過國外的三方登入,比如Google登入、facebok登入,最近參與了一個海外的支付相關的項目,調研了一下Google登入和facebook登入,其實調研之後覺得也是很簡單的,尤其是facebook登入,跟國內的三方登入整合幾乎沒有什麼差別。 下面說說facebok登入的整合流程吧: 首先 你需要在facebook開發人員官網上面註冊一個開發人員帳號(如果你有facebook帳號的話也是可以的),網址為:developers.facebook.com,下面就是官網的頁面: 在頁面的右上有一個我的應用程式,點擊在下拉式功能表中建立自己的應用: 這點擊“添加新應用”,會彈出下面這個頁面,一個填寫應用程式名稱,一個填寫自己的郵箱,然後點擊“建立應用編號”完成建立應用的操作: 下面是建立應用之後進入的應用的後台配置頁面,裡麵包括應用的id: 選中左邊功能表列的“添加產品”選項卡,在右邊的功能選擇裡面選擇登入這個模組,點擊設定: 然後選擇android: 選擇Android之後會進入到下面的頁面: 我們會看到流程總共分為10個步驟: 第一步:選擇自己的應用,在這裡我們的建的demo應用是logindemo: 第二步:官網給出的步驟是下載“facebook”應用,其實不用下載,他們有自己的網頁版登入,這一步可以略過: 第三步:需要在project下面的build.gradle裡面的buildscript { repositories {}} 裡面加一個mavenCentral(),加完之後的效果是這樣的: 然後在app下面的build.gradle裡面的dependencies裡面加一句:compile ‘com.facebook.android:facebook-login:[4,5)‘ ,然後構建項目,就會自動下載引入facebook的sdk; 第四步:編輯 Manifest 清單: ①:開啟 /app/src/main/res/values/strings.xml 檔案; ②:添加如下所示的代碼 ③:<string name="facebook_app_id">你在facebook上面建立的應用id</string> <string name="fb_login_protocol_scheme">你在facebook上面建立的應用id</string> ④:開啟 /app/manifest/AndroidManifest.xml 檔案,將 uses-permission 元素添加到資訊清單檔中: <uses-permission android:name="android.permission.INTERNET"/> ⑤:在 application 元素後添加以下 meta-data 元素、一個針對 Facebook 的 activity 元素以及一個針對 Chrome 自訂選項卡的 activity 元素和意向篩選條件。將 @string/appname 替換為您的 Facebook 應用的名稱: <meta-data android:name="com.facebook.sdk.ApplicationId" android:value="@string/facebook_app_id"/> <activity android:name="com.facebook.FacebookActivity" android:configChanges= "keyboard|keyboardHidden|screenLayout|screenSize|orientation" android:label="@string/app_name" /> <activity android:name="com.facebook.CustomTabActivity" android:exported="true"> <intent-filter> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.BROWSABLE" /> <data android:scheme="@string/fb_login_protocol_scheme" /> </intent-filter> </activity> 第五步:將軟體包名稱與應用的預設類關聯: 軟體包名稱:填寫軟體的包名 預設活動類名稱:填寫預設活動類包名和類名 第六步:為應用提供開發和發布密鑰散列: 為確保您的應用與 Facebook 之間互動的真實性,您必須先向我們提供您的開發環境下的 Android 密鑰散列。如果您的應用已經發布,則還應該同時提供發布密鑰散列。 產生開發密鑰散列 每個 Android 開發環境都將會有一個唯一的開發密鑰散列。要產生開發密鑰散列,在 Mac 中,運行以下命令: keytool -exportcert -alias androiddebugkey -keystore ~/.android/debug.keystore | openssl sha1 -binary | openssl base64 在 Windows 中,運行以下命令: keytool -exportcert -alias androiddebugkey -keystore %HOMEPATH%\.android\debug.keystore | openssl sha1 -binary | openssl base64 此命令將針對您的開發環境產生一個包含 28 個字元的唯一密鑰散列。將其複製粘貼到下面的欄位中。對於參與應用開發的每個人的開發環境,您必須分別提供開發密鑰散列。 產生發布密鑰散列 Android 應用必須先使用發布密鑰進行電子簽名,然後才能上傳到商店中。要產生發布密鑰散列,請在 Mac 或 Windows 內運行以下命令,並替換您的發布密鑰別名和 keystore 路徑: keytool -exportcert -alias YOUR_RELEASE_KEY_ALIAS -keystore YOUR_RELEASE_KEY_PATH | openssl sha1 -binary | openssl base64 這會產生一個包含 28 個字元的字串,您應將其複製粘貼到下面的欄位中。另外,請參閱 Android 文檔,瞭解有關應用簽名的資訊。 第七步:啟用單點登入,選擇“是”,然後save: -------------------------------------------------------配置結束---------------------------------------------------- 至此,所有的配置項都已完成,下面就是涉及到代碼整合階段了,也就是facebook登入在你的應用中的使用。 facebook提供了兩種使用方式,一種是直接使用它的UI,它提供了一個LoginButton的一個自訂view,樣式可以稍微修改,把它放到你的布局中就可以使用了,使用方式很簡單;第二種方式是直接自訂任何形式的按鈕添加監聽,在建廳裡面直接調代碼執行facebook登入操作。 方式一:使用LoginButton: 在XML代碼中添加LoginButton這個view: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <com.facebook.login.widget.LoginButton android:id="@+id/login_button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_horizontal" android:layout_marginTop="30dp" android:layout_marginBottom="30dp" /> </LinearLayout> 它的樣式是這樣的: 這是未登入的樣式,已登入的樣式只是文案變成了“Log out”字樣,點擊即可完成退出,這是在xml代碼的整合,下面是在java代碼中的整合方式: public class MainActivity extends FragmentActivity { CallbackManager callbackManager; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); callbackManager = CallbackManager.Factory.create(); LoginButton loginButton = (LoginButton) view.findViewById(R.id.usersettings_fragment_login_button); loginButton.registerCallback(callbackManager, new FacebookCallback<LoginResult>() { @Override public void onSuccess(LoginResult loginResult) { Toast.makeText(getApplicationContext(), "facebook登入成功", Toast.LENGTH_SHORT).show(); } @Override public void onCancel() { Toast.makeText(getApplicationContext(), "facebook登入取消", Toast.LENGTH_SHORT).show(); } @Override public void onError(FacebookException error) { Toast.makeText(getApplicationContext(), "facebook登入錯誤", Toast.LENGTH_SHORT).show(); } }); } } 最後,調用 callbackManager.onActivityResult,通過 callbackManager 將登入結果傳遞至 LoginManager。 @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); callbackManager.onActivityResult(requestCode, resultCode, data); } 方式二:使用自己的定義的介面: 在XML代碼中添加任意一個button: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center" android:orientation="vertical"> <Button android:id="@+id/facebook_login" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="臉書登入"/> </LinearLayout> 在java代碼中添加按鈕的監聽並在監聽中提供提供登入操作: mFacebookLogin.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { LoginManager.getInstance().logInWithReadPermissions(MainActivity.this, Arrays.asList("public_profile")); } }); 還要註冊一個監聽: LoginManager.getInstance().registerCallback(callbackManager, new FacebookCallback<LoginResult>() { @Override public void onSuccess(LoginResult loginResult) { Toast.makeText(getApplicationContext(), "facebook登入成功", Toast.LENGTH_SHORT).show(); } @Override public void onCancel() { Toast.makeText(getApplicationContext(), "facebook登入取消", Toast.LENGTH_SHORT).show(); } @Override public void onError(FacebookException error) { Toast.makeText(getApplicationContext(), "facebook登入錯誤", Toast.LENGTH_SHORT).show(); } }); 這種方式的好處就是可以保留有自己的UI風格,不產生UI設計上的衝突。 至此兩種登入方式介紹完畢 其實介紹到這還沒有結束,因為我們一把情況下還要擷取facebook使用者的個人公用資訊,還要對是否登入進行判斷,所以,一些細節性的收尾的工作換要處理: facebook提供的一個監聽器,用來監聽使用者個人資訊發發生變化,這個監聽器叫ProfileTracker,我們可以這樣: 建立一個ProfileTracker對象: private ProfileTracker profileTracker; profileTracker = new ProfileTracker() { @Override protected void onCurrentProfileChanged( Profile oldProfile, Profile currentProfile) { // App code if(currentProfile != null){ Toast.makeText(getApplicationContext(), "個人資訊 = " + currentProfile.getFirstName(), Toast.LENGTH_SHORT).show(); } } }; 在這裡個人資訊分為oldProfile和currentProfile,但是這個監聽用的時候要注意,因為它登入和退出都會觸發這個方法,所以要做飛非空判斷,並且可以以此來記錄是否已登入等行為。 好了,就寫到這吧,希望這篇文章對大家有所協助。 如要轉載,請註明出處,謝謝! 歡迎關注我的簡書部落格,地址是: http://www.jianshu.com/u/da06e00edefa 歡迎大家關注我的公眾號,我會定期發布一些部落格,分享一些知識點。
android應用整合facebook登入