1. 程式人生 > >Android中FaceBook第三方登入整合

Android中FaceBook第三方登入整合

1、首先是要先下載 FaceBook SDK Android 版;

2、匯入FaceBookSDK 作為Library 引入到自己的專案中

3、在FaceBook 註冊一個 測試應用

4、配置AndroidManifest.xml:

       <activity android:name="com.facebook.LoginActivity"/> 
        <meta-data android:name="com.facebook.sdk.ApplicationId" android:value="@string/app_id"/>  

在String 中新增: 
<string name="app_id">1548440642074664</string>
5、新增 Facebook 登入按鈕 :
 <com.facebook.widget.LoginButton
        android:id="@+id/login_button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"
        android:layout_marginBottom="30dp"
        android:layout_marginTop="30dp" />

6、在activity中新增程式碼:
public class MainActivity extends Activity {
	private static final String TAG = "MainActivity";
	private UiLifecycleHelper uiHelper;

	private Session.StatusCallback callback = new Session.StatusCallback() {
		@Override
		public void call(Session session, SessionState state,
				Exception exception) {
			onSessionStateChange(session, state, exception);
		}
	};

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		uiHelper = new UiLifecycleHelper(MainActivity.this, callback);
		uiHelper.onCreate(savedInstanceState);
		
		setContentView(R.layout.activity_main);
		LoginButton authButton = (LoginButton) findViewById(R.id.login_button);
		authButton.setReadPermissions(Arrays
				.asList("email","user_likes", "user_status"));

	}
	
	private void onSessionStateChange(Session session, SessionState state,
			Exception exception) {
		if (state.isOpened()) {
			Log.i(TAG, "Logged in...");
		} else if (state.isClosed()) {
			Log.i(TAG, "Logged out...");
		}
	}
	
	@Override
	public void onResume() {
		super.onResume();

		// For scenarios where the main activity is launched and user
		// session is not null, the session state change notification
		// may not be triggered. Trigger it if it's open/closed.
		Session session = Session.getActiveSession();
		if (session != null && (session.isOpened() || session.isClosed())) {
			onSessionStateChange(session, session.getState(), null);
		}

		uiHelper.onResume();
	}

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

	@Override
	public void onPause() {
		super.onPause();
		uiHelper.onPause();
	}

	@Override
	public void onDestroy() {
		super.onDestroy();
		uiHelper.onDestroy();
	}

	@Override
	public void onSaveInstanceState(Bundle outState) {
		super.onSaveInstanceState(outState);
		uiHelper.onSaveInstanceState(outState);
	}
	
}

如果想得到使用者的基本資訊:
private void getUserInfo() {
		  String fqlQuery = "SELECT uid,name,email FROM user WHERE uid = me()";  
        Bundle params = new Bundle();  
        params.putString("q", fqlQuery);  
        Request request = new Request(Session.getActiveSession(),  
            "/me",                           
            params,                           
            HttpMethod.GET,                   
            new Request.Callback(){           
                public void onCompleted(Response response) {  
                    String str = response.toString();
                	  Log.i(TAG, str); 
                }                    
        });   
        Request.executeBatchAsync(request);
	}