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

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

তুমি শুরু করার আগে

Apple ব্যবহার করে ব্যবহারকারীদের সাইন ইন করতে, প্রথমে Apple এর বিকাশকারী সাইটে Apple এর সাথে সাইন ইন কনফিগার করুন, তারপর আপনার Firebase প্রকল্পের জন্য একটি সাইন-ইন প্রদানকারী হিসাবে Apple সক্ষম করুন৷

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

Apple এর সাথে সাইন ইন শুধুমাত্র Apple বিকাশকারী প্রোগ্রামের সদস্যদের দ্বারা কনফিগার করা যেতে পারে৷

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

অ্যাপল বিকাশকারী সাইটে, নিম্নলিখিতগুলি করুন:

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

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

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

    আপনার হয়ে গেলে, আপনার নতুন পরিষেবা আইডি নোট করুন, যা আপনাকে পরবর্তী বিভাগে প্রয়োজন হবে৷

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

একটি সাইন-ইন প্রদানকারী হিসাবে Apple সক্ষম করুন৷

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

অ্যাপল বেনামী ডেটা প্রয়োজনীয়তা মেনে চলুন

অ্যাপলের সাথে সাইন ইন ব্যবহারকারীদের সাইন ইন করার সময় তাদের ইমেল ঠিকানা সহ তাদের ডেটা বেনামী করার বিকল্প দেয়৷ যে ব্যবহারকারীরা এই বিকল্পটি বেছে নেন তাদের কাছে privaterelay.appleid.com ডোমেনের ইমেল ঠিকানা রয়েছে৷ আপনি যখন আপনার অ্যাপে Apple এর সাথে সাইন ইন ব্যবহার করেন, তখন আপনাকে অবশ্যই এই বেনামী Apple ID সংক্রান্ত যেকোন প্রযোজ্য বিকাশকারী নীতি বা Apple থেকে শর্তাবলী মেনে চলতে হবে।

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

  • একটি বেনামী অ্যাপল আইডি বা বিপরীতে একটি ইমেল ঠিকানা লিঙ্ক করুন.
  • একটি বেনামী অ্যাপল আইডিতে একটি ফোন নম্বর লিঙ্ক করুন বা এর বিপরীতে
  • একটি বেনামী সামাজিক শংসাপত্র (ফেসবুক, গুগল, ইত্যাদি) একটি বেনামী অ্যাপল আইডিতে বা এর বিপরীতে লিঙ্ক করুন৷

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

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

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

Firebase Android SDK-এর সাথে সাইন-ইন প্রবাহ পরিচালনা করতে, এই পদক্ষেপগুলি অনুসরণ করুন:

  1. প্রদানকারী আইডি apple.com এর সাথে বিল্ডার ব্যবহার করে একটি OAuthProvider এর একটি উদাহরণ তৈরি করুন:

    Kotlin+KTX

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

    Java

    OAuthProvider.Builder provider = OAuthProvider.newBuilder("apple.com");
    
  2. ঐচ্ছিক: ডিফল্টের বাইরে অতিরিক্ত OAuth 2.0 স্কোপ নির্দিষ্ট করুন যা আপনি প্রমাণীকরণ প্রদানকারীর কাছ থেকে অনুরোধ করতে চান।

    Kotlin+KTX

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

    Java

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

    ডিফল্টরূপে, যখন প্রতি ইমেল ঠিকানায় একটি অ্যাকাউন্ট সক্রিয় থাকে, তখন Firebase ইমেল এবং নামের সুযোগের অনুরোধ করে। আপনি যদি এই সেটিংটি প্রতি ইমেল ঠিকানায় একাধিক অ্যাকাউন্টে পরিবর্তন করেন, তাহলে Firebase অ্যাপল থেকে কোনো সুযোগের অনুরোধ করে না যদি না আপনি সেগুলি নির্দিষ্ট করেন।

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

    Kotlin+KTX

    // 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 এ আপনার অ্যাক্টিভিটি উল্লেখ করবেন না যেগুলি আপনি সংযুক্ত করেছেন কারণ UI চালু হলে তারা অবিলম্বে বিচ্ছিন্ন হয়ে যাবে।

    আপনি ইতিমধ্যে একটি প্রতিক্রিয়া পেয়েছেন কিনা তা আগে পরীক্ষা করা উচিত. এই পদ্ধতিতে সাইন ইন করা আপনার কার্যকলাপকে ব্যাকগ্রাউন্ডে রাখে, যার মানে সাইন ইন ফ্লো চলাকালীন সিস্টেম দ্বারা এটি পুনরুদ্ধার করা যেতে পারে। যদি এটি ঘটে থাকে তবে আপনি ব্যবহারকারীকে আবার চেষ্টা করতে বাধ্য করবেন না তা নিশ্চিত করার জন্য, আপনার ফলাফল ইতিমধ্যে উপস্থিত আছে কিনা তা পরীক্ষা করা উচিত।

    একটি মুলতুবি ফলাফল আছে কিনা তা পরীক্ষা করতে, getPendingAuthResult() কল করুন :

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

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

    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 ), যা এটি আপনার অ্যাপের সাথে শেয়ার করে। আপনি যদি ব্যক্তিগত ইমেল রিলে পরিষেবা কনফিগার করেন, অ্যাপল ব্যবহারকারীর আসল ইমেল ঠিকানায় বেনামী ঠিকানায় পাঠানো ইমেলগুলি ফরওয়ার্ড করে।

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

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

একই প্যাটার্ন startActivityForReauthenticateWithProvider() এর সাথে ব্যবহার করা যেতে পারে যা আপনি সাম্প্রতিক সাইন-ইন প্রয়োজন এমন সংবেদনশীল অপারেশনগুলির জন্য একটি নতুন শংসাপত্র পুনরুদ্ধার করতে ব্যবহার করতে পারেন:

Kotlin+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.
    })

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

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

উদাহরণস্বরূপ, বর্তমান ফায়ারবেস অ্যাকাউন্টের সাথে একটি Facebook অ্যাকাউন্ট লিঙ্ক করতে, ব্যবহারকারীকে Facebook-এ সাইন ইন করার সময় আপনি যে অ্যাক্সেস টোকেন পেয়েছেন তা ব্যবহার করুন:

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

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 সাইন-ইন JS SDK ব্যবহার করে, ম্যানুয়ালি OAuth ফ্লো তৈরি করে বা AppAuth- এর মতো একটি OAuth লাইব্রেরি ব্যবহার করে সাইন-ইন ফ্লো পরিচালনা করে অ্যাপল অ্যাকাউন্ট ব্যবহার করে Firebase-এর মাধ্যমে প্রমাণীকরণ করতে পারেন।

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

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

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

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

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

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

    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 এর প্রতিক্রিয়া পাওয়ার পরে, প্রতিক্রিয়া থেকে আইডি টোকেনটি পান এবং এটি ব্যবহার করুন এবং একটি AuthCredential তৈরি করতে আনহ্যাশড নন্স ব্যবহার করুন:

    Kotlin+KTX

    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+KTX

    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 REST API দিয়ে সাইন ইন ব্যবহার করা উচিত।

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

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

  2. অ্যাপল প্রদানকারীর জন্য অ্যাক্সেস টোকেন পান।

    Kotlin+KTX

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

    Java

    OAuthCredential oauthCredential = (OAuthCredential) authResult.getCredential();
    String accessToken = oauthCredential.getAccessToken();
    
  3. revokeAccessToken API ব্যবহার করে টোকেন প্রত্যাহার করুন।

    Kotlin+KTX

    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 অবজেক্ট থেকে ব্যবহারকারীর মৌলিক প্রোফাইল তথ্য পেতে পারেন। ব্যবহারকারীদের পরিচালনা দেখুন।

    • আপনার ফায়ারবেস রিয়েলটাইম ডেটাবেস এবং ক্লাউড স্টোরেজ সুরক্ষা নিয়মে , আপনি auth ভেরিয়েবল থেকে সাইন-ইন করা ব্যবহারকারীর অনন্য ব্যবহারকারী আইডি পেতে পারেন এবং ব্যবহারকারী কোন ডেটা অ্যাক্সেস করতে পারে তা নিয়ন্ত্রণ করতে এটি ব্যবহার করতে পারেন।

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

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

    Kotlin+KTX

    Firebase.auth.signOut()

    Java

    FirebaseAuth.getInstance().signOut();