অ্যান্ড্রয়েডে অ্যাপল ব্যবহার করে প্রমাণীকরণ করুন

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

শুরু করার আগে

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

অ্যাপল ডেভেলপার প্রোগ্রামে যোগ দিন

‘সাইন ইন উইথ অ্যাপল’ শুধুমাত্র অ্যাপল ডেভেলপার প্রোগ্রামের সদস্যরাই কনফিগার করতে পারেন।

অ্যাপল দিয়ে সাইন ইন কনফিগার করুন

অ্যাপল ডেভেলপার সাইটে, নিম্নলিখিত কাজগুলো করুন:

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

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

    আপনি আপনার ফায়ারবেস প্রজেক্ট আইডি Firebase কনসোল সেটিংস পৃষ্ঠা থেকে পেতে পারেন।

    কাজ শেষ হলে আপনার নতুন সার্ভিস আইডিটি লিখে রাখুন, যা পরবর্তী অংশে আপনার প্রয়োজন হবে।

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

সাইন-ইন প্রদানকারী হিসেবে অ্যাপলকে সক্রিয় করুন।

  1. আপনার অ্যান্ড্রয়েড প্রজেক্টে ফায়ারবেস যুক্ত করুনFirebase কনসোলে আপনার অ্যাপ সেট আপ করার সময়, অ্যাপের SHA-1 সিগনেচারটি অবশ্যই রেজিস্টার করুন।
  2. Firebase কনসোলে , Auth সেকশনটি খুলুন। Sign in method ট্যাবে, Apple প্রোভাইডারটি এনাবল করুন। পূর্ববর্তী সেকশনে আপনার তৈরি করা Service ID-টি উল্লেখ করুন। এছাড়াও, OAuth code flow configuration সেকশনে , আপনার Apple Team ID এবং পূর্ববর্তী সেকশনে তৈরি করা প্রাইভেট কী ও কী আইডি উল্লেখ করুন।

অ্যাপলের পরিচয় গোপন রাখার শর্তাবলী মেনে চলুন

সাইন ইন করার সময়, ‘সাইন ইন উইথ অ্যাপল’ ব্যবহারকারীদের তাদের ইমেল ঠিকানা সহ ডেটা গোপন করার বিকল্প দেয়। যে ব্যবহারকারীরা এই বিকল্পটি বেছে নেন, তাদের ইমেল ঠিকানার ডোমেইন হয় privaterelay.appleid.com । আপনি যখন আপনার অ্যাপে ‘সাইন ইন উইথ অ্যাপল’ ব্যবহার করবেন, তখন এই গোপনকৃত অ্যাপল আইডিগুলো সম্পর্কিত অ্যাপলের প্রযোজ্য ডেভেলপার নীতি বা শর্তাবলী আপনাকে অবশ্যই মেনে চলতে হবে।

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

  • একটি ইমেল ঠিকানাকে একটি বেনামী অ্যাপল আইডির সাথে লিঙ্ক করুন অথবা এর বিপরীতটিও করুন।
  • একটি ফোন নম্বরকে একটি বেনামী অ্যাপল আইডির সাথে লিঙ্ক করুন অথবা এর বিপরীতটি করুন
  • একটি পরিচয়বিহীন অ্যাপল আইডির সাথে একটি পরিচয়বিহীন সোশ্যাল ক্রেডেনশিয়াল (ফেসবুক, গুগল, ইত্যাদি) লিঙ্ক করুন অথবা এর বিপরীতটি করুন।

উপরের তালিকাটি সম্পূর্ণ নয়। আপনার অ্যাপটি অ্যাপলের শর্তাবলী পূরণ করছে কিনা, তা নিশ্চিত করতে আপনার ডেভেলপার অ্যাকাউন্টের মেম্বারশিপ বিভাগে থাকা অ্যাপল ডেভেলপার প্রোগ্রাম লাইসেন্স চুক্তিটি দেখুন।

Firebase SDK দিয়ে সাইন-ইন প্রক্রিয়াটি পরিচালনা করুন।

অ্যান্ড্রয়েডে, ব্যবহারকারীদের অ্যাপল অ্যাকাউন্ট ব্যবহার করে ফায়ারবেসের সাথে তাদের প্রমাণীকরণের সবচেয়ে সহজ উপায় হলো ফায়ারবেস অ্যান্ড্রয়েড এসডিকে (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 অ্যাপলের কাছ থেকে কোনো স্কোপের জন্য অনুরোধ করে না, যদি না আপনি সেগুলি নির্দিষ্ট করে দেন।

  3. ঐচ্ছিক: আপনি যদি অ্যাপলের সাইন-ইন স্ক্রিনটি ইংরেজি ছাড়া অন্য কোনো ভাষায় প্রদর্শন করতে চান, তাহলে locale প্যারামিটারটি সেট করুন। সমর্থিত লোকেলগুলো জানতে ‘ সাইন ইন উইথ অ্যাপল’ ডকুমেন্টেশন দেখুন।

    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 অপারেশনের মতো নয়, এটি একটি কাস্টম ক্রোম ট্যাব খোলার মাধ্যমে আপনার UI-এর নিয়ন্ত্রণ নিয়ে নেবে। ফলস্বরূপ, আপনার সংযুক্ত করা OnSuccessListener এবং OnFailureListener এ আপনার Activity-কে রেফারেন্স করবেন না, কারণ অপারেশনটি 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 প্রদান করে না।

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

    কোনো ব্যবহারকারী প্রথমবার সাইন ইন করার সময়ই অ্যাপল শুধুমাত্র ডিসপ্লে নেমের মতো ব্যবহারকারীর তথ্য অ্যাপগুলোর সাথে শেয়ার করে। সাধারণত, কোনো ব্যবহারকারী প্রথমবার অ্যাপল দিয়ে সাইন ইন করলে ফায়ারবেস ডিসপ্লে নেমটি সংরক্ষণ করে, যা আপনি getCurrentUser().getDisplayName() এর মাধ্যমে পেতে পারেন। তবে, আপনি যদি আগে ফায়ারবেস ব্যবহার না করে অ্যাপলের মাধ্যমে কোনো ব্যবহারকারীকে অ্যাপটিতে সাইন ইন করিয়ে থাকেন, তাহলে অ্যাপল ফায়ারবেসকে ব্যবহারকারীর ডিসপ্লে নেমটি সরবরাহ করবে না।

পুনঃপ্রমাণীকরণ এবং অ্যাকাউন্ট লিঙ্কিং

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() ব্যবহার করতে পারেন।

মনে রাখবেন যে, ব্যবহারকারীদের অ্যাপল অ্যাকাউন্ট অন্য ডেটার সাথে লিঙ্ক করার আগে অ্যাপল আপনাকে তাদের কাছ থেকে সুস্পষ্ট সম্মতি নিতে বলে।

উদাহরণস্বরূপ, বর্তমান 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. প্রতিটি সাইন-ইন অনুরোধের জন্য, একটি র‍্যান্ডম স্ট্রিং—একটি 'নন্স'—তৈরি করুন, যা ব্যবহার করে আপনি নিশ্চিত করবেন যে আপনার প্রাপ্ত আইডি টোকেনটি বিশেষভাবে আপনার অ্যাপের প্রমাণীকরণ অনুরোধের জবাবেই প্রদান করা হয়েছে। রিপ্লে অ্যাটাক প্রতিরোধ করার জন্য এই পদক্ষেপটি গুরুত্বপূর্ণ।

    আপনি SecureRandom ব্যবহার করে অ্যান্ড্রয়েডে একটি ক্রিপ্টোগ্রাফিকভাবে সুরক্ষিত ননস (nonce) তৈরি করতে পারেন, যেমনটি নিম্নলিখিত উদাহরণে দেখানো হয়েছে:

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

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

  3. Apple-এর প্রতিক্রিয়া পাওয়ার পর, সেই প্রতিক্রিয়া থেকে ID টোকেনটি নিন এবং সেটি ও আনহ্যাশড ননস (unhashed 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 মেথডটি ব্যবহার করে ব্যবহারকারীর অ্যাকাউন্টের তথ্য পেতে পারেন।

টোকেন প্রত্যাহার

অ্যাপ স্টোর রিভিউ নির্দেশিকায় বর্ণিত নিয়ম অনুযায়ী, অ্যাপলের এই শর্ত আরোপ করা হয়েছে যে, যেসব অ্যাপে অ্যাকাউন্ট তৈরির সুবিধা রয়েছে, ব্যবহারকারীদের অবশ্যই অ্যাপের ভেতর থেকেই নিজেদের অ্যাকাউন্ট মুছে ফেলার সুযোগ দিতে হবে।

এছাড়াও, যে অ্যাপগুলো ‘সাইন ইন উইথ অ্যাপল’ সমর্থন করে, তাদের ব্যবহারকারীর টোকেন বাতিল করার জন্য ‘সাইন ইন উইথ অ্যাপল’ REST API ব্যবহার করা উচিত।

এই শর্তটি পূরণ করতে, নিম্নলিখিত পদক্ষেপগুলি বাস্তবায়ন করুন:

  1. Apple ব্যবহার করে সাইন-ইন করতে এবং AuthResult পেতে startActivityForSignInWithProvider() মেথডটি ব্যবহার করুন।

  2. অ্যাপল প্রোভাইডারের জন্য অ্যাক্সেস টোকেনটি সংগ্রহ করুন।

    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. অবশেষে, ব্যবহারকারীর অ্যাকাউন্টটি (এবং এর সাথে যুক্ত সমস্ত ডেটা) মুছে ফেলুন

    পরবর্তী পদক্ষেপ

    কোনো ব্যবহারকারী প্রথমবার সাইন ইন করার পর, একটি নতুন ব্যবহারকারী অ্যাকাউন্ট তৈরি হয় এবং সেটি ব্যবহারকারীর সাইন ইন করার ক্রেডেনশিয়াল—অর্থাৎ, ইউজার নেম ও পাসওয়ার্ড, ফোন নম্বর, বা অথোরাইজেশন প্রোভাইডারের তথ্যের—সাথে লিঙ্ক করা হয়। এই নতুন অ্যাকাউন্টটি আপনার ফায়ারবেস প্রজেক্টের অংশ হিসেবে সংরক্ষিত থাকে এবং ব্যবহারকারী কীভাবে সাইন ইন করছেন তা নির্বিশেষে, আপনার প্রজেক্টের প্রতিটি অ্যাপে তাকে শনাক্ত করতে এটি ব্যবহার করা যেতে পারে।

    • আপনার অ্যাপগুলিতে, আপনি FirebaseUser অবজেক্ট থেকে ব্যবহারকারীর প্রাথমিক প্রোফাইল তথ্য পেতে পারেন। ব্যবহারকারী ব্যবস্থাপনা (Manage Users) দেখুন।

    • আপনার Firebase Realtime Database and Cloud Storage Security Rules- এ, আপনি auth ভেরিয়েবল থেকে সাইন-ইন করা ব্যবহারকারীর অনন্য ইউজার আইডি পেতে পারেন এবং একজন ব্যবহারকারী কোন ডেটা অ্যাক্সেস করতে পারবে তা নিয়ন্ত্রণ করতে এটি ব্যবহার করতে পারেন।

    বিদ্যমান কোনো ব্যবহারকারী অ্যাকাউন্টের সাথে অথেন্টিকেশন প্রোভাইডারের ক্রেডেনশিয়াল লিঙ্ক করার মাধ্যমে আপনি ব্যবহারকারীদের একাধিক অথেন্টিকেশন প্রোভাইডার ব্যবহার করে আপনার অ্যাপে সাইন ইন করার অনুমতি দিতে পারেন।

    কোনো ব্যবহারকারীকে সাইন আউট করতে, signOut কল করুন:

    Kotlin

    Firebase.auth.signOut()

    Java

    FirebaseAuth.getInstance().signOut();