অ্যাপল এবং সি ++ ব্যবহার করে প্রমাণীকরণ করুন

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

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

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

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

সাইন ইন অ্যাপল শুধুমাত্র সদস্য কনফিগার করা যেতে পারে অ্যাপল বিকাশকারী প্রোগ্রাম

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

অ্যাপল সাইন ইন আপনার ফায়ারবেস প্রজেক্টে সক্ষম এবং সঠিকভাবে কনফিগার করা আবশ্যক। অ্যান্ড্রয়েড এবং আইওএস প্ল্যাটফর্ম জুড়ে কনফিগারেশন পরিবর্তিত হয়। বিভাগে "আপেল দিয়ে কনফিগার সাইন ইন" অনুসরণ করুন আইওএস এবং / অথবা অ্যান্ড্রয়েড অগ্রসর হওয়ার আগে নির্দেশিকা।

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

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

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

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

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

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

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

অ্যাক্সেস করুন firebase::auth::Auth বর্গ

Auth বর্গ সব API কল জন্য গেটওয়ে।
  1. প্রমাণীকরণ এবং অ্যাপ হেডার ফাইল যোগ করুন
    #include "firebase/app.h"
    #include "firebase/auth.h"
    
  2. আপনার আরম্ভের কোড, একটি তৈরি firebase::App বর্গ।
    #if defined(__ANDROID__)
      firebase::App* app =
          firebase::App::Create(firebase::AppOptions(), my_jni_env, my_activity);
    #else
      firebase::App* app = firebase::App::Create(firebase::AppOptions());
    #endif  // defined(__ANDROID__)
    
  3. অর্জন firebase::auth::Auth আপনার জন্য ক্লাস firebase::App । তার মাঝে একটি একের সাথে এক ম্যাপিং হয় App এবং Auth
    firebase::auth::Auth* auth = firebase::auth::Auth::GetAuth(app);
    

ফায়ারবেস এসডিকে দিয়ে সাইন-ইন প্রবাহ পরিচালনা করুন

অ্যাপলের সাথে সাইন ইন করার প্রক্রিয়াটি iOS এবং অ্যান্ড্রয়েড প্ল্যাটফর্ম জুড়ে পরিবর্তিত হয়।

IOS- এ

আপনার C ++ কোড থেকে অ্যাপল সাইন ইন অবজেক্টিভ-সি SDK এর মাধ্যমে আপনার ব্যবহারকারীদের Firebase দিয়ে প্রমাণীকরণ করুন।

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

      - (NSString *)randomNonce:(NSInteger)length {
        NSAssert(length > 0, @"Expected nonce to have positive length");
        NSString *characterSet = @"0123456789ABCDEFGHIJKLMNOPQRSTUVXYZabcdefghijklmnopqrstuvwxyz-._";
        NSMutableString *result = [NSMutableString string];
        NSInteger remainingLength = length;
    
        while (remainingLength > 0) {
          NSMutableArray *randoms = [NSMutableArray arrayWithCapacity:16];
          for (NSInteger i = 0; i < 16; i++) {
            uint8_t random = 0;
            int errorCode = SecRandomCopyBytes(kSecRandomDefault, 1, &random);
            NSAssert(errorCode == errSecSuccess, @"Unable to generate nonce: OSStatus %i", errorCode);
    
            [randoms addObject:@(random)];
          }
    
          for (NSNumber *random in randoms) {
            if (remainingLength == 0) {
              break;
            }
    
            if (random.unsignedIntValue < characterSet.length) {
              unichar character = [characterSet characterAtIndex:random.unsignedIntValue];
              [result appendFormat:@"%C", character];
              remainingLength--;
            }
          }
        }
      }
    
    

    আপনি আপনার সাইন-ইন রিকোয়েস্ট সহ ননস এর SHA256 হ্যাশ পাঠাবেন, যা অ্যাপল প্রতিক্রিয়াতে অপরিবর্তিত থাকবে। ফায়ারবেস আসল ননস হ্যাশ করে এবং অ্যাপল দ্বারা প্রদত্ত মূল্যের সাথে তুলনা করে প্রতিক্রিয়াটি যাচাই করে।

  2. অ্যাপলের সাইন-ইন প্রবাহ শুরু করুন, আপনার অনুরোধ সহ ননস এর SHA256 হ্যাশ এবং প্রতিনিধি শ্রেণী যা অ্যাপলের প্রতিক্রিয়া পরিচালনা করবে (পরবর্তী ধাপ দেখুন):

      - (void)startSignInWithAppleFlow {
        NSString *nonce = [self randomNonce:32];
        self.currentNonce = nonce;
        ASAuthorizationAppleIDProvider *appleIDProvider = [[ASAuthorizationAppleIDProvider alloc] init];
        ASAuthorizationAppleIDRequest *request = [appleIDProvider createRequest];
        request.requestedScopes = @[ASAuthorizationScopeFullName, ASAuthorizationScopeEmail];
        request.nonce = [self stringBySha256HashingString:nonce];
    
        ASAuthorizationController *authorizationController =
            [[ASAuthorizationController alloc] initWithAuthorizationRequests:@[request]];
        authorizationController.delegate = self;
        authorizationController.presentationContextProvider = self;
        [authorizationController performRequests];
      }
    
      - (NSString *)stringBySha256HashingString:(NSString *)input {
        const char *string = [input UTF8String];
        unsigned char result[CC_SHA256_DIGEST_LENGTH];
        CC_SHA256(string, (CC_LONG)strlen(string), result);
    
        NSMutableString *hashed = [NSMutableString stringWithCapacity:CC_SHA256_DIGEST_LENGTH * 2];
        for (NSInteger i = 0; i < CC_SHA256_DIGEST_LENGTH; i++) {
          [hashed appendFormat:@"%02x", result[i]];
        }
        return hashed;
      }
    
  3. ASAuthorizationControllerDelegate` এর বাস্তবায়নে অ্যাপলের প্রতিক্রিয়া সামলান। যদি সাইন-ইন সফল হয়, তাহলে ফায়ারবেস দিয়ে প্রমাণীকরণের জন্য অ্যাপলের প্রতিক্রিয়া থেকে আইডি টোকেনটি ব্যবহার করুন:

      - (void)authorizationController:(ASAuthorizationController *)controller
         didCompleteWithAuthorization:(ASAuthorization *)authorization API_AVAILABLE(ios(13.0)) {
        if ([authorization.credential isKindOfClass:[ASAuthorizationAppleIDCredential class]]) {
          ASAuthorizationAppleIDCredential *appleIDCredential = authorization.credential;
          NSString *rawNonce = self.currentNonce;
          NSAssert(rawNonce != nil, @"Invalid state: A login callback was received, but no login request was sent.");
    
          if (appleIDCredential.identityToken == nil) {
            NSLog(@"Unable to fetch identity token.");
            return;
          }
    
          NSString *idToken = [[NSString alloc] initWithData:appleIDCredential.identityToken
                                                    encoding:NSUTF8StringEncoding];
          if (idToken == nil) {
            NSLog(@"Unable to serialize id token from data: %@", appleIDCredential.identityToken);
          }
        }
    
  4. ফায়ারবেস ক্রেডেনশিয়াল তৈরি করতে এবং ফায়ারবেসে সাইন ইন করতে টোকেন স্ট্রিং এবং অরিগিনিয়াল ননস ব্যবহার করুন।

    firebase::auth::OAuthProvider::GetCredential(
            /*provider_id=*/"apple.com", token, nonce,
            /*access_token=*/nullptr);
    
    firebase::Future<firebase::auth::User*> result =
        auth->SignInWithCredential(credential);
    
  5. একই প্যাটার্ন ব্যবহার করা যেতে পারে Reauthenticate যা সংবেদনশীল অপারেশন সাম্প্রতিক লগইন করা প্রয়োজন জন্য তাজা পরিচয়পত্র উদ্ধার করতে ব্যবহার করা যাবে।

    firebase::Future<firebase::auth::SignInResult> result =
        user->Reauthenticate(credential);
    
  6. অ্যাপল সাইন ইন এর সাথে একটি অ্যাকাউন্ট লিঙ্ক করতে একই প্যাটার্ন ব্যবহার করা যেতে পারে। যাইহোক, আপনি একটি ত্রুটির সম্মুখীন হতে পারেন যখন একটি বিদ্যমান ফায়ারবেস অ্যাকাউন্ট ইতিমধ্যে অ্যাপল অ্যাকাউন্টের সাথে সংযুক্ত করা হয়েছে যার বিরুদ্ধে আপনি লিঙ্ক করার চেষ্টা করছেন। এই পরিস্থিতিতে ভবিষ্যতের একটি স্থিতি ফিরে আসবে kAuthErrorCredentialAlreadyInUse এবং UserInfo বস্তুর SignInResult একটি বৈধ থাকতে পারে updated_credential । এই শংসাপত্র মাধ্যমে অ্যাপল সংযুক্ত অ্যাকাউন্ট সাইন ইন করতে ব্যবহার করা যেতে পারে SignInWithCredential জেনারেট করতে টোকেন ও আপাতত আরেকটি অ্যাপল সাইন প্রয়োজন ছাড়াই।

    মনে রাখবেন আপনি ব্যবহার করা আবশ্যক LinkAndRetrieveDataWithCredential যেমন ক্রেডেনশিয়াল ধারণ এই অপারেশনের জন্য updated_credential একজন সদস্য SignInResult.UserInfo অবজেক্ট।

    firebase::Future<firebase::auth::SignInResult> link_result =
        auth->current_user()->LinkAndRetrieveDataWithCredential(credential);
    
    // To keep example simple, wait on the current thread until call completes.
    while (link_result.status() == firebase::kFutureStatusPending) {
      Wait(100);
    }
    
    // Determine the result of the link attempt
    if (link_result.error() == firebase::auth::kAuthErrorNone) {
      // user linked correctly.
    } else if (link_result.error() ==
                   firebase::auth::kAuthErrorCredentialAlreadyInUse &&
               link_result.result()->info.updated_credential.is_valid()) {
      // Sign In with the new credential
      firebase::Future<firebase::auth::User*> result = auth->SignInWithCredential(
          link_result.result()->info.updated_credential);
    } else {
      // Another link error occurred.
    }
    

অ্যান্ড্রয়েডে

Android- এ, আপনার ব্যবহারকারীদের Firebase- এর সাথে প্রমাণীকরণ করুন ওয়েব-ভিত্তিক জেনেরিক OAuth লগ-ইন করে আপনার অ্যাপ্লিকেশনে Firebase SDK ব্যবহার করে সাইন-ইন প্রবাহ শেষ করতে।

ফায়ারবেস এসডিকে দিয়ে সাইন-ইন প্রবাহ পরিচালনা করতে, এই পদক্ষেপগুলি অনুসরণ করুন:

  1. একটি একটি দৃষ্টান্ত আঁকো FederatedOAuthProviderData অ্যাপল জন্য প্রদানকারীর আইডি উপযুক্ত কনফিগার।

    firebase::auth::FederatedOAuthProviderData provider_data("apple.com");
    
  2. ঐচ্ছিক: আপনি প্রমাণীকরণ প্রদানকারীর থেকে অনুরোধ করতে চান ডিফল্ট পরলোক 2.0 সুযোগ উল্লেখ অতিরিক্ত OAuth এর।

    provider_data.scopes.push_back("email");
    provider_data.scopes.push_back("name");
    
  3. ঐচ্ছিক: আপনি ইংরেজী ছাড়া অন্য একটি ভাষায় অ্যাপলের সাইন-ইন স্ক্রিনে প্রদর্শন করতে চান তাহলে, সেট locale প্যারামিটার। দেখুন সাইন অ্যাপল ডক্সের সঙ্গে সালে সমর্থিত লোকেলের জন্য।

    // Localize to French.
    provider_data.custom_parameters["language"] = "fr";
    ```
    
  4. একবার আপনার প্রদানকারীর ডেটা কনফিগার হয়ে গেলে, এটি একটি FederatedOAuthProvider তৈরি করতে ব্যবহার করুন।

    // Construct a FederatedOAuthProvider for use in Auth methods.
    firebase::auth::FederatedOAuthProvider provider(provider_data);
    
  5. Auth প্রদানকারী বস্তু ব্যবহার করে Firebase দিয়ে প্রমাণীকরণ করুন। মনে রাখবেন যে অন্যান্য FirebaseAuth অপারেশনের বিপরীতে, এটি একটি ওয়েব ভিউ পপ আপ করে আপনার UI- এর নিয়ন্ত্রণ নেবে যেখানে ব্যবহারকারী তাদের শংসাপত্রগুলি প্রবেশ করতে পারে।

    প্রবাহ সাইন ইন শুরু করার জন্য, কল signInWithProvider :

    firebase::Future<firebase::auth::SignInResult> result =
      auth->SignInWithProvider(provider_data);
    

    আপনার অ্যাপ্লিকেশান তারপর অপেক্ষা করুন বা পারে ভবিষ্যত একটি কলব্যাক করো

  6. একই প্যাটার্ন ব্যবহার করা যেতে পারে ReauthenticateWithProvider যা সংবেদনশীল অপারেশন সাম্প্রতিক লগইন করা প্রয়োজন জন্য তাজা পরিচয়পত্র উদ্ধার করতে ব্যবহার করা যাবে।

    firebase::Future<firebase::auth::SignInResult> result =
      user->ReauthenticateWithProvider(provider_data);
    

    আপনার অ্যাপ্লিকেশান তারপর অপেক্ষা করুন বা পারে ভবিষ্যত একটি কলব্যাক করো

  7. এবং, আপনি ব্যবহার করতে পারেন linkWithCredential() বিদ্যমান অ্যাকাউন্টে বিভিন্ন পরিচিতি প্রদানকারীদের লিঙ্ক করতে।

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

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

    // Initialize a Facebook credential with a Facebook access token.
    AuthCredential credential =
        firebase::auth::FacebookAuthProvider.getCredential(token);
    
    // Assuming the current user is an Apple user linking a Facebook provider.
    firebase::Future<firebase::auth::SignInResult> result =
        auth.getCurrentUser().linkWithCredential(credential);
    

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

Firebase Auth দ্বারা সমর্থিত অন্যান্য প্রদানকারীর বিপরীতে, Apple একটি ছবির URL প্রদান করে না।

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

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

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

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

আপনার অ্যাপে, আপনি ফায়ারবেস :: auth :: user অবজেক্ট থেকে ব্যবহারকারীর প্রাথমিক প্রোফাইল তথ্য পেতে পারেন। দেখুন ব্যবহারকারীদের পরিচালনা

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