Catch up on everthing we announced at this year's Firebase Summit. Learn more

ตรวจสอบสิทธิ์โดยใช้ Apple บน Android

คุณอนุญาตให้ผู้ใช้ตรวจสอบสิทธิ์กับ Firebase โดยใช้ Apple ID ของตนได้โดยใช้ Firebase SDK เพื่อดำเนินการขั้นตอนการลงชื่อเข้าใช้ OAuth 2.0 ตั้งแต่ต้นทางถึงปลายทาง

ก่อนจะเริ่ม

ในการลงชื่อเข้าใช้ผู้ใช้โดยใช้ Apple ก่อนอื่นให้กำหนดค่าการลงชื่อเข้าใช้ด้วย Apple บนเว็บไซต์นักพัฒนาของ Apple จากนั้นเปิดใช้งาน Apple เป็นผู้ให้บริการการลงชื่อเข้าใช้สำหรับโปรเจ็กต์ Firebase ของคุณ

เข้าร่วม Apple Developer Program

เข้าสู่ระบบด้วยแอปเปิ้ลเท่านั้นที่สามารถกำหนดค่าโดยสมาชิกของ แอปเปิ้ลผู้พัฒนาโปรแกรม

กำหนดค่าการลงชื่อเข้าใช้ด้วย Apple

ใน ผู้พัฒนาแอปเปิ้ล เว็บไซต์ทำต่อไปนี้:

  1. เชื่อมโยงเว็บไซต์ของคุณไปยังแอปที่อธิบายไว้ในส่วนแรกของ การกำหนดค่าการเข้าสู่ระบบกับแอปเปิ้ลสำหรับเว็บ เมื่อได้รับแจ้ง ให้ลงทะเบียน URL ต่อไปนี้เป็น Return URL:

    https://YOUR_FIREBASE_PROJECT_ID.firebaseapp.com/__/auth/handler

    คุณจะได้รับรหัสโครงการ Firebase ของคุณบน หน้า Firebase คอนโซลการตั้งค่า

    เมื่อเสร็จแล้ว ให้จดรหัสบริการใหม่ของคุณ ซึ่งคุณจะต้องใช้ในส่วนถัดไป

  2. สร้างเข้าสู่ระบบด้วยคีย์ส่วนตัวแอปเปิ้ล คุณจะต้องใช้คีย์ส่วนตัวและรหัสคีย์ใหม่ในส่วนถัดไป
  3. หากคุณใช้ใด ๆ ของคุณสมบัติ Firebase รับรองความถูกต้องของที่ส่งอีเมลไปยังผู้ใช้อีเมลรวมทั้งเชื่อมโยงเข้าสู่ระบบในการตรวจสอบที่อยู่อีเมลเปลี่ยนแปลงบัญชีเพิกถอนและอื่น ๆ การกำหนดค่าบริการอีเมลถ่ายทอดส่วนตัวแอปเปิ้ล และลงทะเบียน noreply@ YOUR_FIREBASE_PROJECT_ID .firebaseapp.com (หรือ โดเมนเทมเพลตอีเมลที่คุณกำหนดเอง) เพื่อให้ Apple สามารถส่งต่ออีเมลที่ส่งโดยการตรวจสอบสิทธิ์ Firebase ไปยังที่อยู่อีเมล Apple ที่ไม่ระบุตัวตน

เปิดใช้งาน Apple เป็นผู้ให้บริการลงชื่อเข้าใช้

  1. เพิ่ม Firebase กับโครงการ Android ของคุณ อย่าลืมลงทะเบียนลายเซ็น SHA-1 ของแอปเมื่อคุณตั้งค่าแอปในคอนโซล Firebase
  2. ใน Firebase คอนโซล , เปิดส่วนการตรวจสอบสิทธิ์ ที่ลงในแท็บวิธีการที่ช่วยให้ผู้ให้บริการแอปเปิ้ล ระบุรหัสบริการที่คุณสร้างในส่วนก่อนหน้า นอกจากนี้ในรหัส OAuth ส่วนการกำหนดค่าการไหลของแอปเปิ้ลระบุทีม ID ของคุณและคีย์ส่วนตัวและรหัสสำคัญที่คุณสร้างในส่วนก่อนหน้า

ปฏิบัติตามข้อกำหนดด้านข้อมูลที่ไม่ระบุตัวตนของ Apple

เข้าสู่ระบบด้วยแอปเปิ้ลจะช่วยให้ผู้ใช้เลือกของที่ไม่เปิดเผยข้อมูลของพวกเขารวมถึงที่อยู่อีเมลของพวกเขาเมื่อลงนามใน. ผู้ใช้ที่เลือกตัวเลือกนี้มีที่อยู่อีเมลที่มีโดเมน privaterelay.appleid.com เมื่อคุณใช้ลงชื่อเข้าด้วย Apple ในแอปของคุณ คุณต้องปฏิบัติตามนโยบายหรือข้อกำหนดของนักพัฒนาที่เกี่ยวข้องใดๆ จาก Apple เกี่ยวกับ Apple ID ที่ไม่ระบุชื่อเหล่านี้

ซึ่งรวมถึงการขอความยินยอมจากผู้ใช้ที่จำเป็นก่อนที่คุณจะเชื่อมโยงข้อมูลส่วนบุคคลที่ระบุตัวตนโดยตรงใดๆ กับ Apple ID ที่ไม่ระบุชื่อ เมื่อใช้การตรวจสอบสิทธิ์ Firebase อาจรวมถึงการดำเนินการต่อไปนี้:

  • เชื่อมโยงที่อยู่อีเมลกับ Apple ID ที่ไม่ระบุตัวตนหรือในทางกลับกัน
  • เชื่อมโยงหมายเลขโทรศัพท์กับ Apple ID ที่ไม่ระบุตัวตนหรือในทางกลับกัน
  • เชื่อมโยงข้อมูลประจำตัวทางสังคมที่ไม่ระบุชื่อ (Facebook, Google ฯลฯ) กับ Apple ID ที่ไม่ระบุตัวตนหรือในทางกลับกัน

รายการข้างต้นไม่ครบถ้วนสมบูรณ์ โปรดดูข้อตกลงสิทธิ์การใช้งานโปรแกรมนักพัฒนาซอฟต์แวร์ของ Apple ในส่วนการเป็นสมาชิกของบัญชีนักพัฒนาซอฟต์แวร์ของคุณ เพื่อให้แน่ใจว่าแอปของคุณตรงตามข้อกำหนดของ Apple

จัดการขั้นตอนการลงชื่อเข้าใช้ด้วย Firebase SDK

ใน Android วิธีที่ง่ายที่สุดในการตรวจสอบสิทธิ์ผู้ใช้ของคุณด้วย Firebase โดยใช้บัญชี Apple คือการจัดการขั้นตอนการลงชื่อเข้าใช้ทั้งหมดด้วย Firebase Android SDK

ในการจัดการขั้นตอนการลงชื่อเข้าใช้ด้วย Firebase Android SDK ให้ทำตามขั้นตอนเหล่านี้:

  1. สร้างตัวอย่างของการเป็นนักการ OAuthProvider ใช้สร้างด้วยรหัสผู้ให้บริการ apple.com :

    Java

    OAuthProvider.Builder provider = OAuthProvider.newBuilder("apple.com");
    

    คอตลิน+KTX

    val provider = OAuthProvider.newBuilder("apple.com")
    
  2. บังคับ: ระบุเพิ่มเติม OAuth 2.0 ขอบเขตเกินเริ่มต้นที่คุณต้องการที่จะร้องขอจากผู้ให้บริการการตรวจสอบ

    Java

    List<String> scopes =
        new ArrayList<String>() {
          {
            add("email");
            add("name");
          }
        };
    provider.setScopes(scopes);
    

    คอตลิน+KTX

    provider.setScopes(arrayOf("email", "name"))
    

    โดยค่าเริ่มต้นเมื่อหนึ่งบัญชีต่อที่อยู่อีเมลถูกเปิดใช้งาน Firebase ร้องขออีเมลและชื่อขอบเขต ถ้าคุณเปลี่ยนการตั้งค่านี้ไปยังบัญชีหลายต่อที่อยู่อีเมล Firebase ไม่ขอขอบเขตใด ๆ จากแอปเปิ้ลเว้นแต่คุณจะระบุพวกเขา

  3. เลือก: ถ้าคุณต้องการที่จะแสดงแอปเปิ้ลหน้าจอลงชื่อเข้าในภาษาอื่นที่ไม่ใช่ภาษาอังกฤษตั้ง locale พารามิเตอร์ ดู เข้าสู่ระบบด้วยเอกสารแอปเปิ้ล สำหรับสถานที่ได้รับการสนับสนุน

    Java

    // Localize the Apple authentication screen in French.
    provider.addCustomParameter("locale", "fr");
    

    คอตลิน+KTX

    // Localize the Apple authentication screen in French.
    provider.addCustomParameter("locale", "fr")
    
  4. ตรวจสอบสิทธิ์กับ Firebase โดยใช้วัตถุผู้ให้บริการ OAuth โปรดทราบว่าไม่เหมือนที่อื่น FirebaseAuth การดำเนินการนี้จะใช้การควบคุมของคุณ UI โดยการเปิดแท็บ Chrome ที่กำหนดเอง ดังนั้นไม่อ้างอิงกิจกรรมใน OnSuccessListener และ OnFailureListener ที่คุณแนบที่พวกเขาทันทีจะถอดออกเมื่อการดำเนินการเริ่มต้นของ UI

    คุณควรตรวจสอบก่อนว่าคุณได้รับคำตอบแล้วหรือไม่ การลงชื่อเข้าใช้ด้วยวิธีนี้จะทำให้กิจกรรมของคุณอยู่ในพื้นหลัง ซึ่งหมายความว่าระบบสามารถเรียกคืนได้ในระหว่างการลงชื่อเข้าใช้ เพื่อให้แน่ใจว่าคุณจะไม่ให้ผู้ใช้ลองอีกครั้งหากเกิดเหตุการณ์นี้ขึ้น คุณควรตรวจสอบว่ามีผลลัพธ์อยู่แล้วหรือไม่

    เพื่อตรวจสอบว่ามีผลอยู่ระหว่างดำเนินการเรียก getPendingAuthResult() :

    Java

    mAuth = FirebaseAuth.getInstance();
    Task<AuthResult> pending = mAuth.getPendingAuthResult();
    if (pending != null) {
        pending.addOnSuccessListener(new OnSuccessListener<AuthResult>() {
            @Override
            public void onSuccess(AuthResult authResult) {
                Log.d(TAG, "checkPending:onSuccess:" + authResult);
                // Get the user profile with authResult.getUser() and
                // authResult.getAdditionalUserInfo(), and the ID
                // token from Apple with authResult.getCredential().
            }
        }).addOnFailureListener(new OnFailureListener() {
            @Override
            public void onFailure(@NonNull Exception e) {
                Log.w(TAG, "checkPending:onFailure", e);
            }
        });
    } else {
        Log.d(TAG, "pending: null");
    }
    

    คอตลิน+KTX

    val pending = auth.pendingAuthResult
    if (pending != null) {
        pending.addOnSuccessListener { authResult ->
            Log.d(TAG, "checkPending:onSuccess:$authResult")
            // Get the user profile with authResult.getUser() and
            // authResult.getAdditionalUserInfo(), and the ID
            // token from Apple with authResult.getCredential().
        }.addOnFailureListener { e ->
            Log.w(TAG, "checkPending:onFailure", e)
        }
    } else {
        Log.d(TAG, "pending: null")
    }
    

    ถ้าไม่มีผลอยู่ระหว่างดำเนินการเริ่มต้นการเข้าสู่ระบบในการไหลโดยเรียก startActivityForSignInWithProvider() :

    Java

    mAuth.startActivityForSignInWithProvider(this, provider.build())
            .addOnSuccessListener(
                    new OnSuccessListener<AuthResult>() {
                        @Override
                        public void onSuccess(AuthResult authResult) {
                            // Sign-in successful!
                            Log.d(TAG, "activitySignIn:onSuccess:" + authResult.getUser());
                            FirebaseUser user = authResult.getUser();
                            // ...
                        }
                    })
            .addOnFailureListener(
                    new OnFailureListener() {
                        @Override
                        public void onFailure(@NonNull Exception e) {
                            Log.w(TAG, "activitySignIn:onFailure", e);
                        }
                    });
    

    คอตลิน+KTX

    auth.startActivityForSignInWithProvider(this, provider.build())
            .addOnSuccessListener { authResult ->
                // Sign-in successful!
                Log.d(TAG, "activitySignIn:onSuccess:${authResult.user}")
                val user = authResult.user
                // ...
            }
            .addOnFailureListener { e ->
                Log.w(TAG, "activitySignIn:onFailure", e)
            }
    

    ไม่เหมือนกับผู้ให้บริการรายอื่นที่สนับสนุนโดย Firebase Auth Apple ไม่มี URL รูปภาพ

    นอกจากนี้เมื่อผู้ใช้เลือกที่จะไม่ใช้อีเมลของพวกเขากับ app บทบัญญัติแอปเปิ้ลที่อยู่อีเมลที่ไม่ซ้ำกันสำหรับผู้ใช้ (ในรูปแบบ xyz@privaterelay.appleid.com ) ซึ่งหุ้นกับแอปของคุณ หากคุณกำหนดค่าบริการส่งต่ออีเมลส่วนตัว Apple จะส่งต่ออีเมลที่ส่งไปยังที่อยู่ที่ไม่ระบุชื่อไปยังที่อยู่อีเมลจริงของผู้ใช้

    แอปเปิ้ลเพียงข้อมูลของผู้ใช้หุ้นดังกล่าวเป็นชื่อที่แสดงกับแอปเป็นครั้งแรกที่ใช้ลงชื่อเข้าใช้. โดยปกติ Firebase เก็บชื่อที่แสดงเป็นครั้งแรกที่ใช้ลงชื่อเข้าใช้ด้วยแอปเปิ้ลซึ่งคุณสามารถรับกับ getCurrentUser().getDisplayName() อย่างไรก็ตาม หากคุณเคยใช้ Apple เพื่อลงชื่อเข้าใช้แอปให้ผู้ใช้โดยไม่ใช้ Firebase Apple จะไม่ให้ชื่อที่แสดงของผู้ใช้กับ Firebase

การตรวจสอบสิทธิ์ซ้ำและการเชื่อมโยงบัญชี

รูปแบบเดียวกันสามารถใช้กับ startActivityForReauthenticateWithProvider() ซึ่งคุณสามารถใช้เพื่อดึงข้อมูลประจำตัวที่สดใหม่สำหรับการดำเนินงานที่สำคัญที่จำเป็นต้องลงชื่อเข้าใช้ล่าสุด:

Java

// The user is already signed-in.
FirebaseUser firebaseUser = mAuth.getCurrentUser();

firebaseUser
    .startActivityForReauthenticateWithProvider(/* activity= */ this, provider.build())
    .addOnSuccessListener(
        new OnSuccessListener<AuthResult>() {
          @Override
          public void onSuccess(AuthResult authResult) {
            // User is re-authenticated with fresh tokens and
            // should be able to perform sensitive operations
            // like account deletion and email or password
            // update.
          }
        })
    .addOnFailureListener(
        new OnFailureListener() {
          @Override
          public void onFailure(@NonNull Exception e) {
            // Handle failure.
          }
        });

คอตลิน+KTX

// The user is already signed-in.
val firebaseUser = auth.getCurrentUser()

firebaseUser
    .startActivityForReauthenticateWithProvider(/* activity= */ this, provider.build())
    .addOnSuccessListener( authResult -> {
        // User is re-authenticated with fresh tokens and
        // should be able to perform sensitive operations
        // like account deletion and email or password
        // update.
    })
    .addOnFailureListener( e -> {
        // Handle failure.
    })

และคุณสามารถใช้ linkWithCredential() เพื่อเชื่อมโยงผู้ให้บริการตัวตนที่แตกต่างกันในการบัญชีที่มีอยู่

โปรดทราบว่า Apple กำหนดให้คุณต้องได้รับความยินยอมอย่างชัดแจ้งจากผู้ใช้ก่อนที่จะเชื่อมโยงบัญชี Apple กับข้อมูลอื่น

ตัวอย่างเช่น ในการเชื่อมโยงบัญชี Facebook กับบัญชี Firebase ปัจจุบัน ให้ใช้โทเค็นการเข้าถึงที่คุณได้รับจากการลงชื่อเข้าใช้ Facebook:

Java

// Initialize a Facebook credential with a Facebook access token.
AuthCredential credential = FacebookAuthProvider.getCredential(token.getToken());

// Assuming the current user is an Apple user linking a Facebook provider.
mAuth.getCurrentUser().linkWithCredential(credential)
    .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
      @Override
      public void onComplete(@NonNull Task<AuthResult> task) {
        if (task.isSuccessful()) {
          // Facebook credential is linked to the current Apple user.
          // The user can now sign in to the same account
          // with either Apple or Facebook.
        }
      }
    });

คอตลิน+KTX

// Initialize a Facebook credential with a Facebook access token.
val credential = FacebookAuthProvider.getCredential(token.getToken())

// Assuming the current user is an Apple user linking a Facebook provider.
mAuth.getCurrentUser().linkWithCredential(credential)
    .addOnCompleteListener(this, task -> {
        if (task.isSuccessful()) {
          // Facebook credential is linked to the current Apple user.
          // The user can now sign in to the same account
          // with either Apple or Facebook.
        }
      });

ขั้นสูง: จัดการขั้นตอนการลงชื่อเข้าใช้ด้วยตนเอง

นอกจากนี้คุณยังสามารถตรวจสอบกับ Firebase ใช้บัญชีแอปเปิ้ลโดยการจัดการการเข้าสู่ระบบในการไหลโดยใช้แอปเปิ้ลเข้าสู่ระบบ JS SDK ด้วยตนเองสร้างการไหล OAuth หรือโดยการใช้ห้องสมุด OAuth เช่น AppAuth

  1. สำหรับคำขอลงชื่อเข้าใช้ทุกครั้ง ให้สร้างสตริงสุ่ม ซึ่งก็คือ "nonce" ซึ่งคุณจะใช้เพื่อให้แน่ใจว่าโทเค็น ID ที่คุณได้รับนั้นได้รับการอนุญาตเป็นการเฉพาะเพื่อตอบสนองต่อคำขอตรวจสอบสิทธิ์ของแอปของคุณ ขั้นตอนนี้มีความสำคัญต่อการป้องกันการโจมตีซ้ำ

    คุณสามารถสร้าง nonce ที่เชื่อถือได้เข้ารหัสบน Android กับ SecureRandom เช่นในตัวอย่างต่อไปนี้:

    Java

    private String generateNonce(int length) {
        SecureRandom generator = new SecureRandom();
    
        CharsetDecoder charsetDecoder = StandardCharsets.US_ASCII.newDecoder();
        charsetDecoder.onUnmappableCharacter(CodingErrorAction.IGNORE);
        charsetDecoder.onMalformedInput(CodingErrorAction.IGNORE);
    
        byte[] bytes = new byte[length];
        ByteBuffer inBuffer = ByteBuffer.wrap(bytes);
        CharBuffer outBuffer = CharBuffer.allocate(length);
        while (outBuffer.hasRemaining()) {
            generator.nextBytes(bytes);
            inBuffer.rewind();
            charsetDecoder.reset();
            charsetDecoder.decode(inBuffer, outBuffer, false);
        }
        outBuffer.flip();
        return outBuffer.toString();
    }
    

    คอตลิน+KTX

    private fun generateNonce(length: Int): String {
        val generator = SecureRandom()
    
        val charsetDecoder = StandardCharsets.US_ASCII.newDecoder()
        charsetDecoder.onUnmappableCharacter(CodingErrorAction.IGNORE)
        charsetDecoder.onMalformedInput(CodingErrorAction.IGNORE)
    
        val bytes = ByteArray(length)
        val inBuffer = ByteBuffer.wrap(bytes)
        val outBuffer = CharBuffer.allocate(length)
        while (outBuffer.hasRemaining()) {
            generator.nextBytes(bytes)
            inBuffer.rewind()
            charsetDecoder.reset()
            charsetDecoder.decode(inBuffer, outBuffer, false)
        }
        outBuffer.flip()
        return outBuffer.toString()
    }
    

    จากนั้น รับแฮช SHA246 ของ nonce เป็นสตริงฐานสิบหก:

    Java

    private String sha256(String s) throws NoSuchAlgorithmException {
        MessageDigest md = MessageDigest.getInstance("SHA-256");
        byte[] digest = md.digest(s.getBytes());
        StringBuilder hash = new StringBuilder();
        for (byte c: digest) {
            hash.append(String.format("%02x", c));
        }
        return hash.toString();
    }
    

    คอตลิน+KTX

    private fun sha256(s: String): String {
        val md = MessageDigest.getInstance("SHA-256")
        val digest = md.digest(s.toByteArray())
        val hash = StringBuilder()
        for (c in digest) {
            hash.append(String.format("%02x", c))
        }
        return hash.toString()
    }
    

    คุณจะส่งแฮช SHA256 ของ nonce ไปพร้อมกับคำขอลงชื่อเข้าใช้ของคุณ ซึ่ง Apple จะไม่เปลี่ยนคำตอบในการตอบกลับ Firebase ตรวจสอบการตอบกลับโดยแฮช nonce ดั้งเดิมและเปรียบเทียบกับค่าที่ Apple ส่งผ่าน

  2. เริ่มขั้นตอนการลงชื่อเข้าใช้ของ Apple โดยใช้ไลบรารี OAuth หรือวิธีอื่นๆ อย่าลืมรวม nonce ที่แฮชเป็นพารามิเตอร์ในคำขอของคุณ

  3. หลังจากที่คุณได้รับการตอบสนองของ Apple, รับรหัสโทเค็นจากการตอบสนองและใช้งานได้และ nonce Unhashed เพื่อสร้าง AuthCredential :

    Java

    AuthCredential credential =  OAuthProvider.newCredentialBuilder("apple.com")
        .setIdTokenWithRawNonce(appleIdToken, rawUnhashedNonce)
        .build();
    

    คอตลิน+KTX

    val credential =  OAuthProvider.newCredentialBuilder("apple.com")
        .setIdTokenWithRawNonce(appleIdToken, rawUnhashedNonce)
        .build()
    
  4. ตรวจสอบสิทธิ์กับ Firebase โดยใช้ข้อมูลรับรอง Firebase:

    Java

    mAuth.signInWithCredential(credential)
        .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
          @Override
          public void onComplete(@NonNull Task<AuthResult> task) {
            if (task.isSuccessful()) {
              // User successfully signed in with Apple ID token.
              // ...
            }
          }
        });
    

    คอตลิน+KTX

    auth.signInWithCredential(credential)
          .addOnCompleteListener(this) { task ->
              if (task.isSuccessful) {
                // User successfully signed in with Apple ID token.
                // ...
              }
          }
    

หากการเรียกร้องให้ signInWithCredential ประสบความสำเร็จคุณสามารถใช้ getCurrentUser วิธีการเพื่อให้ได้ข้อมูลบัญชีของผู้ใช้

ขั้นตอนถัดไป

หลังจากที่ผู้ใช้ลงชื่อเข้าใช้เป็นครั้งแรก บัญชีผู้ใช้ใหม่จะถูกสร้างขึ้นและเชื่อมโยงกับข้อมูลประจำตัว กล่าวคือ ชื่อผู้ใช้และรหัสผ่าน หมายเลขโทรศัพท์ หรือข้อมูลผู้ให้บริการตรวจสอบสิทธิ์ ซึ่งผู้ใช้ลงชื่อเข้าใช้ บัญชีใหม่นี้จัดเก็บเป็นส่วนหนึ่งของโปรเจ็กต์ Firebase และใช้เพื่อระบุผู้ใช้ในทุกแอปในโปรเจ็กต์ของคุณ ไม่ว่าผู้ใช้จะลงชื่อเข้าใช้ด้วยวิธีใดก็ตาม

  • ในปพลิเคชันของคุณคุณจะได้รับข้อมูลรายละเอียดของผู้ใช้พื้นฐานจาก FirebaseUser วัตถุ ดู การจัดการผู้ใช้

  • ในฐานข้อมูล Firebase เรียลไทม์และการจัดเก็บเมฆ กฎการรักษาความปลอดภัย , คุณจะได้รับการลงนามใน ID ผู้ใช้ของผู้ใช้ที่ไม่ซ้ำกันจาก auth ตัวแปรและใช้ในการควบคุมสิ่งที่ข้อมูลที่เข้าถึงผู้ใช้สามารถ

คุณสามารถอนุญาตให้ผู้ใช้สามารถลงชื่อเข้าใช้แอปโดยใช้ผู้ให้บริการการตรวจสอบหลายคนโดย การเชื่อมโยงข้อมูลประจำตัวของผู้ให้บริการรับรองความถูกต้องไปยังบัญชีผู้ใช้ที่มีอยู่

ออกจากระบบผู้ใช้โทร signOut :

Java

FirebaseAuth.getInstance().signOut();

คอตลิน+KTX

Firebase.auth.signOut()