ตรวจสอบสิทธิ์ด้วย Firebase แบบไม่ระบุตัวตนบน Android

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

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

  1. เพิ่ม Firebase ลงในโปรเจ็กต์ Android หากยังไม่ได้เพิ่ม
  2. ในไฟล์ Gradle ของโมดูล (ระดับแอป) (โดยมากจะเป็น <project>/<app-module>/build.gradle.kts หรือ <project>/<app-module>/build.gradle) ให้เพิ่มทรัพยากร Dependency สำหรับคลัง Firebase Authentication สำหรับ Android เราขอแนะนำให้ใช้ Firebase Android BoM เพื่อควบคุมการกำหนดเวอร์ชันของไลบรารี
    dependencies {
        // Import the BoM for the Firebase platform
        implementation(platform("com.google.firebase:firebase-bom:34.11.0"))
    
        // Add the dependency for the Firebase Authentication library
        // When using the BoM, you don't specify versions in Firebase library dependencies
        implementation("com.google.firebase:firebase-auth")
    }

    การใช้ Firebase Android BoM จะทำให้แอปใช้ไลบรารี Firebase Android เวอร์ชันที่เข้ากันได้อยู่เสมอ

    (ทางเลือก)  เพิ่มการอ้างอิงไลบรารี Firebase โดยไม่ใช้ BoM

    หากเลือกที่จะไม่ใช้ Firebase BoM คุณต้องระบุเวอร์ชันของไลบรารี Firebase แต่ละรายการ ในบรรทัดทรัพยากร Dependency

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

    dependencies {
        // Add the dependency for the Firebase Authentication library
        // When NOT using the BoM, you must specify versions in Firebase library dependencies
        implementation("com.google.firebase:firebase-auth:24.0.1")
    }
  3. หากยังไม่ได้เชื่อมต่อแอปกับโปรเจ็กต์ Firebase ให้เชื่อมต่อจากFirebase Console
  4. เปิดใช้การตรวจสอบสิทธิ์แบบไม่ระบุชื่อ
    1. เปิดส่วนการตรวจสอบสิทธิ์ในคอนโซล Firebase
    2. ในหน้าวิธีการลงชื่อเข้าใช้ ให้เปิดใช้ไม่ระบุชื่อ วิธีการลงชื่อเข้าใช้
    3. ไม่บังคับ: หากอัปเกรดโปรเจ็กต์เป็น Firebase Authentication with Identity Platform คุณจะเปิดใช้การล้างข้อมูลอัตโนมัติได้ เมื่อ คุณเปิดใช้การตั้งค่านี้ ระบบจะลบบัญชีที่ไม่ระบุตัวตนที่เก่ากว่า 30 วันโดยอัตโนมัติ ในโปรเจ็กต์ที่เปิดใช้การล้างข้อมูลอัตโนมัติ การตรวจสอบสิทธิ์แบบไม่ระบุตัวตนจะไม่นับรวมในโควต้าการใช้งานหรือโควต้าการเรียกเก็บเงินอีกต่อไป ดู การล้างข้อมูลอัตโนมัติ

ตรวจสอบสิทธิ์ด้วย Firebase โดยไม่ระบุตัวตน

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

  1. ในเมธอด onCreate ของกิจกรรม ให้รับอินสแตนซ์ที่แชร์ ของออบเจ็กต์ FirebaseAuth

    Kotlin

    private lateinit var auth: FirebaseAuth
    // ...
    // Initialize Firebase Auth
    auth = Firebase.auth

    Java

    private FirebaseAuth mAuth;
    // ...
    // Initialize Firebase Auth
    mAuth = FirebaseAuth.getInstance();
  2. เมื่อเริ่มต้นกิจกรรม ให้ตรวจสอบว่าผู้ใช้ลงชื่อเข้าใช้แล้วหรือไม่

    Kotlin

    public override fun onStart() {
        super.onStart()
        // Check if user is signed in (non-null) and update UI accordingly.
        val currentUser = auth.currentUser
        updateUI(currentUser)
    }

    Java

    @Override
    public void onStart() {
        super.onStart();
        // Check if user is signed in (non-null) and update UI accordingly.
        FirebaseUser currentUser = mAuth.getCurrentUser();
        updateUI(currentUser);
    }
  3. สุดท้าย ให้เรียกใช้ signInAnonymously เพื่อลงชื่อเข้าใช้ในฐานะผู้ใช้ที่ไม่ระบุตัวตน ดังนี้

    Kotlin

    auth.signInAnonymously()
        .addOnCompleteListener(this) { task ->
            if (task.isSuccessful) {
                // Sign in success, update UI with the signed-in user's information
                Log.d(TAG, "signInAnonymously:success")
                val user = auth.currentUser
                updateUI(user)
            } else {
                // If sign in fails, display a message to the user.
                Log.w(TAG, "signInAnonymously:failure", task.exception)
                Toast.makeText(
                    baseContext,
                    "Authentication failed.",
                    Toast.LENGTH_SHORT,
                ).show()
                updateUI(null)
            }
        }

    Java

    mAuth.signInAnonymously()
            .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
                @Override
                public void onComplete(@NonNull Task<AuthResult> task) {
                    if (task.isSuccessful()) {
                        // Sign in success, update UI with the signed-in user's information
                        Log.d(TAG, "signInAnonymously:success");
                        FirebaseUser user = mAuth.getCurrentUser();
                        updateUI(user);
                    } else {
                        // If sign in fails, display a message to the user.
                        Log.w(TAG, "signInAnonymously:failure", task.getException());
                        Toast.makeText(AnonymousAuthActivity.this, "Authentication failed.",
                                Toast.LENGTH_SHORT).show();
                        updateUI(null);
                    }
                }
            });
    หากลงชื่อเข้าใช้สำเร็จ คุณจะใช้วิธี getCurrentUser เพื่อรับข้อมูลบัญชีของผู้ใช้ได้

เปลี่ยนบัญชีที่ไม่ระบุตัวตนเป็นบัญชีถาวร

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

  1. เมื่อผู้ใช้ลงชื่อสมัครใช้ ให้ทำขั้นตอนการลงชื่อเข้าใช้สำหรับผู้ให้บริการ การตรวจสอบสิทธิ์ของผู้ใช้ให้เสร็จสมบูรณ์ โดยไม่ต้องเรียกใช้เมธอดใดเมธอดหนึ่งของ FirebaseAuth.signInWith เช่น รับโทเค็นรหัส Google ของผู้ใช้ โทเค็นเพื่อการเข้าถึง Facebook หรืออีเมลและรหัสผ่าน
  2. รับ AuthCredential สำหรับผู้ให้บริการตรวจสอบสิทธิ์รายใหม่

    Google Sign-In

    Kotlin

    val credential = GoogleAuthProvider.getCredential(googleIdToken, null)

    Java

    AuthCredential credential = GoogleAuthProvider.getCredential(googleIdToken, null);
    การเข้าสู่ระบบ Facebook

    Kotlin

    val credential = FacebookAuthProvider.getCredential(token.token)

    Java

    AuthCredential credential = FacebookAuthProvider.getCredential(token.getToken());
    การลงชื่อเข้าใช้ด้วยอีเมลและรหัสผ่าน

    Kotlin

    val credential = EmailAuthProvider.getCredential(email, password)

    Java

    AuthCredential credential = EmailAuthProvider.getCredential(email, password);
  3. ส่งออบเจ็กต์ AuthCredential ไปยังเมธอด linkWithCredential ของผู้ใช้ที่ลงชื่อเข้าใช้

    Kotlin

    auth.currentUser!!.linkWithCredential(credential)
        .addOnCompleteListener(this) { task ->
            if (task.isSuccessful) {
                Log.d(TAG, "linkWithCredential:success")
                val user = task.result?.user
                updateUI(user)
            } else {
                Log.w(TAG, "linkWithCredential:failure", task.exception)
                Toast.makeText(
                    baseContext,
                    "Authentication failed.",
                    Toast.LENGTH_SHORT,
                ).show()
                updateUI(null)
            }
        }

    Java

    mAuth.getCurrentUser().linkWithCredential(credential)
            .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
                @Override
                public void onComplete(@NonNull Task<AuthResult> task) {
                    if (task.isSuccessful()) {
                        Log.d(TAG, "linkWithCredential:success");
                        FirebaseUser user = task.getResult().getUser();
                        updateUI(user);
                    } else {
                        Log.w(TAG, "linkWithCredential:failure", task.getException());
                        Toast.makeText(AnonymousAuthActivity.this, "Authentication failed.",
                                Toast.LENGTH_SHORT).show();
                        updateUI(null);
                    }
                }
            });

หากการเรียกใช้ linkWithCredential สำเร็จ บัญชีใหม่ของผู้ใช้จะเข้าถึงข้อมูล Firebase ของบัญชีที่ไม่ระบุตัวตนได้

การล้างข้อมูลอัตโนมัติ

หากอัปเกรดโปรเจ็กต์เป็น Firebase Authentication with Identity Platform แล้ว คุณจะ เปิดใช้การล้างข้อมูลอัตโนมัติในคอนโซล Firebase ได้ เมื่อเปิดใช้ฟีเจอร์นี้ คุณจะอนุญาตให้ Firebase ลบบัญชีที่ไม่ระบุตัวตนที่มีอายุนานกว่า 30 วันโดยอัตโนมัติ ในโปรเจ็กต์ที่เปิดใช้การล้างข้อมูลอัตโนมัติ การตรวจสอบสิทธิ์แบบไม่ระบุตัวตนจะไม่นับรวมในโควต้าการใช้งานหรือโควต้าการเรียกเก็บเงิน

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

หากต้องการดูจำนวนผู้ใช้ที่จะได้รับผลกระทบก่อนเปิดใช้ฟีเจอร์นี้ และคุณได้อัปเกรดโปรเจ็กต์เป็น Firebase Authentication with Identity Platform แล้ว คุณสามารถกรองตามis_anonใน Cloud Logging ได้

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

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