Android海外第三方登入之Facebook
阿新 • • 發佈:2019-02-19
首先需要翻牆(推薦一個V2RayN)
//下面是步驟
1.通過facebook開發者平臺(建立包名和關聯應用預設類,預設類可以填寫App一開始啟動的那個Activity,提供祕鑰,啟用登入)獲取到facebook的AppId 將其新增到 /app/res/values/strings.xml
檔案
具體
<string name="facebook_app_id">[APP_ID]</string>
<string name="fb_login_protocol_scheme">fb[APP_ID]</string>
2.在app/build.gradle 新增依賴
implementation 'com.facebook.android:facebook-android-sdk:[4,5)'
3.在清單檔案(/app/manifest/AndroidManifest.xml)開啟聯網許可權
<uses-permission android:name="android.permission.INTERNET"/>
4.清單檔案下的application新增相應的程式碼
<meta-data android:name="com.facebook.sdk.ApplicationId" android:value="@string/facebook_app_id"/> <activity android:name="com.facebook.FacebookActivity" android:configChanges="keyboard|keyboardHidden|screenLayout|screenSize|orientation" android:label="@string/app_name" /> <provider android:name="com.facebook.FacebookContentProvider" android:authorities="com.facebook.app.FacebookContentProviderxxx" android:exported="true" />
5.在所需要的activity或fragment 寫點選登入的按鈕(也可以使用facebook自帶的LoginButton)
寫一個Imageview 實現點選事件,點選後具體程式碼
CallbackManager callbackManager = CallbackManager.Factory.create();
//實現結果回撥獲取AccessToken LoginManager.getInstance().registerCallback(callbackManager, new FacebookCallback<LoginResult>() { @Override public void onSuccess(LoginResult loginResult) { AccessToken accessToken = loginResult.getAccessToken(); } @Override public void onCancel() { LogUtils.i("FacebookException Cancel"); } @Override public void onError(FacebookException error) { LogUtils.i("FacebookException" + error.getMessage()); } }); //跳轉登入 LoginManager.getInstance().logInWithReadPermissions(activity, Arrays.asList("public_profile", "user_friends"));
6.facebook登入返回的結果是通過 onActivityResult 獲取的(CallbackManager 弄成全域性的在onActivityResult 呼叫其方法)
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
callbackManager.onActivityResult(requestCode, resultCode, data);
}
7.第5步獲取的accessToken可以得到Token,UserId ,想要更詳細的使用者資料可呼叫以下方法
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") ; //郵箱:比如:[email protected]
//獲取使用者頭像
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 代表中文簡體
}
}
}) ;
Over!