Catch up on everthing we announced at this year's Firebase Summit. Learn more

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

অ্যাক্সেস করুন 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);
    

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

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

অ্যাপল প্ল্যাটফর্মে

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

  2. Apple-এর সাইন-ইন ফ্লো শুরু করুন, আপনার অনুরোধে ননসের 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 শংসাপত্র তৈরি করতে এবং Firebase-এ সাইন ইন করতে ফলস্বরূপ টোকেন স্ট্রিং এবং অরিজিনিয়াল নন্স ব্যবহার করুন।

    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. অ্যাপল সাইন ইনের সাথে একটি অ্যাকাউন্ট লিঙ্ক করতে একই প্যাটার্ন ব্যবহার করা যেতে পারে। যাইহোক, আপনি একটি ত্রুটির সম্মুখীন হতে পারেন যখন একটি বিদ্যমান Firebase অ্যাকাউন্ট ইতিমধ্যেই আপনি যে Apple অ্যাকাউন্টের সাথে লিঙ্ক করার চেষ্টা করছেন তার সাথে লিঙ্ক করা হয়েছে৷ এই পরিস্থিতিতে ভবিষ্যতের একটি স্থিতি ফিরে আসবে 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.
    }
    

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

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

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() বিদ্যমান অ্যাকাউন্টে বিভিন্ন পরিচিতি প্রদানকারীদের লিঙ্ক করতে।

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

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

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

Apple Notes দিয়ে সাইন ইন করুন

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

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

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

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

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

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

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