توفّر بعض خدمات 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 دائمًا رموز دخول غير منتهية الصلاحية، عليك تضمين الطلبات في حظر 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 API.