1. 程式人生 > >FaceBook第三方登入的接入封裝

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" /> <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>

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深受大家喜愛,