تقدم بعض خدمات Google، مثل Drive وGmail وغير ذلك الكثير من واجهات برمجة التطبيقات العامة التي يمكنك استخدامها لإنشاء التطبيقات التي تساعد المستخدمين على التعامل مع بياناتهم في هذه الخدمات. للدخول إلى هذه الخدمات، يجب أن تنفذ التطبيقات أحد تدفقات عميل OAuth 2.0 للحصول على موافقة من المستخدمين والحصول على رموز دخول، مما يمنح إمكانية الوصول إلى واجهات برمجة التطبيقات.
يمكنك استخدام مكتبة "تسجيل الدخول بحساب Google"، التي تنفّذ تدفق OAuth 2.0 بالنيابة عنك، للحصول على رموز الدخول للمستخدم الذي سجّل الدخول.
قبل البدء
يجب عليك إكمال التكامل الأساسي لتسجيل الدخول إلى Google.
1- التحقق من النطاقات التي تم منحها
قبل إجراء استدعاء لواجهة برمجة تطبيقات Google، تحقَّق من النطاقات التي تم منحها
لتطبيقك من قبل، باستخدام السمة grantedScopes
في GIDGoogleUser
:
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
}
استنادًا إلى ما إذا كان المستخدم قد منحك نطاقًا معينًا أم لا، قد تحتاج إلى تقديم طلب لنطاق إضافي لدعم تفاعل معيّن.
2. طلب نطاقات إضافية
إذا كنت بحاجة إلى طلب نطاقات إضافية، يمكنك الاتصال
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.
}];
3- إجراء استدعاء لواجهة برمجة التطبيقات باستخدام رموز مميزة جديدة
للتأكّد من أنّ طلبات البيانات من 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];
}];
استخدِم رمز الدخول المميز لاستدعاء واجهة برمجة التطبيقات، إما من خلال تضمين رمز الدخول في عنوان طلب REST أو gRPC (Authorization: Bearer ACCESS_TOKEN
)، أو من خلال استخدام مفوِّض أداة الجلب مع مكتبة برامج Google APIs.