iOS অ্যাপে Google API অ্যাক্সেস করা

Drive, Gmail এবং আরও অনেক কিছুর মতো কিছু Google পরিষেবা, পাবলিক API প্রদান করে যা আপনি এমন অ্যাপ তৈরি করতে ব্যবহার করতে পারেন যা ব্যবহারকারীদের এই পরিষেবাগুলিতে তাদের ডেটা নিয়ে কাজ করতে সাহায্য করে। এইসব পরিষেবা অ্যাক্সেস করতে, ব্যবহারকারীদের থেকে সম্মতি পেতে এবং অ্যাক্সেস টোকেন পেতে, অ্যাপকে অবশ্যই OAuth 2.0 ক্লায়েন্ট ফ্লোর মধ্যে কোনও একটি প্রয়োগ করতে হবে, যা API-তে অ্যাক্সেস প্রদান করে।

আপনি Google Sign-In লাইব্রেরি ব্যবহার করতে পারেন, যা আপনার জন্য OAuth 2.0 ফ্লো প্রয়োগ করে, সাইন-ইন করা ব্যবহারকারীর জন্য অ্যাক্সেস টোকেন পেতে।

পূর্বশর্ত

আপনার iOS অ্যাপ Google APIs কল করার আগে, সেট-আপের নিম্নলিখিত ধাপগুলি সম্পূর্ণ করুন:

১. আপনার প্রোজেক্টের জন্য API চালু করা

Google API কল করে এমন যেকোনও অ্যাপ্লিকেশনকে Google Cloud কনসোলে সেইসব API চালু করতে হবে।

আপনার প্রোজেক্টের জন্য API চালু করতে:

  1. Google Cloud কনসোলে API লাইব্রেরি খুলুন।
  2. প্রম্পট করা হলে, কোনও প্রোজেক্ট বেছে নিন বা নতুন একটি তৈরি করুন।
  3. আপনি যে API চালু করতে চান সেটি বেছে নিন, তারপর চালু করুন বিকল্পে ক্লিক করুন।

২. অনুমোদনের ক্রেডেনশিয়াল তৈরি করুন

Google API অ্যাক্সেস করার জন্য OAuth 2.0 ব্যবহার করে এমন যেকোনও iOS অ্যাপ্লিকেশনের কাছে অবশ্যই অনুমোদনের ক্রেডেনশিয়াল থাকতে হবে যা Google অনুমোদন সার্ভারে অ্যাপ্লিকেশনটি শনাক্ত করে। আপনার প্রোজেক্টের জন্য কীভাবে ক্রেডেনশিয়াল তৈরি করবেন তা নিম্নলিখিত ধাপগুলি থেকে জানতে পারবেন:

  1. Google Cloud Console-এর ক্রেডেনশিয়াল পৃষ্ঠায় যান।
  2. ক্লায়েন্ট তৈরি করুন (বা ক্রেডেনশিয়াল তৈরি করুন > OAuth ক্লায়েন্ট আইডি) বিকল্পে ক্লিক করুন।
  3. iOS অ্যাপ্লিকেশনের ধরন বেছে নিন।
  4. OAuth ক্লায়েন্টের জন্য একটি নাম লিখুন। এই নাম আপনার প্রোজেক্টের ক্রেডেনশিয়াল পৃষ্ঠায় ক্লায়েন্টকে শনাক্ত করে।
  5. আপনার অ্যাপের বান্ডিল শনাক্তকারী লিখুন। বান্ডিল আইডি হল আপনার অ্যাপের Info.plist-এ CFBundleIdentifier কী-এর ভ্যালু। এই ভ্যালু সাধারণত Xcode প্রোজেক্ট এডিটরের সাধারণ প্যানে বা স্বাক্ষর ও ক্ষমতা প্যানে অথবা Apple App Store Connect-এর অ্যাপ তথ্য পৃষ্ঠায় দেখানো হয়। আপনি সঠিক বান্ডিল আইডি ব্যবহার করছেন কিনা তা কনফার্ম করুন, কারণ আপনি App Check ব্যবহার করলে এটি পরিবর্তন করা যাবে না।
  6. (ঐচ্ছিক) অ্যাপটি Apple App Store-এ প্রকাশিত হলে, আপনার অ্যাপের App Store আইডি লিখুন। স্টোর আইডি হল একটি সংখ্যাসূচক স্ট্রিং যা প্রতিটি Apple App Store URL-এ অন্তর্ভুক্ত থাকে।
  7. (ঐচ্ছিক) আপনার টিম আইডি লিখুন। Apple Developer অ্যাকাউন্ট ডকুমেন্টেশনে আপনার টিম আইডি খুঁজুন দেখুন। আপনার ক্লায়েন্টের জন্য App Check চালু করলে টিম আইডি দিতে হবে।
  8. (ঐচ্ছিক) আপনার iOS অ্যাপের জন্য App Check চালু করুন। আপনি App Check চালু করলে, Apple-এর App Attest পরিষেবা ব্যবহার করে যাচাই করা হয় যে আপনার OAuth ক্লায়েন্ট থেকে উত্পন্ন হওয়া OAuth 2.0 অনুরোধগুলি আসল এবং আপনার অ্যাপ থেকে এসেছে, যা অ্যাপ ছদ্মবেশের ঝুঁকি কমাতে সাহায্য করে।
  9. তৈরি করুন বিকল্পে ক্লিক করুন।

আপনার ক্লায়েন্ট আইডি তৈরি করে Google Cloud কনসোলে দেখানো হয়। অনুমোদন রিডাইরেক্ট ম্যানেজ করতে, আপনার অ্যাপের Info.plist-এ রিভার্স করা ক্লায়েন্ট আইডি URL স্কিম (যেমন, com.googleusercontent.apps.1234567890-abcdef) যোগ করুন।

৩. Google Sign-In-এর বেসিক ইন্টিগ্রেশন সম্পূর্ণ করুন

ইনক্রিমেন্টাল স্কোপের অনুরোধ করা এবং Google API কল করার আগে প্রাথমিক Google সাইন-ইন ইন্টিগ্রেশন সম্পূর্ণ করুন।

১. কোন কোন স্কোপের অনুমতি দেওয়া হয়েছে তা চেক করুন

Google API-তে কল করার আগে, GIDGoogleUser-এর grantedScopes প্রপার্টি ব্যবহার করে, আপনার অ্যাপকে আগে থেকেই কোন কোন স্কোপের অনুমতি দেওয়া হয়েছে তা চেক করুন:

Swift

let driveScope = "https://www.googleapis.com/auth/drive.readonly"
let grantedScopes = user.grantedScopes
if grantedScopes == nil || !grantedScopes!.contains(driveScope) {
  // Request additional Drive scope.
}

Objective-C

NSString *driveScope = @"https://www.googleapis.com/auth/drive.readonly";

// Check if the user has granted the Drive scope
if (![user.grantedScopes containsObject:driveScope]) {
  // request additional drive scope
}

ব্যবহারকারী কোনও নির্দিষ্ট স্কোপের অনুমতি দিয়েছেন কিনা তার উপর ভিত্তি করে, নির্দিষ্ট কোনও ইন্টার‍্যাকশন সমর্থন করার জন্য আপনাকে অতিরিক্ত স্কোপের অনুরোধ করতে হতে পারে।

২. অতিরিক্ত স্কোপের জন্য অনুরোধ করা

আপনাকে অতিরিক্ত স্কোপের জন্য অনুরোধ করতে হলে, addScopes:presentingViewController:completion বা addScopes:presentingWindow:completion-এ কল করে ব্যবহারকারীকে আপনার অ্যাপে অতিরিক্ত অ্যাক্সেস দিতে বলুন।

যেমন, কোনও ব্যবহারকারীর Drive ফাইলের জন্য শুধু পড়ার অ্যাক্সেসের অনুরোধ করতে:

Swift

let additionalScopes = ["https://www.googleapis.com/auth/drive.readonly"]
guard let currentUser = GIDSignIn.sharedInstance.currentUser else {
    return ;  /* Not signed in. */
}

currentUser.addScopes(additionalScopes, presenting: self) { signInResult, error in
    guard error == nil else { return }
    guard let signInResult = signInResult else { return }

    // Check if the user granted access to the scopes you requested.
}

Objective-C

NSArray *additionalScopes = @[ @"https://www.googleapis.com/auth/drive.readonly" ];
GIDGoogleUser *currentUser = GIDSignIn.sharedInstance.currentUser;

[currentUser addScopes:additionalScopes
           presentingViewController:self
                         completion:^(GIDSignInResult * _Nullable signInResult,
                                      NSError * _Nullable error) {
    if (error) { return; }
    if (signInResult == nil) { return; }

    // Check if the user granted access to the scopes you requested.
}];

৩. নতুন টোকেন দিয়ে API কল করুন

আপনার Google API কলে যাতে সবসময় মেয়াদ শেষ না হওয়া অ্যাক্সেস টোকেন অ্যাটাচ করা থাকে তা নিশ্চিত করতে, কলগুলিকে refreshTokensIfNeededWithCompletion: ব্লকে র‍্যাপ করুন:

Swift

currentUser.refreshTokensIfNeeded { user, error in
    guard error == nil else { return }
    guard let user = user else { return }

    // Get the access token to attach it to a REST or gRPC request.
    let accessToken = user.accessToken.tokenString

    // Or, get an object that conforms to GTMFetcherAuthorizationProtocol for
    // use with GTMAppAuth and the Google APIs client library.
    let authorizer = user.fetcherAuthorizer()
}

Objective-C

[currentUser refreshTokensIfNeededWithCompletion:^(
                              GIDGoogleUser * _Nullable user,
                              NSError * _Nullable error) {
    if (error) { return; }
    if (user == nil) { return; }

    // Get the access token to attach it to a REST or gRPC request.
    NSString *accessToken = user.accessToken.tokenString;

    // Or, get an object that conforms to GTMFetcherAuthorizationProtocol for
    // use with GTMAppAuth and the Google APIs client library.
    id<GTMFetcherAuthorizationProtocol> authorizer = [user fetcherAuthorizer];
}];

API কল করার জন্য অ্যাক্সেস টোকেন ব্যবহার করুন, REST বা gRPC অনুরোধের (Authorization: Bearer ACCESS_TOKEN) হেডারে অ্যাক্সেস টোকেন অন্তর্ভুক্ত করে অথবা Google APIs ক্লায়েন্ট লাইব্রেরি-এর সাথে ফেচার অথরাইজার ব্যবহার করে।