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

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

শুরু করার আগে

ফায়ারবেস ডিপেন্ডেন্সিগুলো ইনস্টল ও পরিচালনা করতে সুইফট প্যাকেজ ম্যানেজার ব্যবহার করুন।

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

আপনার প্রজেক্টে গুগল সাইন-ইন এসডিকে যোগ করুন

  1. Xcode-এ আপনার অ্যাপ প্রজেক্টটি খুলে, File > Add Packages- এ যান।

  2. অনুরোধ করা হলে, গুগল সাইন-ইন এসডিকে রিপোজিটরিটি যোগ করুন:

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

আপনার Firebase প্রোজেক্টের জন্য Google Sign-In সক্রিয় করুন।

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

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

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

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

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

সুইফট

import FirebaseAuth
import GoogleSignIn

উদ্দেশ্য-সি

@import FirebaseCore;
@import GoogleSignIn;

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

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

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

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

  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. আপনার অ্যাপের প্রেজেন্টিং ভিউ কন্ট্রোলার এবং ক্লায়েন্ট আইডি গুগল সাইন-ইন প্রোভাইডারের signIn মেথডে পাস করুন এবং ফলস্বরূপ প্রাপ্ত গুগল অথ টোকেন থেকে একটি ফায়ারবেস অথেন্টিকেশন ক্রেডেনশিয়াল তৈরি করুন:

    সুইফট

    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 ফাইলে বাটনটি যোগ করতে, একটি ভিউ তৈরি করুন এবং এর কাস্টম ক্লাসটি GIDSignInButton হিসেবে সেট করুন।
  6. ঐচ্ছিক : আপনি যদি বাটনটি কাস্টমাইজ করতে চান, তাহলে নিম্নলিখিতগুলি করুন:

    সুইফট

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

    উদ্দেশ্য-সি

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

ফায়ারবেস দিয়ে প্রমাণীকরণ করুন

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

সুইফট

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;
  // ...
}];

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

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

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

  • আপনার Firebase Realtime Database and Cloud Storage Security Rules- এ, আপনি 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;
}

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