Android-এ Apple-এর মাধ্যমে যাচাইকরণ

আপনি Firebase SDK ব্যবহার করে এন্ড-টু-এন্ড OAuth 2.0 সাইন-ইন ফ্লো সম্পূর্ণ করার মাধ্যমে আপনার ব্যবহারকারীদের Apple আইডি দিয়ে Firebase-এর মাধ্যমে যাচাই করিয়ে নিতে পারবেন।

শুরু করার আগে

Apple ব্যবহার করে ব্যবহারকারীদের সাইন-ইন করতে দিতে, প্রথমে Apple-এর ডেভেলপার সাইটে Apple-এর মাধ্যমে সাইন-ইন করুন কনফিগার করুন, তারপর আপনার Firebase প্রোজেক্টের জন্য সাইন-ইন প্রদানকারী হিসেবে Apple-কে চালু করুন।

Apple Developer Program-এ যোগ দিন

Apple Developer Program-এর মেম্বাররাই শুধু 'Apple-এর মাধ্যমে সাইন-ইন করুন' ফিচার কনফিগার করতে পারবেন।

'Apple-এর মাধ্যমে সাইন-ইন করুন' ফিচার কনফিগার করা

Apple Developer সাইটে গিয়ে, নিম্নলিখিত কাজগুলি করুন:

  1. ওয়েবের জন্য Apple-এর মাধ্যমে সাইন-ইন কনফিগার করুন নিবন্ধের প্রথম বিভাগে বর্ণিত পদ্ধতি অনুযায়ী আপনার অ্যাপের সাথে ওয়েবসাইট অ্যাসোসিয়েট করুন। প্রম্পট করা হলে, নিম্নলিখিত URL-কে রিটার্ন URL হিসেবে রেজিস্টার করুন:

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

    আপনি Firebase কনসোলের সেটিংস > সাধারণ ট্যাবে আপনার Firebase প্রোজেক্ট আইডি খুঁজে পাবেন।

    হয়ে গেলে, আপনার নতুন পরিষেবা আইডি লিখে রাখুন, যা পরের বিভাগে আপনার প্রয়োজন হবে।

  2. একটি Sign In with Apple প্রাইভেট কী তৈরি করুন। পরবর্তী বিভাগে আপনার নতুন ব্যক্তিগত কী ও কী আইডি প্রয়োজন হবে।
  3. আপনি যদি Firebase Authentication-এর এমন কোনও ফিচার ব্যবহার করেন যা ব্যবহারকারীদের ইমেল পাঠায়, এর মধ্যে ইমেল লিঙ্ক সাইন-ইন, ইমেল আইডি যাচাইকরণ, অ্যাকাউন্ট পরিবর্তন প্রত্যাহার এবং অন্যান্য ফিচার অন্তর্ভুক্ত, Apple-এর ব্যক্তিগত ইমেল রিলে পরিষেবা কনফিগার করুন এবং noreply@YOUR_FIREBASE_PROJECT_ID.firebaseapp.com (অথবা আপনার কাস্টমাইজ করা ইমেল টেমপ্লেট ডোমেন) রেজিস্টার করুন যাতে Apple, Firebase Authentication-এর পাঠানো ইমেল অনামিকা করা Apple ইমেল আইডিতে রিলে করতে পারে।

সাইন-ইন পরিষেবা প্রদানকারী হিসেবে Apple-কে চালু করা

  1. আপনার Android প্রোজেক্টে Firebase যোগ করুন।
  2. আপনি আগে থেকে না করে থাকলে, আপনার অ্যাপের SHA-1 ফিঙ্গারপ্রিন্ট নির্দিষ্ট করুন।
    1. Firebase কনসোলে, গিয়ে সেটিংস > সাধারণ ট্যাব দেখুন।
    2. নিচের দিকে স্ক্রল করে আপনার অ্যাপ কার্ডে যান, আপনার Android অ্যাপ বেছে নিন এবং SHA সার্টিফিকেট ফিঙ্গারপ্রিন্ট ফিল্ডে আপনার SHA-1 ফিঙ্গারপ্রিন্ট যোগ করুন।
  3. Firebase কনসোলে গিয়ে নিরাপত্তা > যাচাইকরণ বিকল্পে যান।
  4. সাইন-ইন পদ্ধতি ট্যাবে, Apple সাইন-ইন প্রদানকারী চালু করুন। আগের বিভাগে আপনার তৈরি করা পরিষেবা আইডি উল্লেখ করুন। এছাড়াও, OAuth কোড ফ্লো কনফিগারেশন বিভাগে, আপনার Apple টিম আইডি এবং আগের বিভাগে আপনার তৈরি করা ব্যক্তিগত কী ও কী আইডি উল্লেখ করুন।

Apple-এর পরিচয় গোপন রাখা ডেটা সংক্রান্ত প্রয়োজনীয়তা মেনে চলা

সাইন-ইন করার সময়, Sign In with Apple ব্যবহারকারীদের তাদের ইমেল আইডি সহ ডেটা অ্যানোনিমাস করার বিকল্প দেয়। যেসব ব্যবহারকারী এই বিকল্প বেছে নিয়েছেন তাদের ইমেল আইডিতে privaterelay.appleid.com ডোমেন আছে। আপনার অ্যাপে Apple-এর মাধ্যমে সাইন-ইন করুন ব্যবহার করলে, আপনাকে অবশ্যই এইসব বেনামী Apple আইডি সংক্রান্ত Apple-এর প্রযোজ্য ডেভেলপার নীতি বা শর্তাবলী মেনে চলতে হবে।

এর মধ্যে অন্তর্ভুক্ত হল, আপনি কোনও সরাসরি শনাক্তকরণযোগ্য ব্যক্তিগত তথ্য কোনও বেনামী Apple ID-এর সাথে অ্যাসোসিয়েট করার আগে প্রয়োজনীয় ব্যবহারকারীর সম্মতি নেওয়া। Firebase যাচাইকরণ ব্যবহার করার সময়, এর মধ্যে নিম্নলিখিত অ্যাকশন অন্তর্ভুক্ত থাকতে পারে:

  • অ্যানোনিমাস Apple আইডির সাথে ইমেল আইডি লিঙ্ক করা বা এর বিপরীত।
  • অ্যানোনিমাস Apple আইডির সাথে ফোন নম্বর লিঙ্ক করা বা এর বিপরীত
  • কোনও বেনামী নয় এমন সোশ্যাল ক্রেডেনশিয়াল (Facebook, Google, ইত্যাদি) কোনও বেনামী Apple আইডির সাথে লিঙ্ক করা অথবা এর বিপরীত।

উপরে দেওয়া তালিকাটি সম্পূর্ণ নয়। আপনার অ্যাপ Apple-এর প্রয়োজনীয়তা পূরণ করছে কিনা তা নিশ্চিত করতে ডেভেলপার অ্যাকাউন্টের মেম্বারশিপ বিভাগে Apple Developer Program লাইসেন্স চুক্তি দেখুন।

Firebase SDK-এর মাধ্যমে সাইন-ইন ফ্লো ম্যানেজ করা

Android-এ, Firebase-এর মাধ্যমে আপনার ব্যবহারকারীদের তাদের Apple অ্যাকাউন্ট দিয়ে যাচাই করার সবচেয়ে সহজ উপায় হল Firebase Android SDK-এর মাধ্যমে সম্পূর্ণ সাইন-ইন ফ্লো ম্যানেজ করা।

Firebase Android SDK-এর মাধ্যমে সাইন-ইন ফ্লো ম্যানেজ করতে, এইসব ধাপ অনুসরণ করুন:

  1. প্রোভাইডার আইডি apple.com সহ এর বিল্ডার ব্যবহার করে OAuthProvider-এর একটি ইনস্ট্যান্স তৈরি করুন:

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

    ডিফল্ট হিসেবে, প্রতিটি ইমেল আইডির জন্য একটি অ্যাকাউন্ট চালু করা থাকলে, 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. OAuth প্রদানকারী অবজেক্ট ব্যবহার করে Firebase-এর মাধ্যমে যাচাই করিয়ে নিন। মনে রাখবেন যে অন্যান্য FirebaseAuth অপারেশনের মতো নয়, এটি কাস্টম Chrome ট্যাব খুলে আপনার UI-এর কন্ট্রোল নেবে। ফলে, আপনার অ্যাটাচ করা 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);
                        }
                    });
    

    Firebase Auth-এর সাথে কাজ করে এমন অন্যান্য পরিষেবা প্রদানকারীর মতো, Apple কোনও ফটো URL প্রদান করে না।

    এছাড়াও, ব্যবহারকারী অ্যাপের সাথে তার ইমেল আইডি শেয়ার করতে না চাইলে, Apple সেই ব্যবহারকারীর জন্য একটি অনন্য ইমেল আইডি (এই ধরনের xyz@privaterelay.appleid.com) প্রদান করে, যা আপনার অ্যাপের সাথে শেয়ার করা হয়। আপনি প্রাইভেট ইমেল রিলে পরিষেবা কনফিগার করে থাকলে, Apple অ্যানোনিমাস ইমেল আইডিতে পাঠানো ইমেল ব্যবহারকারীর আসল ইমেল আইডিতে ফরওয়ার্ড করে।

    ব্যবহারকারী প্রথমবার সাইন-ইন করলে, Apple শুধুমাত্র অ্যাপের সাথে ডিসপ্লে নামের মতো ব্যবহারকারীর তথ্য শেয়ার করে। সাধারণত, কোনও ব্যবহারকারী Apple-এর মাধ্যমে প্রথমবার সাইন-ইন করলে Firebase ডিসপ্লে নাম সেভ করে রাখে, যা আপনি getCurrentUser().getDisplayName()-এর মাধ্যমে পেতে পারেন। তবে, আপনি যদি আগে Firebase ব্যবহার না করে Apple-এর মাধ্যমে অ্যাপে কোনও ব্যবহারকারীকে সাইন-ইন করিয়ে থাকেন, তাহলে 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 অ্যাকাউন্ট অন্য ডেটার সাথে লিঙ্ক করার আগে আপনাকে তার থেকে স্পষ্ট সম্মতি নিতে হবে।

যেমন, বর্তমান Firebase অ্যাকাউন্টের সাথে Facebook অ্যাকাউন্ট লিঙ্ক করতে, 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.
        }
      }
    });

উন্নত: সাইন-ইন ফ্লো ম্যানুয়ালি ম্যানেজ করা

এছাড়াও, Apple Sign-In JS SDK ব্যবহার করে, ম্যানুয়ালি OAuth ফ্লো তৈরি করে অথবা AppAuth-এর মতো OAuth লাইব্রেরি ব্যবহার করে Apple অ্যাকাউন্ট দিয়ে সাইন-ইন ফ্লো হ্যান্ডেল করার মাধ্যমে Firebase-এর সাথে যাচাইকরণ করতে পারবেন।

  1. প্রতিটি সাইন-ইন অনুরোধের জন্য, একটি র‍্যান্ডম স্ট্রিং—একটি "নন্স"—জেনারেট করুন, যা আপনি এটি নিশ্চিত করতে ব্যবহার করবেন যে আপনার পাওয়া আইডি টোকেনটি বিশেষভাবে আপনার অ্যাপের যাচাইকরণ অনুরোধের উত্তরে মঞ্জুর করা হয়েছে। রিপ্লে অ্যাটাক প্রতিরোধ করার জন্য এই ধাপটি গুরুত্বপূর্ণ।

    আপনি 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();
    }
    

    তারপর, ননসের SHA246 হ্যাশকে হেক্স স্ট্রিং হিসেবে পান:

    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 হ্যাশ পাঠাবেন, যা Apple অপরিবর্তিত অবস্থায় উত্তরের মধ্যে পাঠাবে। Firebase, আসল ননস হ্যাশ করে এবং Apple-এর পাঠানো ভ্যালুর সাথে তুলনা করে উত্তরটি যাচাই করে।

  2. আপনার OAuth লাইব্রেরি বা অন্য পদ্ধতি ব্যবহার করে Apple-এর সাইন-ইন ফ্লো শুরু করুন। আপনার অনুরোধে হ্যাশ করা ননসকে প্যারামিটার হিসেবে যোগ করতে ভুলবেন না।

  3. Apple-এর উত্তর পাওয়ার পরে, উত্তরের মধ্যে থেকে ID টোকেনটি নিন এবং 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. Apple ব্যবহার করে সাইন-ইন করতে startActivityForSignInWithProvider() পদ্ধতি ব্যবহার করুন এবং 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();