Facebook 登录接入记录

来源:互联网 发布:led彩屏控制软件 编辑:程序博客网 时间:2024/05/16 05:40

Facebook 登录接入记录

1. 注册 Facebook 账号

2. 在开发者中心创建应用

https://developers.facebook.com/

这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

3. 接入sdk

https://developers.facebook.com/docs/android/getting-started/,较早的版本有中文

compile 'com.facebook.android:facebook-login:4.28.0'<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" /><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>

主要代码

先注册登录回调

 LoginManager.getInstance().registerCallback(callbackManager,                new FacebookCallback<LoginResult>() {                    @Override                    public void onSuccess(LoginResult loginResult) {                        Logger.d(loginResult.getAccessToken());                        // Profile.getCurrentProfile()  null                     }                    @Override                    public void onCancel() {                        // App code                    }                    @Override                    public void onError(FacebookException exception) {                        // App code                    }                });

调用登录

Collection<String> permissions = Arrays.asList("public_profile", "email", " user_friends");LoginManager.getInstance().logInWithReadPermissions(this, permissions);

这里写图片描述

没安装应用是会自动使用网页登录

问题

1. 获取 token 后 profile 为 null

Profile 不是立即更新的,还得等他更新

@Overridepublic void onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    callbackManager = CallbackManager.Factory.create();    profileTracker = new ProfileTracker() {        @Override        protected void onCurrentProfileChanged(                Profile oldProfile,                Profile currentProfile) {            // App code        }    };}@Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) {    super.onActivityResult(requestCode, resultCode, data);    callbackManager.onActivityResult(requestCode, resultCode, data);}@Overridepublic void onDestroy() {    super.onDestroy();    profileTracker.stopTracking();}

放到 getToken 之后,等 profile 更新了再获取内容

2. 权限

刚注册的应用默认只有 “public_profile”, “email”, ” user_friends”, 对应的就是个人信息和好友信息

但 user_friends 只有好友数量信息而已,其他信息则需要申请额外权限,调用其他接口获取

3. 退出

LoginManager.getInstance().logOut();

4. 接口访问

sdk 并没有封装所有的接口,只提供了类似 asyncHttp 的 http 访问工具类,通过sdk只能获取基本信息,更多数据则需要自己访问接口

具体的接口信息都在 https://developers.facebook.com/docs/graph-api

比如用户好友信息

public class UserFriendsRequest {    public static void makeRequest(GraphRequest.Callback callback) {        String userId = Profile.getCurrentProfile().getId();        String endPoint = String.format("/%s/friends", userId);        GraphRequest request = new GraphRequest(                AccessToken.getCurrentAccessToken(),                endPoint,                null,                HttpMethod.GET,                callback        );        request.executeAsync();    }} 

然后判断错误,json 转 obj 就可以了

mCallback = new GraphRequest.Callback() {        @Override        public void onCompleted(GraphResponse response) {            if (response.getError() == null) {                UserFriendsResp userFriendsResp = parse(response.getRawResponse());                if (userFriendsResp != null) {                    mGetUserFriendsResponse.onCompleted(userFriendsResp);                    return;                }            }            mGetUserFriendsResponse.onError();        }    };
原创粉丝点击