Apple প্ল্যাটফর্মে Google সাইন-ইন ব্যবহার করে প্রমাণীকরণ করুন

আপনার অ্যাপে গুগল সাইন-ইন সংহত করে আপনি আপনার ব্যবহারকারীদের তাদের গুগল অ্যাকাউন্ট ব্যবহার করে ফায়ারবেসের সাথে প্রমাণীকরণ করতে দিতে পারেন।

শুরু করার আগে

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

  1. Xcode-এ, আপনার অ্যাপ প্রজেক্ট খোলা থাকা অবস্থায়, File > Add Packages- এ নেভিগেট করুন।
  2. অনুরোধ করা হলে, Firebase Apple platforms SDK সংগ্রহস্থল যোগ করুন:
  3.   https://github.com/firebase/firebase-ios-sdk.git
  4. Firebase Authentication লাইব্রেরিটি বেছে নিন।
  5. আপনার টার্গেটের বিল্ড সেটিংসের অন্যান্য লিঙ্কার ফ্ল্যাগ বিভাগে -ObjC ফ্ল্যাগ যোগ করুন।
  6. শেষ হয়ে গেলে, Xcode স্বয়ংক্রিয়ভাবে ব্যাকগ্রাউন্ডে আপনার নির্ভরতাগুলি সমাধান এবং ডাউনলোড করা শুরু করবে।

আপনার প্রোজেক্টে Google সাইন-ইন SDK যোগ করুন

  1. Xcode-এ, আপনার অ্যাপ প্রজেক্ট খোলা থাকা অবস্থায়, File > Add Packages- এ নেভিগেট করুন।

  2. অনুরোধ করা হলে, Google সাইন-ইন SDK সংগ্রহস্থল যোগ করুন:

    https://github.com/google/GoogleSignIn-iOS
    
  3. শেষ হয়ে গেলে, Xcode স্বয়ংক্রিয়ভাবে ব্যাকগ্রাউন্ডে আপনার নির্ভরতাগুলি সমাধান এবং ডাউনলোড করা শুরু করবে।

আপনার Firebase প্রোজেক্টের জন্য Google সাইন-ইন সক্ষম করুন

ব্যবহারকারীদের Google সাইন-ইন ব্যবহার করে সাইন ইন করার অনুমতি দিতে, আপনাকে প্রথমে আপনার Firebase প্রকল্পের জন্য Google সাইন-ইন প্রদানকারী সক্ষম করতে হবে:

  1. Firebase কনসোলে , প্রমাণীকরণ বিভাগটি খুলুন।
  2. সাইন ইন পদ্ধতি ট্যাবে, গুগল প্রোভাইডার সক্ষম করুন।
  3. সংরক্ষণ করুন ক্লিক করুন।

  4. আপনার প্রোজেক্টের GoogleService-Info.plist ফাইলের একটি নতুন কপি ডাউনলোড করুন এবং এটি আপনার Xcode প্রোজেক্টে কপি করুন। বিদ্যমান যেকোনো সংস্করণ নতুনটি দিয়ে ওভাররাইট করুন। ( আপনার iOS প্রোজেক্টে Firebase যোগ করুন দেখুন।)

প্রয়োজনীয় হেডার ফাইলগুলি আমদানি করুন

প্রথমে, আপনাকে আপনার অ্যাপে Firebase SDK এবং Google সাইন-ইন SDK হেডার ফাইলগুলি আমদানি করতে হবে।

সুইফট

import FirebaseAuth
import GoogleSignIn

অবজেক্টিভ-সি

@import FirebaseCore;
@import GoogleSignIn;

গুগল সাইন-ইন বাস্তবায়ন করুন

এই ধাপগুলি অনুসরণ করে Google সাইন-ইন বাস্তবায়ন করুন। iOS এর সাথে Google সাইন-ইন ব্যবহার সম্পর্কে বিস্তারিত জানতে Google সাইন-ইন ডেভেলপার ডকুমেন্টেশন দেখুন।

  1. আপনার Xcode প্রকল্পে কাস্টম URL স্কিম যোগ করুন:
    1. আপনার প্রোজেক্ট কনফিগারেশন খুলুন: বাম ট্রি ভিউতে প্রোজেক্টের নামের উপর ক্লিক করুন। TARGETS বিভাগ থেকে আপনার অ্যাপটি নির্বাচন করুন, তারপর তথ্য ট্যাব নির্বাচন করুন এবং URL প্রকার বিভাগটি প্রসারিত করুন।
    2. + বোতামে ক্লিক করুন, এবং আপনার বিপরীত ক্লায়েন্ট আইডির জন্য একটি URL স্কিম যোগ করুন। এই মানটি খুঁজে পেতে, GoogleService-Info.plist কনফিগারেশন ফাইলটি খুলুন এবং REVERSED_CLIENT_ID কীটি সন্ধান করুন। সেই কীটির মানটি অনুলিপি করুন এবং কনফিগারেশন পৃষ্ঠার URL স্কিম বাক্সে পেস্ট করুন। অন্যান্য ক্ষেত্রগুলি অক্ষত রাখুন।

      সম্পূর্ণ হয়ে গেলে, আপনার কনফিগারেশনটি নিম্নলিখিতগুলির মতো দেখতে হবে (তবে আপনার অ্যাপ্লিকেশন-নির্দিষ্ট মানগুলির সাথে):

  2. আপনার অ্যাপ ডেলিগেটের application:didFinishLaunchingWithOptions: পদ্ধতিতে, FirebaseApp অবজেক্টটি কনফিগার করুন।

    সুইফট

    // Use Firebase library to configure APIs
    FirebaseApp.configure()

    অবজেক্টিভ-সি

    // Use Firebase library to configure APIs
    [FIRApp configure];
  3. আপনার অ্যাপ ডেলিগেটের application:openURL:options: পদ্ধতিটি প্রয়োগ করুন। পদ্ধতিটি GIDSignIn ইনস্ট্যান্সের handleURL পদ্ধতিটি কল করা উচিত, যা প্রমাণীকরণ প্রক্রিয়ার শেষে আপনার অ্যাপ্লিকেশনটি যে URLটি গ্রহণ করে তা সঠিকভাবে পরিচালনা করবে।

    সুইফট

    func scene(_ scene: UIScene, openURLContexts URLContexts: Set<UIOpenURLContext>) {
      // ...
    }
      return GIDSignIn.sharedInstance.handle(url)
    }

    অবজেক্টিভ-সি

    - (BOOL)application:(nonnull UIApplication *)application
                openURL:(nonnull NSURL *)url
                options:(nonnull NSDictionary<NSString *, id> *)options {
      return [[GIDSignIn sharedInstance] handleURL:url];
    }
  4. আপনার অ্যাপের জন্য প্রেজেন্টিং ভিউ কন্ট্রোলার এবং ক্লায়েন্ট আইডি Google সাইন-ইন প্রদানকারীর signIn পদ্ধতিতে পাস করুন এবং ফলস্বরূপ Google প্রমাণীকরণ টোকেন থেকে একটি Firebase প্রমাণীকরণ শংসাপত্র তৈরি করুন:

    সুইফট

    guard let clientID = FirebaseApp.app()?.options.clientID else { return }
    
    // Create Google Sign In configuration object.
    let config = GIDConfiguration(clientID: clientID)
    GIDSignIn.sharedInstance.configuration = config
    
    // Start the sign in flow!
    GIDSignIn.sharedInstance.signIn(withPresenting: viewController) { result, error in
      guard error == nil else {
        // ...
        return
      }
    
      guard let user = result?.user,
            let idToken = user.idToken?.tokenString
      else {
        // ...
        return
      }
    
      let credential = GoogleAuthProvider.credential(withIDToken: idToken,
                                                     accessToken: user.accessToken.tokenString)
      self.signIn(with: credential)
    }

    অবজেক্টিভ-সি

    GIDConfiguration *config = [[GIDConfiguration alloc] initWithClientID:[FIRApp defaultApp].options.clientID];
    [GIDSignIn.sharedInstance setConfiguration:config];
    
    __weak __auto_type weakSelf = self;
    [GIDSignIn.sharedInstance signInWithPresentingViewController:self
          completion:^(GIDSignInResult * _Nullable result, NSError * _Nullable error) {
      __auto_type strongSelf = weakSelf;
      if (strongSelf == nil) { return; }
    
      if (error == nil) {
        FIRAuthCredential *credential =
        [FIRGoogleAuthProvider credentialWithIDToken:result.user.idToken.tokenString
                                         accessToken:result.user.accessToken.tokenString];
        // ...
      } else {
        // ...
      }
    }];
  5. আপনার স্টোরিবোর্ড, XIB ফাইলে একটি GIDSignInButton যোগ করুন, অথবা প্রোগ্রাম্যাটিকভাবে এটিকে ইনস্ট্যান্টিয়েট করুন। আপনার স্টোরিবোর্ড বা XIB ফাইলে বোতামটি যোগ করতে, একটি View যোগ করুন এবং এর কাস্টম ক্লাস GIDSignInButton এ সেট করুন।
  6. ঐচ্ছিক : যদি আপনি বোতামটি কাস্টমাইজ করতে চান, তাহলে নিম্নলিখিতগুলি করুন:

    সুইফট

    1. আপনার ভিউ কন্ট্রোলারে, সাইন-ইন বোতামটিকে একটি সম্পত্তি হিসেবে ঘোষণা করুন।
      @IBOutlet weak var signInButton: GIDSignInButton!
    2. আপনার ঘোষিত signInButton বৈশিষ্ট্যের সাথে বোতামটি সংযুক্ত করুন।
    3. GIDSignInButton অবজেক্টের বৈশিষ্ট্য সেট করে বোতামটি কাস্টমাইজ করুন।

    অবজেক্টিভ-সি

    1. আপনার ভিউ কন্ট্রোলারের হেডার ফাইলে, সাইন-ইন বোতামটিকে একটি সম্পত্তি হিসেবে ঘোষণা করুন।
      @property(weak, nonatomic) IBOutlet GIDSignInButton *signInButton;
    2. আপনার ঘোষিত signInButton বৈশিষ্ট্যের সাথে বোতামটি সংযুক্ত করুন।
    3. GIDSignInButton অবজেক্টের বৈশিষ্ট্য সেট করে বোতামটি কাস্টমাইজ করুন।

Firebase দিয়ে প্রমাণীকরণ করুন

অবশেষে, পূর্ববর্তী ধাপে তৈরি প্রমাণীকরণ শংসাপত্র ব্যবহার করে Firebase লগইন প্রক্রিয়াটি সম্পূর্ণ করুন।

সুইফট

Auth.auth().signIn(with: credential) { result, error in
  guard error == nil else {
    // ...
    return
  }

  // At this point, our user is signed in
}
    

অবজেক্টিভ-সি

[[FIRAuth auth] signInWithCredential:credential
                          completion:^(FIRAuthDataResult * _Nullable authResult,
                                       NSError * _Nullable error) {
    if (isMFAEnabled && error && error.code == FIRAuthErrorCodeSecondFactorRequired) {
      FIRMultiFactorResolver *resolver = error.userInfo[FIRAuthErrorUserInfoMultiFactorResolverKey];
      NSMutableString *displayNameString = [NSMutableString string];
      for (FIRMultiFactorInfo *tmpFactorInfo in resolver.hints) {
        [displayNameString appendString:tmpFactorInfo.displayName];
        [displayNameString appendString:@" "];
      }
      [self showTextInputPromptWithMessage:[NSString stringWithFormat:@"Select factor to sign in\n%@", displayNameString]
                           completionBlock:^(BOOL userPressedOK, NSString *_Nullable displayName) {
       FIRPhoneMultiFactorInfo* selectedHint;
       for (FIRMultiFactorInfo *tmpFactorInfo in resolver.hints) {
         if ([displayName isEqualToString:tmpFactorInfo.displayName]) {
           selectedHint = (FIRPhoneMultiFactorInfo *)tmpFactorInfo;
         }
       }
       [FIRPhoneAuthProvider.provider
        verifyPhoneNumberWithMultiFactorInfo:selectedHint
        UIDelegate:nil
        multiFactorSession:resolver.session
        completion:^(NSString * _Nullable verificationID, NSError * _Nullable error) {
          if (error) {
            [self showMessagePrompt:error.localizedDescription];
          } else {
            [self showTextInputPromptWithMessage:[NSString stringWithFormat:@"Verification code for %@", selectedHint.displayName]
                                 completionBlock:^(BOOL userPressedOK, NSString *_Nullable verificationCode) {
             FIRPhoneAuthCredential *credential =
                 [[FIRPhoneAuthProvider provider] credentialWithVerificationID:verificationID
                                                              verificationCode:verificationCode];
             FIRMultiFactorAssertion *assertion = [FIRPhoneMultiFactorGenerator assertionWithCredential:credential];
             [resolver resolveSignInWithAssertion:assertion completion:^(FIRAuthDataResult * _Nullable authResult, NSError * _Nullable error) {
               if (error) {
                 [self showMessagePrompt:error.localizedDescription];
               } else {
                 NSLog(@"Multi factor finanlize sign in succeeded.");
               }
             }];
           }];
          }
        }];
     }];
    }
  else if (error) {
    // ...
    return;
  }
  // User successfully signed in. Get user data from the FIRUser object
  if (authResult == nil) { return; }
  FIRUser *user = authResult.user;
  // ...
}];

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

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

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

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

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

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

সুইফট

let firebaseAuth = Auth.auth()
do {
  try firebaseAuth.signOut()
} catch let signOutError as NSError {
  print("Error signing out: %@", signOutError)
}

অবজেক্টিভ-সি

NSError *signOutError;
BOOL status = [[FIRAuth auth] signOut:&signOutError];
if (!status) {
  NSLog(@"Error signing out: %@", signOutError);
  return;
}

আপনি সম্পূর্ণ পরিসরের প্রমাণীকরণ ত্রুটির জন্য ত্রুটি পরিচালনা কোড যোগ করতে চাইতে পারেন। Handle Errors দেখুন।