FaceBook第三方登入的接入封裝
最近公司有一個app上線,併發布海外一個版本,對於登入的話就需要接入FaceBook ,Twitter,Instagram登入,首先向講述一下FaceBook的登入接入,到FaceBook官網註冊應用,主要有三個東西,app_id,這個是在程式碼中使用的配置的, shaHash值,這個後面講,然後按照步驟將需要配置都配置一下就好了
第一步:
匯入FaceBook的依賴包,FaceBook的依賴包是.arr庫,我這裡使用的是最新的facebook-android-sdk-4.18.0.aar,也可以直接放在libs庫中使用,在app的build.gradle中配置一下內容即可:
repositories{
flatDir {
dirs 'libs'
}}
在依賴下面新增
compile(name: 'facebook-android-sdk-4.18.0', ext: 'aar'),
配置清單檔案
<meta-data android:name="com.facebook.sdk.ApplicationId" android:value="@string/facebook_app_id"/> <activity tools:replace="android:theme" android:name="com.facebook.FacebookActivity" android:configChanges="keyboard|keyboardHidden|screenLayout|screenSize|orientation"android:theme="@android:style/Theme.Translucent.NoTitleBar" android:label="@string/app_name" > </activity> <activity android:name="com.facebook.CustomTabActivity" android:exported="true"> <intent-filter> <action android:name="android.intent.action.VIEW" /> <categoryandroid:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.BROWSABLE" /> <data android:scheme="@string/fb_login_protocol_scheme" /> </intent-filter> </activity>
string.xml檔案中的配置
<string name="facebook_app_id">237361146701659</string> //這個是註冊應用的appId <string name="fb_login_protocol_scheme">fb1630114020623262</string>
FaceBook的SDK就整合完畢了
第二步:登入的封裝
public class FaceBookPlatform extends Platform { private final CallbackManager callbackManager; private final List<String> permissions; private LoginManager loginManager; private Activity context; public boolean isFaceBook = false; public FaceBookPlatform(final Activity context) { super(context); this.context = context; callbackManager = CallbackManager.Factory.create(); getLoginManager().registerCallback(callbackManager, callback); permissions = Arrays.asList("email", "user_likes", "user_status", "user_photos", "user_birthday", "public_profile", "user_friends"); } //註冊回撥 FacebookCallback<LoginResult> callback = new FacebookCallback<LoginResult>() { @Override public void onSuccess(LoginResult loginResult) { isFaceBook = false; //Toast.makeText(context, "login successful", Toast.LENGTH_SHORT).show(); hideWait(); //獲取使用者資訊 getLoginInfo(loginResult.getAccessToken()); AccessToken accessToken = loginResult.getAccessToken(); String userId = accessToken.getUserId(); String token = accessToken.getToken(); LogUtils.e("------" +"userId=" + userId); LogUtils.e("------" +"token=" + token); if (loginResult.getAccessToken() != null) { LogUtils.e("----- 進入主頁面" ); ********************處理登入成功後的邏輯******************************} } @Override public void onCancel() { isFaceBook = false; //取消登入 hideWait(); Toast.makeText(context, "login cancel", Toast.LENGTH_SHORT).show(); } @Override public void onError(FacebookException error) { //登入出錯 isFaceBook = false; hideWait(); Toast.makeText(context, "something wrong", Toast.LENGTH_SHORT).show(); LogUtils.e("------" +"error.toString()=" + error.toString()); } }; public void login(Activity activity) { getLoginManager().logInWithReadPermissions( activity, permissions); isFaceBook = true; } /** * 退出 */ public void logout() { String logout = context.getResources().getString( com.facebook.R.string.com_facebook_loginview_log_out_action); String cancel = context.getResources().getString( com.facebook.R.string.com_facebook_loginview_cancel_action); String message; Profile profile = Profile.getCurrentProfile(); if (profile != null && profile.getName() != null) { message = String.format( context.getResources().getString( com.facebook.R.string.com_facebook_loginview_logged_in_as), profile.getName()); } else { message = context.getResources().getString( com.facebook.R.string.com_facebook_loginview_logged_in_using_facebook); } AlertDialog.Builder builder = new AlertDialog.Builder(context); builder.setMessage(message) .setCancelable(true) .setPositiveButton(logout, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { getLoginManager().logOut(); } }) .setNegativeButton(cancel, null); builder.create().show(); } private LoginManager getLoginManager() { if (loginManager == null) { loginManager = LoginManager.getInstance(); } return loginManager; } public void getLoginInfo(AccessToken accessToken) { GraphRequest request = GraphRequest.newMeRequest(accessToken, new GraphRequest.GraphJSONObjectCallback() { @Override public void onCompleted(JSONObject object, GraphResponse response) { if (object != null) { String id = object.optString("id"); String name = object.optString("name"); String gender = object.optString("gender"); String emali = object.optString("email"); JSONObject object_pic = object.optJSONObject("picture"); JSONObject object_data = object_pic.optJSONObject("data"); String photo = object_data.optString("url"); //獲取地域資訊 String locale = object.optString("locale"); // Toast.makeText(context, "" + object.toString(), Toast.LENGTH_SHORT).show(); } } }); Bundle parameters = new Bundle(); parameters.putString("fields", "id,name,link,gender,birthday,email,picture,locale," + "updated_time,timezone,age_range,first_name,last_name"); request.setParameters(parameters); request.executeAsync(); } public CallbackManager getCallbackManager() { return callbackManager; } /** * 設定介面回撥 * */ private FacebookListener facebookListener; public void setFacebookListener(FacebookListener facebookListener) { this.facebookListener = facebookListener; } public interface FacebookListener { void facebookLoginSuccess(); void facebookLoginFail(); } public boolean getIssFaceBook() { return isFaceBook; } }
第三部:在activity設定點選事件的地方呼叫:
//建立登入平臺的物件
faceBookPlatform = new FaceBookPlatform(this);
faceBookPlatform.login(this);
//重寫onActivityResult方法
@Override public void onActivityResult(int requestCode, int resultCode, Intent data) { //faceBook的回撥 if (faceBookPlatform.getIssFaceBook()) { faceBookPlatform.getCallbackManager().onActivityResult(requestCode, resultCode, data); super.onActivityResult(requestCode, resultCode, data); }
重要提示:需要的在application中初始化FaceBook的SDK
//初始化faceBook的SDK FacebookSdk.sdkInitialize( getApplicationContext());
注意點
並且當你在用手機測試的時候如果手機裝了FaceBook是登入出錯的,因為測試的時候是用的debug的apk,而在註冊應用的時候核算shahash值的時候使用的release的apk,他們的hash值不一樣,測試只能開啟網頁登入
另外還有一個類
public class Platform { public Context context; private ProgressLoad load; public Platform(Context context){ this.context = context; init(); } private void init(){ if(load == null){ load = new ProgressLoad(context); } } public void showWait(){ load.show(); } public void hideWait(){ load.dismiss(); } }
公司整合使用正常:如有問題請指出
相關推薦
FaceBook第三方登入的接入封裝
最近公司有一個app上線,併發布海外一個版本,對於登入的話就需要接入FaceBook ,Twitter,Instagram登入,首先向講述一下FaceBook的登入接入,到FaceBook官網註冊應用,主要有三個東西,app_id,這個是在程式碼中使用的配置的, shaHas
Java實現Facebook第三方登入
第一次接觸Facebook第三方登入,可能有些地方做的並不全面,只是嘗試著做了一個小demo,因為國內接入Facebook的專案並不多,並且多數都是Android或IOS的實現,所以資料也特別少,在此做個小總結。 第三方登入主要就是OAuth2.0協議,瞭解OAuth2.0是必要的! 開
QQ微信微博第三方登入接入流程-JAVA專案
前言 概念什麼的可以去各個第三方官網檢視API, 這裡我簡單概括下. 第三方賬號登入流程"首先, 每個第三方賬號(qq/微博/微信等)對於我們的app應用登入後都有產生一個唯一性的openID, 首次登入是這個openID, 第二次登入也是這個op
iOS開發最新最全微信第三方登入接入流程
前言: [1] iOS 微信登入注意事項 1、目前移動應用上微信登入只提供原生的登入方式,需要使用者安裝微信客戶端才能配合使用。 2、對於Android應用,建議總是顯示微信登入按鈕,當用戶手機沒有安裝微信客戶端時,請引導使用者下載安裝微信客戶端。 3、對於iOS應用,考慮到iOS應用商店稽
Twiiter第三方登入接入跳坑
04-05 19:15:57.704 4204-4204/com.rcplatform.livechat E/Twitter: Invalid json: <?xml version="1.0" encoding="UTF-8"?>
用 Flask 來寫個輕部落格 (23) — 應用 OAuth 來實現 Facebook 第三方登入
目錄 前文列表 擴充套件閱讀 第三方登入流程 Resource Owner:資源所有者,本文中又稱”使用者”(user)。 Authorization server:認證伺服器,即服務提供商專門用來處理認證的伺服器。
Android FaceBook 第三方登入開發摘要
個人開發筆記,大神繞路。 由於Facebook 是外國人常用的軟體 所以 翻牆是必須的(VPN) 在此不贅述 下面這幅圖說明了總共需要什麼東西 1.Facebook應用程式 - 配置並連結到你的應用程式,與單點登入功能。 2.新增工程,下載S
Android中FaceBook第三方登入整合
1、首先是要先下載 FaceBook SDK Android 版; 2、匯入FaceBookSDK 作為Library 引入到自己的專案中 3、在FaceBook 註冊一個 測試應用 4、配置AndroidManifest.xml: <activity
關於Google+以及Facebook第三方登入實現的一點總結
簡述 最近專案中有關於第三方登陸的需求,第三方Facebook以及Google +登入。 正好這幾天把這個需求做得差不多了,收
Unity 接入Facebook。登入、分享、邀請、好友列表等功能。
版本環境:Unity版本 5.3.4f1 Facebook版本 7.9.4 Facebook 提供了Unity SDK, 這比原生的方式接要方便很多。 1、在開發者後臺建立應用。 後臺地址:https://developers.facebook.com/apps/ 2、下載Unity
Android QQ、微信、Facebook和推特第三方登入
在Android 很多的APP應用中,都需要利用第三方登入來實現APP 自己本身應用的快速登入。這裡的第三方平臺,一般是已經有大量使用者的平臺,比如說國內的QQ,微信,國外的Facebook和Twitter 等,而本篇部落格主要實現了這四個平臺的
facebook, twitter, google第三方登入
第三方登入相關問題記錄 接過好幾次的第三方登入了,但是由於第三方登入的相關id和secret是另外一個組負責的,每次出問題之後就得配合他們檢查相關配置。故在此記錄一下需要注意的地方 Facebook登入 在申請facebook登入時需要一個填寫一個金鑰雜湊,如果簽名檔案
網站接入第三方登入功能:Java開發QQ登入
我的個人部落格:http://www.zjhuiwan.cn QQ登入確實比自己註冊賬戶登入要方便的多,所以就搞了個QQ登入。QQ互聯開放平臺為第三方網站提供了豐富的API。第三方網站接入QQ互聯開放平臺後,即可通過呼叫平臺提供的API實現使用者使用QQ帳號登入網站功能,且
實現QQ第三方登入、網站接入
1.註冊賬號: http://connect.qq.com/ 2.網站接入: http://wiki.connect.qq.com/%E7%BD%91%E7%AB%99%E6%8E%A5%E5%85%A5%E6%B5%81%E7%A8%8B 3.實現QQ登入功能:
web接入QQ第三方登入
接入qq第三方登入比接入微博第三方登入要麻煩,主要是因為前期的準備工作較麻煩,需要進行域名備案,備案通過後才能在qq互聯平臺上通過應用稽核。 我在做專案的時候,備案是通過阿里雲伺服器進行的,備案大概需要半個月的時間,所以這個週期還是很長的。備案的流程很簡單
接入ShareSDK第三方登入和分享遇到的問題以及解決方法
在出現這些問題前你已經完成了以下工作任務: 1、在微信開放平臺註冊帳號,並且建立了應用並稽核通過了; 2、下載了ShareSDK並且接入到了自己的專案中; 3、已經按官方文件填寫了功能程式碼。
騰訊QQ第三方登入1:申請接入(OAuth2.0協議)
第三方登入,一般都是遵循OAuth2.0協議。 1. QQ登入OAuth2.0協議開發流程 1.1 開發流程 申請接入,獲取appid和appkey; 開發應用,設定協作者賬號,上線之前只有協作者才能進行第三方登入 放置QQ登入按鈕(這個自己可以用一
Google Facebook twitter 第三方登入
https://dev.twitter.com/web/sign-in/implementinghttps://blog.csdn.net/yangjian8915/article/details/11816669https://blog.csdn.net/manongxia
新浪微博第三方登入1:申請接入(OAuth2.0協議)
1. 微博登入OAuth2.0協議開發流程 與QQ登入略有不同 申請接入,獲取appid和appkey; 開發應用,設定協作者賬號,上線之前只有協作者才能進行第三方登入 放置微博登入按鈕(這個自己
Android ShareSDK第三方登入(分別有新浪、QQ、微信、Facebook、Linkedin、Google等等)
專案的Demo:快速整合:1. 獲取ShareSDK的AppKey2. 下載SDK下載頁如圖所示:點選下載之後如下圖所以,點選下載SDK的下載頁,展開平臺可以選擇其他的第三方平臺;demo也是這裡下載;下載完之後的解壓目錄如圖所示:3. 快速整合ShareSDK深受大家喜愛,