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

Android Kotlin - Facebook Login - get user data

我是 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 的文档很奇怪而且很差!

发送 GraphRequest 使用签名 accessToken,您将获得 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);
        }
    });

转换成科特林

Accepted 在 Interface GraphJSONObjectCallback does not have constructors

Kotlin 中给我一个错误

这个 GraphRequest.newMeRequest 的略微修改版本对我有用。

  LoginManager.getInstance().logInWithReadPermissions(this@MainActivity, Arrays.asList("email", "public_profile"))

  LoginManager.getInstance()
    .registerCallback(mCallbackManager, object : FacebookCallback<LoginResult> {
      override fun onSuccess(loginResult: LoginResult) {

        val token = loginResult.accessToken

        val request = GraphRequest.newMeRequest(
          token,
          object : GraphRequest.GraphJSONObjectCallback {
            override fun onCompleted(
              obj: JSONObject?,
              response: GraphResponse?
            ) {

              try {
                // Save user email to variable
                email = obj!!.getString("email")
                firstName = obj.getString("first_name")
                lastName = obj.getString("last_name")
                Log.d(TAG, "1) Facebook email received $email and name $firstName $lastName")
                handleFacebookAccessToken(token)
              }
              catch (e: JSONException) {
                Toast.makeText(
                  this@MainActivity,
                  "Facebook Authentication Failed.",
                  Toast.LENGTH_LONG
                ).show()
              }
            }
          })

        val parameters = Bundle()
        parameters.putString("fields", "email,first_name,last_name")
        request.parameters = parameters
        request.executeAsync()
      }

      override fun onCancel() {
        Log.d(TAG, "facebook:onCancel")
        Toast.makeText(this@MainActivity, "Facebook Login Cancelled", Toast.LENGTH_LONG).show()
      }

      override fun onError(error: FacebookException) {
        Log.d(TAG, "facebook:onError", error)
        Toast.makeText(this@MainActivity, "Facebook Authentication Failed", Toast.LENGTH_LONG)
          .show()
      }
    })