Android海外第三方登入之Facebook
程序员文章站
2022-07-13 16:54:39
...
首先需要*(推荐一个*N)
也可以完全参考facebook官方文档(https://developers.facebook.com/docs/facebook-login/android)来一步一步完成(官方文档还是详细的)
//下面是步骤
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!