【问题标题】:Facebook info not showing脸书信息不显示
【发布时间】:2017-10-25 01:34:11
【问题描述】:

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

我错过了什么? 有人用 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()
                }
            }
}

【问题讨论】:

    标签: android facebook button sdk kotlin


    【解决方案1】:

    您必须使用 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()
    
        }
      }
    

    【讨论】:

      【解决方案2】:

      试试这个对我有用

       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() {
      
              }
          }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-03-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多