2015-11-25 4 views
2

Я пытаюсь внедрить новую библиотеку SignIn, которую я установил с помощью Cocoapods. Цель развертывания - 8.4 и тестирование Im в устройстве 9.0.2.Google SignIn SFSafariViewController/WebView перенаправляет на Google.com после принятия разрешений

1- У меня есть соответствующий файл Plist с ClientId и reverseID

2- У меня есть типы URL установить

3- я имею AppDelegate в качестве делегата GIDSignIn [GIDSignIn sharedInstance].delegate = self; и соответствующих методов делегата, реализованных поймать Обратный вызов - (void)signIn:(GIDSignIn *)signIn didSignInForUser:(GIDGoogleUser *)user withError:(NSError *)error

4- у меня есть - (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation { return [[GIDSignIn sharedInstance] handleURL:url sourceApplication:sourceApplication annotation:annotation]; }

5- Im, используя автоматический класс GIDSignInButton и помещается в подклассе UIVi ewController, поэтому мне не нужно внедрять методы GIDSignIn uiDelegate. Но у меня все еще есть [[GIDSignIn sharedInstance] setUiDelegate:self];, установленный в viewDidLoad

6- У меня есть SFSafariViewController.framework в связанных библиотеках.

7- Я никогда не вручную устанавливал идентификатор клиента в GIDSignIn, поскольку это не является частью инструкций в официальной документации Google. Хотя многие люди продолжают это делать, я не знаю, почему.

Проблема: как только я нажму кнопку «Login», появится презентация SFSafariViewController, я выбираю учетную запись, которую я хочу использовать (заметьте, что она никогда не выходила из моего приложения ни в какие другие приложения Google для аутентификации, хотя у меня несколько установленных) , Представления разрешений представлены, я вижу логотип & моего приложения, настроенный в консоли разработчика Google, я принимаю разрешения. SFSafariViewController возвращается к «www.google.com», и это он. Единственный способ отклонить этот экран - нажать кнопку «ОК» в верхнем правом углу, а затем вызывается - (void)signIn:(GIDSignIn *)signIn didSignInForUser:(GIDGoogleUser *)user withError:(NSError *)error с ошибкой, говорящей, что используется «Отменено процесс входа».

+0

У меня такая же проблема, любая удача с этим? – douglasd3

ответ

2

Просто решите проблему. Как вы используете CocoaPods, кажется, вы должны установить

Swift:

func application(application: UIApplication, openURL url: NSURL, sourceApplication: String?, annotation: AnyObject) -> Bool { 
    return GIDSignIn.sharedInstance().handleURL(url, sourceApplication: sourceApplication, annotation: annotation) 
} 

Obj-C

- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation { 
    return [[GIDSignIn sharedInstance] handleURL:url sourceApplication:sourceApplication annotation:annotation]; 
} 

в вашем AppDelegate. Теперь вы будете перенаправлены в приложение после принятия разрешений.

Подробнее: https://developers.google.com/identity/sign-in/ios/sign-in

+0

Как я упоминал выше ... в моей точке номер 4.У меня есть этот метод, реализованный в Appdelegate :( – omarojo

+0

Иисус! Я пропустил это, извините! – douglasd3

+3

И я не думаю, что это связано с Cocoapods. – omarojo

1

я узнал проблему. Google Официальная документация упоминает о необходимости осуществления следующий метод в AppDelegate

- (BOOL)application:(UIApplication *)application 
       openURL:(NSURL *)url 
    sourceApplication:(NSString *)sourceApplication 
      annotation:(id)annotation { 
    return [[GIDSignIn sharedInstance] handleURL:url 
          sourceApplication:sourceApplication 
            annotation:annotation]; 
} 

Но он никогда не упоминает о необходимости осуществления также подобный метод, называемый

- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<NSString*, id> *)options 

я должен был реализовать оба метода для того, чтобы мое приложение работает правильно. У меня тоже есть аутентификация facebook, поэтому мои методы оказались похожими на следующие.

- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<NSString*, id> *)options { 
    return [[FBSDKApplicationDelegate sharedInstance] application:app 
                  openURL:url 
               sourceApplication:options[UIApplicationOpenURLOptionsSourceApplicationKey] 
                 annotation:options[UIApplicationOpenURLOptionsAnnotationKey]] 
      || [[GIDSignIn sharedInstance] handleURL:url 
            sourceApplication:options[UIApplicationOpenURLOptionsSourceApplicationKey] 
              annotation:options[UIApplicationOpenURLOptionsSourceApplicationKey]]; 
} 
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation 
{ 

     return [[FBSDKApplicationDelegate sharedInstance] application:application 
                  openURL:url 
               sourceApplication:sourceApplication 
                 annotation:annotation 
       ] || 
       [[GIDSignIn sharedInstance] handleURL:url 
              sourceApplication:sourceApplication 
               annotation:annotation]; 
    } 
+1

Я пробовал это без везения. Это все еще работает на вас? открытие для меня SFSafariViewController – pir800

Смежные вопросы