# #android #firebase #kotlin #google-cloud-functions #stripe-payments
Вопрос:
Я пытаюсь создать идентификатор полосы, когда клиенты регистрируют новую учетную запись в моем приложении для Android, как в моем приложении для iOS. Мой вопрос в том, можно ли использовать ту же облачную функцию для создания клиента Stripe в моем приложении для Android, или мне нужно создать совершенно новую папку функций для Android? Спасибо!
Облачная функция
exports.createStripeCustomer = functions.https.onCall( async (data, context) =gt; { const email = data.email const uid = context.auth.uid console.log(uid) if (uid === null) { console.log('Illegal access attempt due to unauthenticated attempt.') throw new functions.https.HttpsError('internal', 'Illegal access attempt') } return stripe.customers .create({ email: email }) .then((customer) =gt; { return customer["id"]; }) .then((customerId) =gt; { admin.database().ref("customers").child(uid).update({ stripeId: customerId, email: email, id: uid }) }) .catch((err) =gt; { console.log(err); throw new functions.https.HttpsError( "internal", " Unable to create Stripe user : " err ); }); })
Функции Котлина
registerViewStubSignUpButton.setOnClickListener { FirebaseAuth.getInstance().createUserWithEmailAndPassword(registerViewStubEmailTextView.text.toString(), registerViewStubPasswordTextView.text.toString()) .addOnCompleteListener { if (!it.isSuccessful) return@addOnCompleteListener // else if successful uploadImageToFirebaseStorage() uploadStripeCustomer() } .addOnFailureListener { Toast.makeText(this, "Failed to create user: ${it.message}", Toast.LENGTH_SHORT).show() } } private fun uploadImageToFirebaseStorage() { if (selectedPhotoUri == null) return val filename = UUID.randomUUID().toString() val ref = FirebaseStorage.getInstance().getReference("/customer_profile_images/$filename") ref.putFile(selectedPhotoUri!!) .addOnSuccessListener { ref.downloadUrl.addOnSuccessListener { saveCustomerToFirebaseDatabase(it.toString()) } } } private fun saveCustomerToFirebaseDatabase(profileImageUrl: String) { val registerStub = findViewByIdlt;ViewStubgt;(R.id.registerStub) val registerViewStubFullnameTextView = findViewByIdlt;TextInputEditTextgt;(R.id.fullnameInputTextView) val registerViewStubUsernameTextView = findViewByIdlt;TextInputEditTextgt;(R.id.usernameTextInputView) val registerViewStubEmailTextView = findViewByIdlt;TextInputEditTextgt;(R.id.emailInputTextView) val uid = FirebaseAuth.getInstance().uid ?: "" val ref = FirebaseDatabase.getInstance().getReference("/customers/$uid") val customer = Customer(uid, registerViewStubFullnameTextView.text.toString(), registerViewStubUsernameTextView.text.toString(), registerViewStubEmailTextView.text.toString(), profileImageUrl) ref.setValue(customer) .addOnSuccessListener { registerStub.alpha = 0f finish() } } private fun uploadStripeCustomer() { }
Комментарии:
1. Нет никаких причин, по которым вы не можете совместно использовать одну и ту же функцию HTTP между приложениями Android и iOS, предполагая, что там нет ничего конкретного ни для того, ни для другого.
2. Спасибо! Я так и думал, но нужно было проверить.
Ответ №1:
Это зависит от варианта использования. Если облачная функция Firebase выполняет одну и ту же задачу как для приложений iOS, так и для приложений Android, то использование только одного должно работать. Если для приложений iOS и Android существует какой-то другой вариант использования, то следует использовать две разные облачные функции.
В вашем случае, похоже, вы создаете stripeID
, когда клиент регистрируется для новой учетной записи как в приложениях iOS, так и в приложениях Android, поэтому разумно использовать одну облачную функцию Firebase как для приложений iOS, так и для приложений Android.
Комментарии:
1. Спасибо! Я так и думал, просто хотел проверить.