日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

android开发学习——facebook第三方登录,看了你不会后悔

發(fā)布時間:2023/12/25 综合教程 26 生活家
生活随笔 收集整理的這篇文章主要介紹了 android开发学习——facebook第三方登录,看了你不会后悔 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

給APP用原生android進行facebook第三方登錄。

我們做一件事情,首先得了解其原理,這樣才不會迷茫,才知道自己做到什么程度了,心里才會有底。

所以,第一步,了解第三方登錄的原理:下面貼一些幫助我們理解的圖,無論什么形式,自己理解了就好了

http://blog.csdn.net/Yester_Sun/article/details/52353604 (可以參考)

http://www.jikexueyuan.com/course/1742_1.html?ss=2 (教程視頻)

● 獲取code值:https://www.facebook.com/dialog/oauth?client_id=應用編號&redirect_uri=回調(diào)地址&code=,這時在地址欄上會出現(xiàn)一長串code
● 獲取access_token:https://graph.facebook.com/oauth/access_token?client_id=應用編號&redirect_uri=回調(diào)地址&client_secret=應用密鑰&code=剛才獲取到的code
● 獲取用戶資料:https://graph.facebook.com/me?access_token=剛才獲取到的access_token,得到用戶的id和name

第二步,第三方登錄開發(fā)的流程:

1.注冊一個facebook平臺賬號,需要翻墻。這個用我們平時的登錄賬號就可以。

2.申請成為開發(fā)者。

3.創(chuàng)建應用。主要獲取appId 和 appSecret

4.設(shè)置回調(diào)的url。

5.開發(fā) & 測試

快速啟動 選擇平臺-android ,有我們需要的開發(fā)的步驟,大家自己進入官網(wǎng)進行操作。

*******************************************************************************************

其中有幾點需要注意:( 這些是我在做的時候,花了好久才搞明白的問題。)

添加keyhash:當你在用手機測試的時候如果手機裝了FaceBook是登錄出錯的,測試的時候用的是debug.apk,注冊應用時keyhash配置的release.apk,他們keyhash值不一樣,測試只能網(wǎng)頁登錄。

意思是 如果我們用debug.apk,keyhash也要用debug的,用release.apk,kehash也要用release的。

添加keyhash---讓facebook分辨你的app是不是當初設(shè)定的那個app,要符合才對facebook進行存取。

release版本的keyhash:http://blog.csdn.net/u010838555/article/details/39851863前提是安裝openssl,此鏈接里面有安裝步驟。

C:Userslemon>keytool -exportcert -alias 'key' -keystore E: estas_key.jks |C:opensslinopenssl.exe sha1 -binary | C:opensslinopenssl.exe base64

debug版本的keyhash:

C:Userslemon>keytool -exportcert -alias androiddebugkey -keystore %HOMEPATH%.androiddebug.keystore | C:opensslinopenssl.exe sha1 -binary |C:opensslinopenssl.exe base64

注意: -keystore 后邊是自己的debug.keystore的路徑;openssl.exe也是自己安裝的路徑,密碼都是 android.

**************************************************************************************************

單點登錄 SSO : 參考http://wiki.mob.com/single-sign-on-sso/

新浪微博、騰訊微博、QQ空間、人人網(wǎng)、Facebook和Dropbox已經(jīng)提供了Single Sign-On(SSO)的授權(quán)方式。就是利用這些平臺的手機客戶端來完成授權(quán)。由于SSO的授權(quán)方式對于用戶來說更加便捷,因此各大平臺均建議開發(fā)者優(yōu)先使用這一種授權(quán)方式。ShareSDK提供SSO的授權(quán)實現(xiàn),并且默認情況下是使用的。但是如果您想關(guān)閉SSO功能,可以調(diào)用類似于下面的代碼來關(guān)閉:

Platform facebook = ShareSDK.getPlatform(Facebook.NAME);
facebook.SSOSetting(true); // true表示不使用SSO方式授權(quán)
facebook.setPlatformActionListener(paListener);
facebook.authorize();

為方法SSOSetting傳遞參數(shù)true,表示不使用SSO方式授權(quán)。

keyhash 是開啟SSO授權(quán)的時候才需要填的選項,facebook審核需要開啟sso授權(quán)才可以通過。

**********************************************************************************************************************

如果用ShareSDK來做登錄,可以參考 http://blog.csdn.net/fish20100903/article/details/48263977
如果用原生android,可以參考http://www.jianshu.com/p/97fb88e66d36 (注意文章底下的總結(jié)和評論)
添加FaceBook登陸最簡單的方式就是使用SDK中的LoginButton,與此同時,你還會用到其他的幾個類,SDK包括:

LoginManager-初始化登陸進程并請求權(quán)限
LoginButton-這個組件包裝在LoginManager,當點擊這個button的時候,登陸進程就會初始化(擁有了權(quán)限),同時,button會跟蹤登陸狀態(tài),并根據(jù)用戶的登錄狀態(tài)展示對應的文檔信息。
CallbackManager-用于回掉FaceBookSDK并注冊你的回掉,你應該在你的初始化Activity或者fragment的OnActivityResult中回掉。
Access Token-使用此類圖形的API請求,它展示了 user id,以及拒絕和接收的權(quán)限
Profile-這個類擁有登陸用戶的基本信息

**********************************************************************************************************************

在實際的項目開發(fā)中, 不會只是登錄成功就完事了,還會將登陸成功之后,facebook返回給我們的唯一的id號注冊到我們的后臺,我是這樣做的:

在清單文件中:

<meta-data android:name="com.facebook.sdk.ApplicationId"
            android:value="@string/facebook_app_id"/>
<activity android:name="com.facebook.FacebookActivity"
            android:exported="true"
            android:configChanges="keyboard|keyboardHidden|screenLayout|screenSize|orientation"
            android:label="@string/app_name" />

在布局文件中:

<!--faceook登錄官網(wǎng)的按鈕-->
 <com.facebook.login.widget.LoginButton
                    android:id="@+id/login_facebookbutton"
                    android:layout_width="match_parent"
                    android:layout_height="40dp"
                    android:layout_marginLeft="10dp"
                    android:layout_marginRight="10dp"
                    android:layout_marginTop="5dp"
                    android:textSize="@dimen/text_size_5" />
有時候我們不需要官網(wǎng)提供給我們的按鈕,需要自定義
<!--faceook登錄的自定義按鈕-->
 <Button
                    android:id="@+id/login_facebookbutton"
                    android:layout_width="match_parent"
                    android:layout_height="40dp"
                    android:layout_marginTop="2dp"
                    android:text="facebook登錄"
                    android:textColor="@color/white"
                    android:textStyle="bold"
                    />

在activity中:

private CallbackManager callbackManager;

 @Override
    protected void onCreate(Bundle savedInstanceState) {
        setContentView(R.layout.activity_login1);
        FacebookSdk.sdkInitialize(getApplicationContext(),10000);//10000-RequestCode
       //注冊callback
        callbackManager = CallbackManager.Factory.create();
//官網(wǎng)定義fb按鈕的做法 LoginButton loginButton = (LoginButton) findViewById(R.id.login_facebookbutton); loginButton.setReadPermissions(Arrays.asList("public_profile", "email", "user_friends"));
loginButton.registerCallback(callbackManager, new FacebookCallback<LoginResult>() {

//用戶自定義fb按鈕的做法
        LoginManager.getInstance().registerCallback(callbackManager, new FacebookCallback<LoginResult>() {
//為了響應登錄結(jié)果,您需要使用 LoginButton 注冊回調(diào).
            //如果登錄成功,LoginResult 參數(shù)將擁有新的 AccessToken 及最新授予或拒絕的權(quán)限。
            @Override
            public void onSuccess(final LoginResult loginResult) {
               
                GraphRequest request = GraphRequest.newMeRequest(loginResult.getAccessToken(),
                        new GraphRequest.GraphJSONObjectCallback() {
                            @Override
                            public void onCompleted(JSONObject object, GraphResponse response) {
                                if (object != null) {
                                    email = object.optString("email");
                                    firstname = object.optString("first_name");
                                    lastname = object.optString("last_name");
                                    Log.e("log", "LoginActivity - email----" + email);
                                    Log.e("log", "LoginActivity - getLoginInfo::---" + object.toString());

                                    AccessToken accessToken = loginResult.getAccessToken();
                                    fbuserId = accessToken.getUserId();
                                    String token = accessToken.getToken();
                                    Log.e("log", "LoginActivity - accessToken:::" + accessToken);
                                    Log.e("log", "LoginActivity - userid:::" + fbuserId);

                                    if (accessToken != null) {
                                        //如果登錄成功,跳轉(zhuǎn)到登錄成功界面,拿到facebook返回的email/userid等值,在我們后臺進行操作
                                   
                                       // FbLogin();
                                    }
                                }
                            }
                        });

                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();
            }

            @Override
            public void onCancel() {
                //  Toast.makeText(LoginActivity.this, "facebook_account_oauth_Cancel", Toast.LENGTH_SHORT).show();
            }

            @Override
            public void onError(FacebookException e) {
                // Toast.makeText(LoginActivity.this, "facebook_account_oauth_Error", Toast.LENGTH_SHORT).show();

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

case 10000:
if (callbackManager != null) {
//在用戶成功授權(quán)之后,回調(diào)onActivityResult(),需要重寫 onActivityResult()
callbackManager.onActivityResult(requestCode, resultCode, data);
}
break;
}

//自定義fb按鈕,在你代碼的正確地方
btn_fb = (Button) findViewById(R.id.login_facebookbutton);
btn_fb.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
LoginManager.getInstance()
.logInWithReadPermissions(LoginActivity.this,
Arrays.asList("public_profile", "user_friends","email"));
}
});
}

代碼在項目已用,可用。

總結(jié)

以上是生活随笔為你收集整理的android开发学习——facebook第三方登录,看了你不会后悔的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。