You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于Firebase的应用:用户操作时如何向注册手机号发送SMS通知

Hey there! Let's tackle your two Firebase SMS notification questions—both are totally achievable with Firebase's ecosystem plus a third-party SMS service (since Firebase doesn't offer native SMS sending). Let's break it down step by step.

1. Sending SMS Notifications to Registered Phone Numbers in a Firebase-Powered Social Network

Since your users are registered with phone numbers, Firebase Auth already stores their contact info—perfect for targeting notifications. Here's how to set it up:

  • Step 1: Pick a Third-Party SMS Service
    Grab an account with a service like Twilio, Plivo, or Nexmo. You'll need their API credentials (like Account SID and Auth Token for Twilio) plus a dedicated SMS sending number.

  • Step 2: Configure Firebase Cloud Functions
    First, navigate to your Firebase project's functions directory and install the SMS service's SDK (we'll use Twilio as an example):

    npm install twilio
    

    Next, store your SMS credentials in Firebase's environment variables (so you don't hardcode sensitive data):
    Go to Firebase Console → Project Settings → Environment Variables, then add:

    • TWILIO_ACCOUNT_SID
    • TWILIO_AUTH_TOKEN
    • TWILIO_PHONE_NUMBER
  • Step 3: Write the Cloud Function
    Create a callable function that handles sending SMS. You can trigger this from your app when a social event happens (like a friend request, post mention, etc.):

    const functions = require("firebase-functions");
    const twilio = require("twilio");
    
    // Initialize Twilio client with environment variables
    const client = twilio(
      functions.config().twilio.account_sid,
      functions.config().twilio.auth_token
    );
    
    exports.sendSocialSMSNotification = functions.https.onCall(async (data, context) => {
      // Optional: Verify the caller is authenticated (prevents abuse)
      if (!context.auth) {
        throw new functions.https.HttpsError(
          "unauthenticated",
          "Only logged-in users can trigger notifications."
        );
      }
    
      const { targetPhone, message } = data;
    
      // Validate phone number format (must include country code, e.g., +1 for US)
      if (!targetPhone.startsWith("+")) {
        throw new functions.https.HttpsError(
          "invalid-argument",
          "Phone number needs a country code (e.g., +44 for UK)."
        );
      }
    
      try {
        await client.messages.create({
          body: message,
          from: functions.config().twilio.phone_number,
          to: targetPhone
        });
        return { success: true, msg: "SMS sent successfully!" };
      } catch (err) {
        functions.logger.error("SMS send failed:", err);
        throw new functions.https.HttpsError(
          "internal",
          "Oops, something went wrong sending the SMS. Try again later."
        );
      }
    });
    

    Deploy the function to Firebase:

    firebase deploy --only functions
    
  • Step 4: Trigger the Function from Your App
    In your social app (web or mobile), call this function when the event occurs. For example, in Android (Kotlin):

    // When a user receives a friend request
    fun sendFriendRequestNotification(targetPhone: String) {
      val functions = Firebase.functions
      val data = hashMapOf(
        "targetPhone" to targetPhone,
        "message" to "You have a new friend request on our social app! Check it out now."
      )
    
      functions.getHttpsCallable("sendSocialSMSNotification")
        .call(data)
        .addOnSuccessListener { /* Handle success */ }
        .addOnFailureListener { /* Handle error */ }
    }
    
2. Triggering SMS Notifications on User Actions in a Phone-Only Android App

This is similar to the first scenario, but focused on Android-specific user actions (like button taps, form submissions). Here's how to implement it:

  • Step 1: Reuse the SMS Service & Cloud Function Setup
    If you already set up the third-party SMS service and Cloud Function from the first question, you can skip this step—same core logic applies.

  • Step 2: Call the Cloud Function from Android on User Actions
    For example, when a user completes a purchase or updates their profile, trigger the SMS notification. Here's a Kotlin example for a purchase button click:

    purchaseBtn.setOnClickListener {
      // Get the current logged-in user's phone number from Firebase Auth
      val currentUser = FirebaseAuth.getInstance().currentUser
      currentUser?.phoneNumber?.let { userPhone ->
        val functions = Firebase.functions
        val notificationMsg = "Thanks for your purchase! Your order is being processed."
        val data = hashMapOf(
          "targetPhone" to userPhone,
          "message" to notificationMsg
        )
    
        functions.getHttpsCallable("sendSocialSMSNotification")
          .call(data)
          .addOnSuccessListener {
            Toast.makeText(this, "Order confirmation sent!", Toast.LENGTH_SHORT).show()
          }
          .addOnFailureListener { e ->
            Toast.makeText(this, "Failed to send notification: ${e.message}", Toast.LENGTH_SHORT).show()
          }
      } ?: run {
        Toast.makeText(this, "Please log in first!", Toast.LENGTH_SHORT).show()
      }
    }
    
  • Pro Tip: Use Firestore Triggers for Auto-Notifications
    If user actions update your Firestore database (like adding an order), you can set up a Firestore trigger to auto-send SMS without calling the function from Android. This is more secure and avoids client-side abuse:

    exports.sendOrderConfirmation = functions.firestore
      .document("orders/{orderId}")
      .onCreate(async (snap, context) => {
        const orderData = snap.data();
        const userPhone = orderData.userPhone; // Assume your order doc stores the user's phone
        const orderId = context.params.orderId;
        const message = `Your order #${orderId} has been received! We'll update you when it ships.`
    
        try {
          await client.messages.create({
            body: message,
            from: functions.config().twilio.phone_number,
            to: userPhone
          });
          functions.logger.info("Confirmation SMS sent for order:", orderId);
        } catch (err) {
          functions.logger.error("Failed to send order SMS:", err);
        }
      });
    

    Deploy this function, and every time a new order is added to Firestore, the SMS sends automatically.

内容的提问来源于stack exchange,提问作者AL OK

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 11:07:10