Поделиться в google с помощью GTLServicePlus с GIDAuthentication

Все работает до ..

Но теперь, когда я использую новое, используя GoogleSignIn.framework чтобы избежать отклонения от яблока.


введите описание изображения здесь


Как я могу преобразовать GIDAuthentication в GTMFetcherAuthorizationProtocol / GTMOAuth2Authentication чтобы иметь возможность использовать GPPNativeShareBuilder ?

Обновить

Извините за последнее обновление, я успешно создал GTMFetcherAuthorizationProtocol / GTMOAuth2Authentication

Используя что-то похожее на ответ ниже: @ Andr3a88, я попробовал его ответ, и он работает ..

Но все же я не могу использовать GPPNativeShareBuilder для совместного использования без аутентификации с помощью GPPSignIn , вот журнал ошибок:

 [xxx/0x111533310] [lvl=3] -[GPPNativeShareBuilderImpl open] User must be signed in to use the native sharebox. 

Альтернативное решение, которое мы сделали, это использование GPPSignIn и создание настраиваемого предупреждения, которое информирует пользователя о том, что:

«Он о том, чтобы оставить заявку», и просит подтвердить пользователей.

Но слишком плохо, что мы не можем отправить приложение в ближайшее время, мы решили продолжить разработку, а затем вернемся к этому, если наше решение не будет работать, а худший вариант – удалить G + share …

Если у вас есть решение, позволяющее GPPNativeShareBuilder работать с GIDSignIn , ваша помощь будет очень оценена.

Обновление 2

Добавление пользовательского предупреждения, которое просит пользователей подтвердить, что он собирается покинуть приложение, выполнил работу и одобрил apple. Ура! 🙂

Попробуйте таким образом:

Добавьте в AppDelegate (или где хотите) следующее свойство

 @property (nonatomic,strong) GTMOAuth2Authentication *authGooglePlus; 

Затем внутри didSignInForUser вызывает setAuthorizerForSignIn , этот метод используется для создания объекта GTMOAuth2Authentication, который затем будет использоваться для вызовов G + api

 - (void)signIn:(GIDSignIn *)signIn didSignInForUser:(GIDGoogleUser *)user withError:(NSError *)error { if (error) NSLog(@"Status: G+ Authentication error: %@", error); [self setAuthorizerForSignIn:signIn user:user]; } //Add this method used to create GTMOAuth2Authentication - (void)setAuthorizerForSignIn:(GIDSignIn *)signIn user:(GIDGoogleUser *)user { //Create GTMOAuth2Authentication GTMOAuth2Authentication *auth = [[GTMOAuth2Authentication alloc] init]; [auth setClientID:signIn.clientID]; [auth setClientSecret:[[NSBundle mainBundle] objectForInfoDictionaryKey:@"GoogleClientSecret"]]; [auth setUserEmail:user.profile.email]; [auth setUserID:user.userID]; [auth setAccessToken:user.authentication.accessToken]; [auth setRefreshToken:user.authentication.refreshToken]; [auth setExpirationDate: user.authentication.accessTokenExpirationDate]; //Get app delegate and set GTMOAuth2Authentication AppDelegate *appDelegate = (AppDelegate*)[[UIApplication sharedApplication] delegate]; appDelegate.authGooglePlus = auth; } 

Теперь, когда вы делаете вызов G + api, задает объект GTMOAuth2Authentication, созданный во время входа в систему

  //Get GTMOAuth2Authentication AppDelegate *appDelegate = (AppDelegate*)[[UIApplication sharedApplication] delegate]; GTMOAuth2Authentication * authGooglePlus = appDelegate.authGooglePlus; GTLServicePlus* plusService = [[GTLServicePlus alloc] init]; plusService.fetcherService.timeout = 30.0; [plusService authGooglePlus]; GTLQueryPlus *query = [GTLQueryPlus queryForPeopleGetWithUserId:@"me"]; [plusService executeQuery:query completionHandler:^(GTLServiceTicket *ticket, id object, NSError *error) { if (error) { if(error.code == -1001) { //Timeout error } } else { //Do something with your user } }]; 

На самом деле довольно удобно использовать Google + API с подпиской Google.

Для GTLServicePlus setAuthorizer вам просто нужно использовать следующий способ получения допустимого параметра: [plusService setAuthorizer: [GIDSignIn sharedInstance] .currentUser.authentication.fetcherAuthorizer];

После некоторого поиска я обнаружил, что мы можем использовать Rest API для получения друзей google + вместе с GIDSignIn … Просто вам нужно указать области с помощью GIDSignIn, как показано ниже:

 GIDSignIn *signin = [GIDSignIn sharedInstance]; signin.shouldFetchBasicProfile = true; signin.scopes = @[@"https://www.googleapis.com/auth/plus.login",@"https://www.googleapis.com/auth/plus.me"]; signin.delegate = self; signin.uiDelegate = self; [signin signIn]; 

Чтобы получить список друзей, вам необходимо отправить запрос GET на https://www.googleapis.com/plus/v1/people/me/people/collection или https://www.googleapis.com/plus/v1/people/userId/people/collection вместе с токеном доступа google signIn.

проверьте это Справочное руководство google + API и

также проверьте ссылку на учебник от appcoda

Если вы хотите поделиться,

 - (void)showGooglePlusShare:(NSURL*)shareURL { // Construct the Google+ share URL NSURLComponents* urlComponents = [[NSURLComponents alloc] initWithString:@"https://plus.google.com/share"]; urlComponents.queryItems = @[[[NSURLQueryItem alloc] initWithName:@"url" value:[shareURL absoluteString]]]; NSURL* url = [urlComponents URL]; if ([SFSafariViewController class]) { // Open the URL in SFSafariViewController (iOS 9+) SFSafariViewController* controller = [[SFSafariViewController alloc] initWithURL:url]; controller.delegate = self; [self presentViewController:controller animated:YES completion:nil]; } else { // Open the URL in the device's browser [[UIApplication sharedApplication] openURL:url]; } } 

Ссылка: https://developers.google.com/+/mobile/ios/share/basic-share