Facebook信息没有显示

时间:2017-10-25 01:34:11

标签: android facebook button sdk kotlin

我尝试使用此代码获取用户信息,但未在活动中显示 个人资料图片和名称未在基础上创建新用户

我错过了什么? 有没有人用Kotlin编码过这个?

private fun handleFacebookAccessToken(token: AccessToken) {
    Log.d(TAG, "handleFacebookAccessToken:" + token)

    val credential = FacebookAuthProvider.getCredential(token.token)
    App.currentAuth.signInWithCredential(credential)
            .addOnCompleteListener(this) { Log.d(TAG, "signInWithCredential:success") }
            .addOnSuccessListener(this) { authResult ->
                if (authResult != null) {
                    val firebaseUser = authResult.user
                    if (App.database_table_users.child(firebaseUser.uid) == null) {
                        var facebookId = ""
                        firebaseUser.providerData
                                .filter { it.providerId == FacebookAuthProvider.PROVIDER_ID }
                                .forEach { facebookId = it.uid }

                        val photoUrl = "https://graph.facebook.com/$facebookId/picture?width=1024&height=1024"
                        App.database_table_users.child(firebaseUser.uid).setValue(
                                User(firebaseUser.uid,
                                        firebaseUser.email.orEmpty(),
                                        firebaseUser.displayName.orEmpty(),
                                        photoUrl,
                                        false
                                )
                        )
                    }
                }
            }
            .addOnFailureListener(this) { ex ->
                if (ex is FirebaseAuthUserCollisionException) {
                    LoginManager.getInstance().logOut()
                    val ad = AlertDialog.Builder(this@LoginActivity)
                    ad.setMessage(getString(R.string.auth_user_collision))
                    ad.setPositiveButton(getString(R.string.ok), null)
                    ad.show()
                } else {
                    ex.printStackTrace()
                }
            }
}

2 个答案:

答案 0 :(得分:0)

您必须使用FirebaseAuth.getInstance()而不是App.currentAuth。 例如;

val mAuth = FirebaseAuth.getInstance()

val credential = FacebookAuthProvider.getCredential(token)
mAuth.signInWithCredential(credential)
  .addOnCompleteListener(this) { task ->
    if (task.isSuccessful) {

      val user = mAuth.currentUser

    } else {

      task.exception?.printStackTrace()

    }
  }

答案 1 :(得分:0)

试试这对我有用

 private fun loginWithFaceBook()
    {
        LoginManager.getInstance().registerCallback(callbackManager, facebookCallBack)
        LoginManager.getInstance().logInWithReadPermissions(this, Arrays.asList("public_profile","email"))
    }

    private val facebookCallBack = object : FacebookCallback<LoginResult> {

        override fun onSuccess(result: LoginResult?) {
                val graphRequest = GraphRequest.newMeRequest(result?.accessToken) { _, response ->

                val graphObject = response.jsonObject
                val id = if(graphObject.has("id")) graphObject.getString("id") else null
                val email = if(graphObject.has("email")) graphObject.getString("email") else null
                val firstName = if(graphObject.has("first_name")) graphObject.getString("first_name") else null
                val lastName = if(graphObject.has("last_name")) graphObject.getString("last_name") else null
                val photoUrl = if(graphObject.has("picture")) {
                        val picture : JSONObject = graphObject.getJSONObject("picture")
                        if(picture.has("data") && picture.has("url") && picture.getString("url").isNotBlank()) {
                           picture.getString("url")
                        }
                        else
                            null
                }
                else


            val bundle = Bundle()
            bundle.putString("fields", "id,first_name,last_name,name,picture,email,gender,birthday,link")
            graphRequest.parameters = bundle
            graphRequest.executeAsync()

        }

        override fun onError(error: FacebookException) {
            when{
                error.message != null -> showSnackbar(error.message.toString())
            }
        }

        override fun onCancel() {

        }
    }