আপনার iOS বা macOS অ্যাপে Google সাইন-ইন সংহত করা হচ্ছে

এই পৃষ্ঠায় দেখানো হয়েছে কীভাবে একটি iOS বা macOS অ্যাপে গুগল সাইন-ইন যুক্ত করতে হয়। আপনার অ্যাপের জীবনচক্র বা UI মডেল অনুযায়ী এই নির্দেশাবলী পরিবর্তন করার প্রয়োজন হতে পারে।

শুরু করার আগে

নির্ভরতাগুলো ডাউনলোড করুন, আপনার Xcode প্রজেক্ট কনফিগার করুন এবং আপনার ক্লায়েন্ট আইডি সেট করুন

সাইন-ইন কীভাবে কাজ করে তা দেখতে আমাদের iOS এবং macOS স্যাম্পল অ্যাপটি ব্যবহার করে দেখুন

১. প্রমাণীকরণ পুনঃনির্দেশ URL পরিচালনা করুন

ব্যবহারকারী গুগলের মাধ্যমে প্রমাণীকরণ সম্পন্ন করার পর, প্রমাণীকরণ প্রক্রিয়াটি তাকে একটি URL সহ আপনার অ্যাপে ফেরত পাঠায়, যেটিতে ব্যবহারকারীর আইডি টোকেনসহ প্রমাণীকরণের প্রতিক্রিয়াটি থাকে। এই URL-টি GIDSignIn এ পাঠালে SDK প্রতিক্রিয়াটি পার্স করতে এবং ব্যবহারকারীর ক্রেডেনশিয়াল আপনার অ্যাপে ফেরত পাঠাতে পারে।

iOS: UIApplicationDelegate

আপনার AppDelegate-এর application:openURL:options মেথডে, GIDSignIn এর handleURL: মেথডটি কল করুন:

সুইফট

func application(
  _ app: UIApplication,
  open url: URL, options: [UIApplication.OpenURLOptionsKey : Any] = [:]
) -> Bool {
  var handled: Bool

  handled = GIDSignIn.sharedInstance.handle(url)
  if handled {
    return true
  }

  // Handle other custom URL types.

  // If not handled by this app, return false.
  return false
}

উদ্দেশ্য-সি

- (BOOL)application:(UIApplication *)app
            openURL:(NSURL *)url
            options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options {
  BOOL handled;

  handled = [GIDSignIn.sharedInstance handleURL:url];
  if (handled) {
    return YES;
  }

  // Handle other custom URL types.

  // If not handled by this app, return NO.
  return NO;
}

ম্যাকওএস: এনএসঅ্যাপ্লিকেশনডেলিগেট

  1. আপনার অ্যাপের AppDelegate-এর applicationDidFinishLaunchingkAEGetURL ইভেন্টগুলির জন্য একটি হ্যান্ডলার রেজিস্টার করুন:

    সুইফট

    func applicationDidFinishLaunching(_ notification: Notification) {
      // Register for GetURL events.
      let appleEventManager = NSAppleEventManager.shared()
      appleEventManager.setEventHandler(
        self,
        andSelector: "handleGetURLEvent:replyEvent:",
        forEventClass: AEEventClass(kInternetEventClass),
        andEventID: AEEventID(kAEGetURL)
      )
    }
    

    উদ্দেশ্য-সি

    - (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
      // Register for GetURL events.
      NSAppleEventManager *appleEventManager = [NSAppleEventManager sharedAppleEventManager];
      [appleEventManager setEventHandler:self
                         andSelector:@selector(handleGetURLEvent:withReplyEvent:)
                         forEventClass:kInternetEventClass
                         andEventID:kAEGetURL];
    }
    
  2. এই ইভেন্টগুলির জন্য হ্যান্ডলারটি সংজ্ঞায়িত করুন যা GIDSignIn এর handleURL কল করে:

    সুইফট

    func handleGetURLEvent(event: NSAppleEventDescriptor?, replyEvent: NSAppleEventDescriptor?) {
        if let urlString =
          event?.paramDescriptor(forKeyword: AEKeyword(keyDirectObject))?.stringValue{
            let url = NSURL(string: urlString)
            GIDSignIn.sharedInstance.handle(url)
        }
    }
    

    উদ্দেশ্য-সি

    - (void)handleGetURLEvent:(NSAppleEventDescriptor *)event
               withReplyEvent:(NSAppleEventDescriptor *)replyEvent {
          NSString *URLString = [[event paramDescriptorForKeyword:keyDirectObject] stringValue];
          NSURL *URL = [NSURL URLWithString:URLString];
          [GIDSignIn.sharedInstance handleURL:url];
    }
    

SwiftUI

আপনার অ্যাপের উইন্ডো বা সিনে, URL গ্রহণ করতে এবং GIDSignIn এর handleURL কল করার জন্য একটি হ্যান্ডলার রেজিস্টার করুন।

সুইফট

@main
struct MyApp: App {

  var body: some Scene {
    WindowGroup {
      ContentView()
        // ...
        .onOpenURL { url in
          GIDSignIn.sharedInstance.handle(url)
        }
    }
  }
}

২. ব্যবহারকারীর সাইন-ইন অবস্থা পুনরুদ্ধার করার চেষ্টা।

আপনার অ্যাপ চালু হওয়ার সময়, যারা ইতিমধ্যেই গুগল ব্যবহার করে সাইন-ইন করেছেন, তাদের সাইন-ইন অবস্থা পুনরুদ্ধার করার জন্য restorePreviousSignInWithCallback কল করুন। এটি নিশ্চিত করে যে ব্যবহারকারীদের প্রতিবার আপনার অ্যাপ খোলার সময় সাইন ইন করতে হবে না (যদি না তারা সাইন আউট করে থাকেন)।

iOS অ্যাপগুলো প্রায়শই UIApplicationDelegate এর application:didFinishLaunchingWithOptions: মেথডে এবং macOS অ্যাপের ক্ষেত্রে NSApplicationDelegate এর applicationDidFinishLaunching: মেথডে এই কাজটি করে থাকে। ব্যবহারকারীকে কোন ভিউটি দেখানো হবে তা নির্ধারণ করতে ফলাফলটি ব্যবহার করুন। উদাহরণস্বরূপ:

সুইফট

func application(
  _ application: UIApplication,
  didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
) -> Bool {
  GIDSignIn.sharedInstance.restorePreviousSignIn { user, error in
    if error != nil || user == nil {
      // Show the app's signed-out state.
    } else {
      // Show the app's signed-in state.
    }
  }
  return true
}

উদ্দেশ্য-সি

- (BOOL)application:(UIApplication *)application
    didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
  [GIDSignIn.sharedInstance restorePreviousSignInWithCompletion:^(GIDGoogleUser * _Nullable user,
                                                                  NSError * _Nullable error) {
    if (error) {
      // Show the app's signed-out state.
    } else {
      // Show the app's signed-in state.
    }
  }];
  return YES;
}

SwiftUI

আপনি যদি SwiftUI ব্যবহার করেন, তাহলে আপনার প্রাথমিক ভিউয়ের জন্য onAppearrestorePreviousSignIn কলটি যোগ করুন:

সুইফট

@main
struct MyApp: App {
  var body: some Scene {
    WindowGroup {
      ContentView()
        // ...
        .onAppear {
          GIDSignIn.sharedInstance.restorePreviousSignIn { user, error in
            // Check if `user` exists; otherwise, do something with `error`
          }
        }
    }
  }
}

৩. একটি গুগল সাইন-ইন বাটন যোগ করুন

আপনার সাইন-ইন ভিউতে একটি "গুগল দিয়ে সাইন ইন করুন" বাটন যোগ করুন। SwiftUI এবং UIKit-এর জন্য এমন কম্পোনেন্ট রয়েছে যা গুগলের ব্র্যান্ডিং নির্দেশিকা মেনে স্বয়ংক্রিয়ভাবে একটি বাটন তৈরি করে।

SwiftUI ব্যবহার করে

  1. আপনার প্রজেক্টে SwiftUI "Sign in with Google" বাটনটির ডিপেন্ডেন্সি যোগ করা হয়েছে কিনা, তা নিশ্চিত করুন।

  2. যে ফাইলে আপনি SwiftUI বাটনটি যোগ করতে চান, সেই ফাইলের একদম উপরে প্রয়োজনীয় ইম্পোর্টটি যোগ করুন:

    import GoogleSignInSwift
    
  3. উপস্থাপনার জন্য সক্রিয় রুট ভিউ কন্ট্রোলারটি পেতে একটি UIApplication এক্সটেনশন যোগ করুন:

    extension UIApplication {
      // Minimal implementation to retrieve the active root view
      // controller for presentation. Apps presenting sign-in from deeper
      // within an existing view hierarchy should ensure they select the
      // appropriate view controller.
      var rootViewController: UIViewController? {
        let windowScene = connectedScenes
          .compactMap { scene in scene as? UIWindowScene }
          .first { scene in scene.activationState == .foregroundActive }
        return windowScene?.windows.first(where: { window in window.isKeyWindow })?.rootViewController
      }
    }
    
  4. আপনার ভিউতে একটি "গুগল দিয়ে সাইন ইন করুন" বাটন যোগ করুন এবং বাটনটি চাপলে যে অ্যাকশনটি কল করা হবে তা নির্দিষ্ট করুন:

    GoogleSignInButton(action: handleSignInButton)
    
  5. আপনার অ্যাকশনে GIDSignIn এর signIn(withPresenting:completion:) মেথডটি কল করে বাটনটি চাপলে সাইন ইন প্রক্রিয়াটি চালু করুন:

    func handleSignInButton() {
      guard let rootViewController = UIApplication.shared.rootViewController else {
        // Handle error
        return
      }
    
      GIDSignIn.sharedInstance.signIn(withPresenting: rootViewController) { signInResult, error in
        guard let result = signInResult else {
          // Inspect error
          return
        }
        // If sign in succeeded, display the app's main content view.
      }
    }
    

এটি ডিফল্ট ভিউ মডেল ব্যবহার করে, যা বাটনের জন্য সাধারণ স্টাইলিং তথ্য প্রদান করে। বাটনের চেহারা নিয়ন্ত্রণ করতে, আপনাকে একটি কাস্টম GoogleSignInButtonViewModel তৈরি করতে হবে এবং GoogleSignInButton(viewModel: yourViewModel, action: yourAction) ব্যবহার করে বাটনের ইনিশিয়ালাইজারে এটিকে viewModel হিসেবে সেট করতে হবে। আরও তথ্যের জন্য GoogleSignInButtonViewModel এর সোর্স কোড দেখুন।

UIKit ব্যবহার করে

  1. আপনার সাইন-ইন ভিউতে একটি "গুগল দিয়ে সাইন ইন করুন" বাটন যোগ করুন। আপনি GIDSignInButton ক্লাসটি ব্যবহার করে গুগল ব্র্যান্ডিং সহ একটি বাটন স্বয়ংক্রিয়ভাবে তৈরি করতে পারেন (এটিই প্রস্তাবিত) অথবা কাস্টম স্টাইলিং দিয়ে আপনার নিজস্ব বাটন তৈরি করতে পারেন।

    স্টোরিবোর্ড বা XIB ফাইলে একটি GIDSignInButton যোগ করতে, একটি View যোগ করুন এবং এর কাস্টম ক্লাসটি GIDSignInButton এ সেট করুন। মনে রাখবেন যে, আপনি যখন আপনার স্টোরিবোর্ডে একটি GIDSignInButton View যোগ করেন, তখন সাইন-ইন বাটনটি ইন্টারফেস বিল্ডারে রেন্ডার হয় না। সাইন-ইন বাটনটি দেখতে অ্যাপটি রান করুন।

    আপনি একটি GIDSignInButton এর colorScheme এবং style প্রোপার্টি সেট করার মাধ্যমে এর চেহারা কাস্টমাইজ করতে পারেন:

    GIDSignInButton স্টাইল প্রোপার্টিজ
    colorScheme kGIDSignInButtonColorSchemeLight
    kGIDSignInButtonColorSchemeDark
    style kGIDSignInButtonStyleStandard
    kGIDSignInButtonStyleWide
    kGIDSignInButtonStyleIconOnly
  2. আপনার ViewController-এর এমন একটি মেথডের সাথে বাটনটিকে সংযুক্ত করুন যা signIn: কল করে। উদাহরণস্বরূপ, একটি IBAction ব্যবহার করুন:

    সুইফট

    @IBAction func signIn(sender: Any) {
      GIDSignIn.sharedInstance.signIn(withPresenting: self) { signInResult, error in
        guard error == nil else { return }
    
        // If sign in succeeded, display the app's main content View.
      }
    }
    

    উদ্দেশ্য-সি

    - (IBAction)signIn:(id)sender {
      [GIDSignIn.sharedInstance
          signInWithPresentingViewController:self
                                  completion:^(GIDSignInResult * _Nullable signInResult,
                                               NSError * _Nullable error) {
        if (error) {
          return;
        }
    
        // If sign in succeeded, display the app's main content View.
      }];
    }
    

৪. একটি সাইন-আউট বাটন যোগ করুন

আপনার অ্যাপে একটি সাইন-আউট বাটন যোগ করুন, যা শুধুমাত্র সাইন-ইন করা ব্যবহারকারীরা দেখতে পাবেন এবং যেটি GIDSignIn এর signOut মেথডকে কল করবে।

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

SwiftUI ব্যবহার করে

SwiftUI-তে এমন একটি Button যোগ করুন যা GIDSignIn.sharedInstance.signOut() কল করে:

Button("Sign Out") {
  GIDSignIn.sharedInstance.signOut()
  // Calling signOut() may not automatically trigger UI updates.
  // Update your app's state as needed.
}

UIKit ব্যবহার করে

আপনার ViewController-এর এমন একটি মেথডের সাথে বাটনটিকে সংযুক্ত করুন যা signOut: কল করে। উদাহরণস্বরূপ, একটি IBAction ব্যবহার করুন:

সুইফট

@IBAction func signOut(sender: Any) {
  GIDSignIn.sharedInstance.signOut()
}

উদ্দেশ্য-সি

- (IBAction)signOut:(id)sender {
  [GIDSignIn.sharedInstance signOut];
}

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

এখন যেহেতু ব্যবহারকারীরা তাদের গুগল অ্যাকাউন্ট ব্যবহার করে আপনার অ্যাপে সাইন ইন করতে পারেন, জেনে নিন কীভাবে: