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

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

ก่อนเริ่มต้น

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

เข้าร่วมโปรแกรม Developer Program ของ Apple

สมาชิกโปรแกรมนักพัฒนาแอปของ Apple เท่านั้นที่กำหนดค่า "ลงชื่อเข้าใช้ด้วย Apple" ได้

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

ในเว็บไซต์สำหรับนักพัฒนาแอปของ Apple ให้ทำดังนี้

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

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

    คุณดูรหัสโปรเจ็กต์ Firebase ได้ใน การตั้งค่า > ทั่วไป แท็บ ของคอนโซลFirebase

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

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

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

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

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

"ลงชื่อเข้าใช้ด้วย 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 โดยใช้ Builder ที่มีรหัสผู้ให้บริการ apple.com ดังนี้

    Kotlin

    val provider = OAuthProvider.newBuilder("apple.com")
    

    Java

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

    Kotlin

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

    Java

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

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

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

    Kotlin

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

    Java

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

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

    หากต้องการตรวจสอบว่ามีผลลัพธ์ที่รอดำเนินการอยู่หรือไม่ ให้เรียกใช้ getPendingAuthResult() ดังนี้

    Kotlin

    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")
    }
    

    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");
    }
    

    หากไม่มีผลลัพธ์ที่รอดำเนินการ ให้เริ่มขั้นตอนการลงชื่อเข้าใช้โดยเรียกใช้ startActivityForSignInWithProvider() ดังนี้

    Kotlin

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

    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);
                        }
                    });
    

    Apple ไม่ได้ให้ URL รูปภาพ ซึ่งแตกต่างจากผู้ให้บริการรายอื่นๆ ที่ Firebase Auth รองรับ

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

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

การตรวจสอบสิทธิ์อีกครั้งและการลิงก์บัญชี

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

Kotlin

// 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.
    })

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.
          }
        });

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

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

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

Kotlin

// 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.
        }
      });

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.
        }
      }
    });

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

นอกจากนี้ คุณยังตรวจสอบสิทธิ์ด้วย Firebase โดยใช้บัญชี Apple ได้ด้วยการจัดการ ขั้นตอนการลงชื่อเข้าใช้โดยใช้ Apple Sign-In JS SDK, สร้าง ขั้นตอน OAuth ด้วยตนเอง หรือใช้ไลบรารี OAuth เช่น AppAuth

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

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

    Kotlin

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

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

    จากนั้นรับแฮช SHA256 ของ Nonce เป็นสตริงเลขฐานสิบหก ดังนี้

    Kotlin

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

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

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

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

  3. หลังจากได้รับคำตอบจาก Apple แล้ว ให้รับโทเค็นรหัสจากการตอบกลับ และใช้โทเค็นรหัสและ Nonce ที่ไม่ได้แฮชเพื่อสร้าง AuthCredential ดังนี้

    Kotlin

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

    Java

    AuthCredential credential =  OAuthProvider.newCredentialBuilder("apple.com")
        .setIdTokenWithRawNonce(appleIdToken, rawUnhashedNonce)
        .build();
    
  4. ตรวจสอบสิทธิ์ด้วย Firebase โดยใช้ข้อมูลเข้าสู่ระบบ Firebase ดังนี้

    Kotlin

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

    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.
              // ...
            }
          }
        });
    

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

การเพิกถอนโทเค็น

Apple กำหนดให้แอปที่รองรับการสร้างบัญชีต้องอนุญาตให้ผู้ใช้เริ่ม การลบบัญชีของตนเองภายในแอปตามที่อธิบายไว้ใน หลักเกณฑ์การตรวจสอบ App Store

นอกจากนี้ แอปที่รองรับ "ลงชื่อเข้าใช้ด้วย Apple" ควรใช้ "ลงชื่อเข้าใช้ด้วย Apple" REST API เพื่อเพิกถอนโทเค็นของผู้ใช้

หากต้องการเป็นไปตามข้อกำหนดนี้ ให้ทำตามขั้นตอนต่อไปนี้

  1. ใช้วิธี startActivityForSignInWithProvider() เพื่อลงชื่อเข้าใช้โดยใช้ Apple และรับ AuthResult

  2. รับโทเค็นเพื่อการเข้าถึงสำหรับผู้ให้บริการ Apple

    Kotlin

    val oauthCredential: OAuthCredential =  authResult.credential
    val accessToken = oauthCredential.accessToken
    

    Java

    OAuthCredential oauthCredential = (OAuthCredential) authResult.getCredential();
    String accessToken = oauthCredential.getAccessToken();
    
  3. เพิกถอนโทเค็นโดยใช้ revokeAccessToken API

    Kotlin

    mAuth.revokeAccessToken(accessToken)
      .addOnCompleteListener(this) { task ->
        if (task.isSuccessful) {
          // Access token successfully revoked
          // for the user ...
        }
    }
    

    Java

    mAuth.revokeAccessToken(accessToken)
        .addOnCompleteListener(this, new OnCompleteListener<Void>() {
            @Override
            public void onComplete(@NonNull Task<Void> task) {
              if (task.isSuccessful()) {
                // Access token successfully revoked
                // for the user ...
              }
            }
      });
    
  1. สุดท้าย ให้ลบบัญชีผู้ใช้ (และข้อมูลทั้งหมดที่ เชื่อมโยง)

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

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

    • ในแอป คุณสามารถรับข้อมูลโปรไฟล์พื้นฐานของผู้ใช้ได้จากออบเจ็กต์ FirebaseUser ดูหัวข้อ จัดการผู้ใช้

    • ใน Firebase Realtime Database และ Cloud Storage กฎความปลอดภัย คุณสามารถ รับรหัสผู้ใช้ที่ไม่ซ้ำกันของผู้ใช้ที่ลงชื่อเข้าใช้ได้จากตัวแปร auth และใช้รหัสนี้เพื่อควบคุมข้อมูลที่ผู้ใช้เข้าถึงได้

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

    หากต้องการออกจากระบบของผู้ใช้ ให้เรียกใช้ signOut ดังนี้

    Kotlin

    Firebase.auth.signOut()

    Java

    FirebaseAuth.getInstance().signOut();