Android Kotlin - Facebook 登录 - 获取用户数据

标签 android kotlin facebook-sdk-4.0

我是 android 开发的新手,已经搜索了几个小时都没有找到如何在 facebook 登录后获取该死的用户数据的方法!

这是代码:

private var callbackManager: CallbackManager? = null

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_fb_connect)




        // Login
        callbackManager = CallbackManager.Factory.create()
        LoginManager.getInstance().logInWithReadPermissions(this, Arrays.asList("public_profile", "email"))
        LoginManager.getInstance().registerCallback(callbackManager,
                object : FacebookCallback<LoginResult> {
                    override fun onSuccess(loginResult: LoginResult) {
                        Log.d("letsSee", "Facebook token: " + loginResult.accessToken.token)

                    }

                    override fun onCancel() {
                        Log.d("letsSee", "Facebook onCancel.")

                    }

                    override fun onError(error: FacebookException) {
                        Log.d("letsSee", "Facebook onError.")

                    }
                })

}

override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
    super.onActivityResult(requestCode, resultCode, data)

    callbackManager?.onActivityResult(requestCode, resultCode, data)

    Log.d("letsSee", "malsehnnnnnn: " + data)
}

底部的 Log.d("letsSee", "malsehnnnnnn: "+ data) 给出:malsehnnnnnn: Intent { (has extras) }

该死的数据在哪里???? Facebook 文档很奇怪而且很差!

最佳答案

使用 accessToken 发送 GraphRequest,您将获得请求字段的 json。

更新为 kotlin

LoginManager.getInstance().registerCallback(callbackManager, object : FacebookCallback<LoginResult> {
        override fun onSuccess(loginResult: LoginResult) {
            Logger.d("FBLOGIN", loginResult.accessToken.token.toString())
            Logger.d("FBLOGIN", loginResult.recentlyDeniedPermissions.toString())
            Logger.d("FBLOGIN", loginResult.recentlyGrantedPermissions.toString())


            val request = GraphRequest.newMeRequest(loginResult.accessToken) { `object`, response ->
                try {
                    //here is the data that you want
                    Logger.d("FBLOGIN_JSON_RES", `object`.toString())

                    if (`object`.has("id")) {
                        handleSignInResultFacebook(`object`)
                    } else {
                        Logger.e("FBLOGIN_FAILD", `object`.toString())
                    }

                } catch (e: Exception) {
                    e.printStackTrace()
                    dismissDialogLogin()
                }
            }

            val parameters = Bundle()
            parameters.putString("fields", "name,email,id,picture.type(large)")
            request.parameters = parameters
            request.executeAsync()

        }

        override fun onCancel() {
            Logger.e("FBLOGIN_FAILD", "Cancel")
        }

        override fun onError(error: FacebookException) {
            Logger.e("FBLOGIN_FAILD", "ERROR", error)
        }
    })

旧答案

这是为我工作的java代码

    LoginManager.getInstance().registerCallback(callbackManager, new FacebookCallback<LoginResult>() {
        @Override
        public void onSuccess(LoginResult loginResult) {
            Logger.d("FBLOGIN", String.valueOf(loginResult.getAccessToken().getToken()));
            Logger.d("FBLOGIN", String.valueOf(loginResult.getRecentlyDeniedPermissions().toString()));
            Logger.d("FBLOGIN", String.valueOf(loginResult.getRecentlyGrantedPermissions().toString()));


            final GraphRequest request = GraphRequest.newMeRequest(loginResult.getAccessToken(), new GraphRequest.GraphJSONObjectCallback() {
                @Override
                public void onCompleted(JSONObject object, GraphResponse response) {
                    try {
                        //here is the data that you want
                        Logger.d("FBLOGIN_JSON_RES", String.valueOf(object));

                        if (object.has("id")) {
                            handleSignInResultFacebook(object);
                        } else {
                            Logger.e("FBLOGIN_FAILD", String.valueOf(object));
                        }

                    } catch (Exception e) {
                        e.printStackTrace();
                        dismissDialogLogin();
                    }
                }
            });

            final Bundle parameters = new Bundle();
            parameters.putString("fields", "name,email,id,picture.type(large)");
            request.setParameters(parameters);
            request.executeAsync();

        }

        @Override
        public void onCancel() {
            Logger.e("FBLOGIN_FAILD", "Cancel");
        }

        @Override
        public void onError(FacebookException error) {
            Logger.e("FBLOGIN_FAILD", "ERROR", error);
        }
    });

转换成 Kotlin

关于Android Kotlin - Facebook 登录 - 获取用户数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51736106/

相关文章:

android - 为什么在 Jetpack Compose 中多次调用此函数?

android - 从 Android 将图像保存在 SQLite 数据库中

Kotlin 如何声明具有相同数据类型的链接字段

android - 改造@Url 不会覆盖 BaseUrl

android - Dagger 2 无法访问 Retrofit

android - 当用户在另一个 Activity 中编辑了某些字段时更新先前 Activity 中的数据,onRestart?

java - 如何解决java.lang.RuntimeException : Unable to start activity?

android - 应用重启后 Facebook 访问 token 丢失

android - Facebook SDK 无效哈希键