Android 開發 facebook分享,登陸,獲取信息


1 搭建開發環境
    1.1 在Facebook官網SDK中,下載4.0.0的SDK包。
    
    1.2 使用Eclipse導入SDK包中的Facebook工程,並添加android-support-v4.jar。
    
    1.3 代碼中,有好多List的實例化沒有類型,只要把JDK修改為1.7即可。(Facebook工程 -> 右鍵 -> properties -> Java Compiler -> Enable project specific settings選中 -> Compiler compliance level選擇1.7)。
    
    1.4 導入android 的Bolts library(bolts-android-x.x.x.jar).
    
    1.5 將下面代碼加入AndroidManiffest.xml中,並修改string.xml中facebook_app_id的值。
        <activity android:name="com.facebook.FacebookActivity"
            android:configChanges="keyboard|keyboardHidden|screenLayout|screenSize|orientation"
            android:theme="@android:style/Theme.Translucent.NoTitleBar"       
            android:label="@string/app_name" />            
        <meta-data
            android:name="com.facebook.sdk.ApplicationId"
            android:value="@string/facebook_app_id" />
    1.6 獲取簽名的HashCode
        1.6.1 下載 openssl-0.9.8k_WIN32(http://download.csdn.net/detail/h7870181/5054864),解壓到C盤根目錄。
        1.6.2 cmd下執行下面命令,密碼為android。
        keytool -export -alias myAlias -keystore C:\Users\derrick\.android\debug.keystore | C:\openssl-0.9.8k_WIN32\bin\openssl sha1 -binary | C:\openssl-0.9.8k_WIN32\bin\openssl enc -a -e

    
    
2 初始化
    
    FacebookSdk.sdkInitialize(getApplicationContext());
    CallbackManager callbackManager = CallbackManager.Factory.create();

3 分享
    此功能比較簡單,
    
    2.1 在界面布局文件中,加入如下代碼:
    
        <com.facebook.share.widget.ShareButton
            android:id="@+id/shared_button"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center_horizontal"
            android:layout_marginTop="30dp"
            android:layout_marginBottom="30dp" />
            
    2.2 在Activity中,實例化ShareButton,配置分享內容即可。        
        
        ShareButton shareButton = (ShareButton) findViewById(R.id.shared_button);
        //分享網址
        shareButton.setShareContent(new ShareLinkContent.Builder().setContentUrl(Uri.parse("https://developers.facebook.com")).build());
        //
        
3 授權登錄

    3.1 FaceBook默認登錄
 
        3.1.1 添加登錄按鈕
        
        <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" />
            
        3.1.2 響應功能,並添加回調
    
        LoginButton loginButton = (LoginButton) findViewById(R.id.login_button);
        loginButton.registerCallback(callbackManager, new FacebookCallback<LoginResult>() {
            @Override
            public void onSuccess(LoginResult loginResult) {
                println("onSuccess");
            }

            @Override
            public void onCancel() {
                println("onCancel");
            }

            @Override
            public void onError(FacebookException exception) {
                println("onError");
            }
        });

    3.2 自定義登錄
        首先在初始化(2 初始化)完成后,添加登錄回調:
        
        LoginManager.getInstance().registerCallback(callbackManager, new FacebookCallback<LoginResult>() {
            @SuppressWarnings("deprecation")
            @Override
            public void onCancel() {
                CookieSyncManager.createInstance(MainActivity.this);
                CookieManager cookieManager = CookieManager.getInstance();
                cookieManager.removeAllCookie();
                CookieSyncManager.getInstance().sync();
            }

            @Override
            public void onError(FacebookException arg0) {
            }

            @Override
            public void onSuccess(LoginResult arg0) {
                getLoginInfo(loginResult.getAccessToken());
            }

        });
                
        @Override
        protected void onActivityResult(final int requestCode, final int resultCode, final Intent data) {
            super.onActivityResult(requestCode, resultCode, data);
            callbackManager.onActivityResult(requestCode, resultCode, data);
        }
        
        3.2.1 添加登錄按鈕
            
            和普通的Button一樣的樣式,加入到布局文件中。
            
        3.2.2 實現功能
        
            在button的Onclick事件中,執行授權登錄的功能代碼:
            LoginManager.getInstance().logInWithReadPermissions(MainActivity.this, Arrays.asList("user_friends", "public_profile"));
        

    3.3 啟用Chrome自定義選項卡
    
        當未安裝Facebook是,可以使用Chrome選項卡來授權登錄(如果Chrome保存用戶信息,可以直接登錄)。
        
        3.3.1 在Androidmanifest.xml中以下(類似1.5中):
        
            <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>
            
        3.3.2 在String.xml中添加 fb_login_protocol_scheme。
        
            <string name="fb_login_protocol_scheme">fbAPP_ID</string>
    
    3.4 登錄狀態
        
        通過檢查AccessToken.getCurrentAccessToken()和Profile.getCurrentProfile()判斷是否登錄。
        
4 用戶信息

    在3.2中,回調onSuccess中執行如下方法:
    
    getLoginInfo(loginResult.getAccessToken());
    
    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" ) ;   //比如:1565455221565
                    String name = object.optString( "name" ) ;  //比如:Zhang San
                    String gender = object.optString("gender") ;  //性別:比如 male (男)  female (女)
                    String emali = object.optString("email") ;  //郵箱:比如:56236545@qq.com

                    //獲取用戶頭像
                    JSONObject object_pic = object.optJSONObject( "picture" ) ;
                    JSONObject object_data = object_pic.optJSONObject( "data" ) ;
                    String photo = object_data.optString( "url" )  ;

                    //獲取地域信息
                    String locale = object.optString( "locale" ) ;   //zh_CN 代表中文簡體

                    Toast.makeText( MainActivity.this , "" + 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() ;
    }
       


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM