2016-04-14 4 views
5

多くの掘削の後、私はここに問題を投稿しています。私は私のアプリで最新のsdkのサインを使用しており、アプリはiOS 8+をサポートしています。私は現在Xcode 7.2を使用しています。私たちは、ユーザーがサインインまたは提供したアカウントのために登録することをサファリに取られていることに気づいたのAppStore FROMGoogle +ログインiOS Appstoreからgoogle sdk v3.xを使用しているアプリケーションの拒否


:最近、私のアプリは、多くのユーザが過去に経験している非常に一般的な理由で拒否されましたユーザーエクスペリエンスが悪い具体的には、中にGoogleのログは、サインインしてサファリにユーザーを取る。

次のステップは

10.6サインインやアプリでアカウントを登録するには、ユーザーを有効にするためにアプリを修正してください。

Safari View Controller APIを実装して、アプリ内にウェブコンテンツを表示することをおすすめします。 Safari View Controllerを使用すると、アプリ内の埋め込みブラウザからのURLの表示と証明書の検査が可能になり、顧客はWebページのURLとSSL証明書を検証して正当なページにログイン資格情報を入力していることを確認できます。
END

AppleはSafariブラウザに流れ、サインインを取っているアプリケーションの多くを拒否したとして、私はすでに、この拒絶反応を知っています。ここでは、リンクの一部は、参照
https://code.google.com/p/google-plus-platform/issues/detail?id=900
https://github.com/Torsten2217/google-plus-platform/issues/900

のためであり、あなたは簡単に2015年5月、Googleでインターネット

上で見つけることができますいくつかのより多くのリンクは、ネイティブのWebビューで新しいSDKをリリースしました。統合の完全なプロセスは、ここにhttp://www.appcoda.com/google-sign-in-how-to/と記載されています。
iOS 8で正常に動作していて、コントローラも提示していました。今、私はGoogleからの上記のリンクは、は、私が試したのiOSサンプル用のサインインをしてみていCocoaPods https://developers.google.com/identity/sign-in/ios/start
経由でインストールされた最新のGoogleのSDKを使用していた

。 iOS 9ではネイティブの SFSafariViewControllerしか開けませんでしたが、iOS 8ではログインフローが再びSafariブラウザの外に出ています。コメントアップルの口コミで

SafariViewControllerを使用するように求めたが、コントロールの利用可能性は、iOS 9 からのものであり、上.Hereがどのように私はiOSの8
で最新のGoogleのSDKを使用してこれを達成することができ、リンクhttps://developer.apple.com/library/ios/documentation/SafariServices/Reference/SFSafariViewController_Ref/
ですレビュー担当者は、テストしていたiOSのバージョンについては言及していません。

誰も私がこれを分類するのを助けることができます。どのように私はiOS 8、Googleのログインページのネイティブの現在のコントローラで管理することができます。

+1

[Google + iPhone APIにログインしてアプリを離れることなく共有]の可能な複製(http://stackoverflow.com/questions/15281386/google-iphone-api-sign-in-and-share-without-leaving-アプリ) – JAL

+0

@ JAL cmon man。それは2013年の投稿でした。物事は大きく変わりました。私の質問を読んで、SFSafariView –

+0

という単語を探してみてください。**あなたはリンクされた質問を読んでみませんか? 'SFSafariViewController'はiOS 9以上でのみ利用できます。 iOS 8以降の場合、あなたの答えはリンクされた質問にあります。 – JAL

答えて

10

最後に、問題は最新のGoogle+ Sign SDKでソートされ、アプリはAppleによって承認されています。 iOS 9iOS 8の両方の解決策を掲載しています。
CocoaPodsを使用して統合します。あなたはサインイン一部を追加で今here

の統合スタートで述べたと全く同じ手順を行う必要があり、ログインして起動するには

pod 'Google/SignIn' 

、私は中にいくつかのカスタムボタンが欲しいですUIViewControllerの私のカスタムクラスは、ログインプロセスを開始します。 Googleの開発者リンクでは、AppDelegateでのみリダイレクトされます。だから私のAppDelegateのクラスで私はGIDSignInDelegateを使用されることはありません、これを避けるために

私だけAppDelegate

//This is available for iOS 9 and above. So we have to use this method if we are integrating Google Sign In in iOS 9 
func application(app: UIApplication, openURL url: NSURL, options: [String : AnyObject]) 

//This is available prior iOS 9 and is available for iOS 8,7 etc. This is a deprecated method for iOS 9. You have to override this too if your app supports iOS 8 platform. 
func application(application: UIApplication, openURL url: NSURL, sourceApplication: String?, annotation: AnyObject) -> Bool 

次の2つの方法で変更を作ることになります

次のように定義は次のようになります。

func application(app: UIApplication, openURL url: NSURL, options: [String : AnyObject]) -> Bool { 

    if #available(iOS 9.0, *) { 
     return GIDSignIn.sharedInstance().handleURL(url, sourceApplication: options[UIApplicationOpenURLOptionsSourceApplicationKey] as? String, annotation: options[UIApplicationOpenURLOptionsAnnotationKey] as? String) 
    } else { 
     // Fallback on earlier versions 
    } 
    return true 
} 

func application(application: UIApplication, openURL url: NSURL, sourceApplication: String?, annotation: AnyObject) -> Bool { 

    return GIDSignIn.sharedInstance().handleURL(url,sourceApplication: sourceApplication,annotation: annotation) 
} 

カスタムUIViewControllerクラス、すなわちLoginViewControllerに移動して、GIDSignInDelegateGIDSignInUIDelegate

を実装してください定義今

func signIn(signIn: GIDSignIn!, dismissViewController viewController: UIViewController!) { 
    self.dismissViewControllerAnimated(true) {() -> Void in  
    } 
} 

func signIn(signIn: GIDSignIn!, presentViewController viewController: UIViewController!) { 
    self.presentViewController(viewController, animated: true) {() -> Void in 
    } 
} 

func signIn(signIn: GIDSignIn!, didSignInForUser user: GIDGoogleUser!, withError error: NSError!) { 
    if (error == nil) { 

     // Perform any operations on signed in user here. 
     let userId = user.userID     // For client-side use only! 
     let idToken = user.authentication.idToken // Safe to send to the server 
     let fullName = user.profile.name 
     let givenName = user.profile.givenName 
     let familyName = user.profile.familyName 
     let email = user.profile.email 
    } else { 
     print("\(error.localizedDescription)") 
    } 
} 

func signIn(signIn: GIDSignIn!, didDisconnectWithUser user: GIDGoogleUser!, withError error: NSError!) { 
     //Perform if user gets disconnected 
} 

でグーグル+ログインのためのデリゲートメソッドの実装は今これはで動作します

@IBAction func googleLoginButtonPressed(sender: AnyObject) { 

    // Initialize sign-in 
    var configureError: NSError? 
    GGLContext.sharedInstance().configureWithError(&configureError) 

    //assert(configureError == nil, "Error configuring Google services: \(configureError)") 
    if configureError != nil { 
    //Handle your error 
    }else { 
     GIDSignIn.sharedInstance().shouldFetchBasicProfile = true 
     GIDSignIn.sharedInstance().clientID = kClientId 
     GIDSignIn.sharedInstance().delegate = self 
     GIDSignIn.sharedInstance().uiDelegate = self 

     //This did the trick for iOS 8 and the controller is presented now in iOS 8 
     //We have to make allowsSignInWithBrowser false also. If we dont write this line and only write the 2nd line, then iOS 8 will not present a webview and again will take your flow outside the app in safari. So we have to write both the lines, Line 1 and Line 2 
     GIDSignIn.sharedInstance().allowsSignInWithBrowser = false //Line 1 
     GIDSignIn.sharedInstance().allowsSignInWithWebView = true //Line 2 

     GIDSignIn.sharedInstance().signIn() 
    } 

} 

あるグーグル+のログイン用のカスタムUIButtonがあり

class LoginViewController: UIViewController, GIDSignInDelegate, GIDSignInUIDelegate { 

} 

iOS 8と9の両方で、Google +のログイン目的でSafariの外部にアプリを移動する必要はありません。

+0

ありがとうございました!私は今それを試しています。しかし、私は興味があります、あなたはGoogleから、またはアプリ内のような何かを共有する機能を持っていますか? – tyegah123

+0

Googleのログインを使用することはできません。あなたはGoogleの共有を使用する必要があります –

+0

ナー、私はその共有機能を使用していません。それはちょうど私がGoogle Sign In SDKを使用していても、AppleはそれがGoogle+ SDKだと言っていて、それがアプリの拒否の理由の1つだったからです。だから私はあなたのアプリでsomekindaの共有を使用していたのだろうかと思っていた。しかし、とにかく、ありがとうございました。私は最終的に私のアプリでそれを働かせました。:D – tyegah123

関連する問題