сохраните данные для входа в facebook после входа в систему — Kotlin

#java #android #facebook #kotlin #authentication

Вопрос:

у меня есть обычная регистрация,которая запрашивает у пользователя имя пользователя,адрес электронной почты, пол и пароль, и эта информация хранится в Firebase

таким образом, обычная регистрация работает нормально, и данные сохраняются в Firebase после регистрации

вот кнопка onclick для регистрации:

 if ( !validateName() || !validateUsername() || !validatePassword()) {
            return@setOnClickListener
        } else {

            progressBar.visibility = View.VISIBLE

            val name = mUsername.editableText.toString().trim()
            val email = mEmail.editableText.toString().trim()
            val password = mPassword.editableText.toString().trim()
            val gender = mGender.editableText.toString().trim()

            mAuth.createUserWithEmailAndPassword(email, password)
                .addOnCompleteListener(object : OnCompleteListener<AuthResult> {
                    override fun onComplete(p0: Task<AuthResult>) {
                        Log.e("zzzzz",p0.isSuccessful.toString())
                        if (p0.isSuccessful) {

                            FirebaseInstallations.getInstance().getToken(true).addOnCompleteListener {
                                var fbToken = it.result!!.token


                                val sharedPreference2 = getSharedPreferences("isLogin", Context.MODE_PRIVATE)
                                var editor2 = sharedPreference2.edit()
                                editor2.putBoolean("isLogin", true)
                                editor2.putString("UserToken", fbToken)
                                editor2.commit()


                                Log.e("ggg",fbToken)
                                // DO your thing with your firebase token
                            }

                            val signupdata = Signupdata(name, email, password, gender)





                            var okHttpClient = OkHttpClient.Builder().apply {
                                addInterceptor(
                                    Interceptor { chain ->
                                        val builder = chain.request().newBuilder()
                                        builder.header("X-App-Version", "0")
                                        builder.header("X-Platform", "0")
                                        builder.header("X-Auth-Token", "0")
                                        return@Interceptor chain.proceed(builder.build())
                                    }
                                )
                            }.build()

                            val apiInterface2 = ApiInterface2.create().getMovies()

                            //apiInterface.enqueue( Callback<List<Movie>>())
                            apiInterface2.enqueue(object : Callback<MutableList<Duadata>> {
                                override fun onResponse(
                                    call: Call<MutableList<Duadata>>?,
                                    response: Response<MutableList<Duadata>>?
                                ) {

                                    //   Log.e("res", response!!.body().toString())

                                    if (response?.body() != null)
                                        response.body()!!
                                }

                                override fun onFailure(call: Call<MutableList<Duadata>>?, t: Throwable?) {

                                }
                            })


                            val sharedPreference3 = getSharedPreferences("isLogin", Context.MODE_PRIVATE)
                            var editor3 = sharedPreference3.edit()
                            //  editor2.putString("UserToken", it.token.toString())





                            val sharedPreference = getSharedPreferences("User_Data", Context.MODE_PRIVATE)
                            var editor = sharedPreference.edit()
                            editor.putString("user_id", FirebaseAuth.getInstance().currentUser!!.uid)
                            editor.putString("email_id", email)
                            editor.putString("username",name)
                            editor.putString("gender",gender)
                            editor.commit()





                            Toast.makeText(
                                applicationContext,
                                "Registered Successfully!",
                                Toast.LENGTH_SHORT
                            ).show()




                            val intent =
                                Intent(this@SignupActivity, MainActivity::class.java)
                            intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK
                            intent.putExtra("user_id",
                                FirebaseAuth.getInstance().currentUser!!.uid
                            )
                            intent.putExtra("email_id", email)
                            startActivity(intent)
                            finish()


                        } else {


                            progressBar.visibility = View.GONE
                            Toast.makeText(
                                applicationContext,
                                p0.exception?.message,
                                Toast.LENGTH_LONG
                            ).show()
                            Log.e("TAG_P", "failure!", p0.exception)
                        }
                    }

                })
        }
 

приведенный выше код работает нормально.

теперь я пытаюсь войти в систему facebook, как показано ниже:

 @SuppressLint("LongLogTag")
fun getUserProfile(token: AccessToken?, userId: String?) {

    val parameters = Bundle()
    parameters.putString(
        "fields",
        "id, first_name, middle_name, last_name, name, picture, email"
    )
    GraphRequest(token,
        "/$userId/",
        parameters,
        HttpMethod.GET,
        GraphRequest.Callback { response ->
            val jsonObject = response.jsonObject

            // Facebook Access Token
            // You can see Access Token only in Debug mode.
            // You can't see it in Logcat using Log.d, Facebook did that to avoid leaking user's access token.
            if (BuildConfig.DEBUG) {
                FacebookSdk.setIsDebugEnabled(true)
                FacebookSdk.addLoggingBehavior(LoggingBehavior.INCLUDE_ACCESS_TOKENS)
            }
            accessToken = token.toString()

            // Facebook Id
            if (jsonObject.has("id")) {
                val facebookId = jsonObject.getString("id")
                Log.i("Facebook Id: ", facebookId.toString())
                id = facebookId.toString()
            } else {
                Log.i("Facebook Id: ", "Not exists")
                id = "Not exists"
            }


            // Facebook First Name
            if (jsonObject.has("first_name")) {
                val facebookFirstName = jsonObject.getString("first_name")
                Log.i("Facebook First Name: ", facebookFirstName)
                firstName = facebookFirstName
            } else {
                Log.i("Facebook First Name: ", "Not exists")
                firstName = "Not exists"
            }


            // Facebook Middle Name
            if (jsonObject.has("middle_name")) {
                val facebookMiddleName = jsonObject.getString("middle_name")
                Log.i("Facebook Middle Name: ", facebookMiddleName)
                middleName = facebookMiddleName
            } else {
                Log.i("Facebook Middle Name: ", "Not exists")
                middleName = "Not exists"
            }


            // Facebook Last Name
            if (jsonObject.has("last_name")) {
                val facebookLastName = jsonObject.getString("last_name")
                Log.i("Facebook Last Name: ", facebookLastName)
                lastName = facebookLastName
            } else {
                Log.i("Facebook Last Name: ", "Not exists")
                lastName = "Not exists"
            }


            // Facebook Name
            if (jsonObject.has("name")) {
                val facebookName = jsonObject.getString("name")
                Log.i("Facebook Name: ", facebookName)
                name = facebookName
            } else {
                Log.i("Facebook Name: ", "Not exists")
                name = "Not exists"
            }


            // Facebook Profile Pic URL
            if (jsonObject.has("picture")) {
                val facebookPictureObject = jsonObject.getJSONObject("picture")
                if (facebookPictureObject.has("data")) {
                    val facebookDataObject = facebookPictureObject.getJSONObject("data")
                    if (facebookDataObject.has("url")) {
                        val facebookProfilePicURL = facebookDataObject.getString("url")
                        Log.i("Facebook Profile Pic URL: ", facebookProfilePicURL)
                        picture = facebookProfilePicURL
                    }
                }
            } else {
                Log.i("Facebook Profile Pic URL: ", "Not exists")
                picture = "Not exists"
            }

            // Facebook Email
            if (jsonObject.has("email")) {
                val facebookEmail = jsonObject.getString("email")
                Log.i("Facebook Email: ", facebookEmail)
                email = facebookEmail
            } else {
                Log.i("Facebook Email: ", "Not exists")
                email = "Not exists"
            }

            openDetailsActivity()
        }).executeAsync()
}

private fun openDetailsActivity() {
    FirebaseInstallations.getInstance().getToken(true).addOnCompleteListener {
        

        
    }
    val myIntent = Intent(this, DetailsActivity::class.java)
    myIntent.putExtra("facebook_id", id)
    myIntent.putExtra("facebook_first_name", firstName)
    myIntent.putExtra("facebook_middle_name", middleName)
    myIntent.putExtra("facebook_last_name", lastName)
    myIntent.putExtra("facebook_name", name)
    myIntent.putExtra("facebook_picture", picture)
    myIntent.putExtra("facebook_email", email)
    myIntent.putExtra("facebook_access_token", accessToken)
    startActivity(myIntent)
}
 

вход в систему завершается таким образом, и я перехожу в раздел «Подробная информация», и я вижу информацию из входа в Facebook

вот что я пытаюсь сделать сейчас

Я пытаюсь сохранить эти данные из Facebook так же, как они были сохранены, если пользователь использовал обычную регистрацию, я пытался использовать общую ссылку и таким же образом со страницы обычной регистрации многими способами, но я не смог этого сделать

«Я все еще изучаю Котлин (новичок), поэтому, пожалуйста, будьте терпеливы со мной, и если вы знаете, как решить эту проблему, пожалуйста, следуйте за мной шаг за шагом».

Заранее спасибо

Комментарии:

1. Что происходит не так, когда вы пытаетесь сохранить его внутри SharedPreferences ? Можете ли вы поделиться этим кодом ?

2. в первом коде есть «val SharedPreference = getSharedPreferences(«User_Data», Context.MODE_PRIVATE) редактор var = SharedPreference.edit() редактор.putString(«идентификатор пользователя», FirebaseAuth.getInstance().текущий пользователь!!.uid) редактор.putString(«идентификатор электронной почты», электронная почта) редактор.putString(«имя пользователя»,имя) редактор.putString(«пол»,пол) редактор.commit()» я хочу, чтобы используйте это также для сохранения входа в данные facebook, я не могу этого добиться

Ответ №1:

В своем коде вы используете editor.commit()

 val sharedPreference = getSharedPreferences("User_Data", Context.MODE_PRIVATE)
var editor = sharedPreference.edit()
editor.putString("user_id", FirebaseAuth.getInstance().currentUser!!.uid)
editor.putString("email_id", email)
editor.putString("username",name)
editor.putString("gender",gender)
editor.commit()
 

Согласно документам, его рекомендуется использовать editor.apply() , так как он записывает обновления на диск асинхронно. Подробнее


Вот фрагмент кода, который я использую в своем проекте.

 private val preference: SharedPreferences = PreferenceManager.getDefaultSharedPreferences(requireContext())
preference.edit()
    .putString("KEY", "VALUE")
    .putString("KEY", "VALUE")
    .apply()
 

Комментарии:

1. Таблица «User_Data» работает нормально, я имел в виду, что хочу использовать ту же таблицу для сохранения данных facebook(второй код в моем вопросе)