Google Identity Services
https://developers.google.com/identity/gsi/web
javascript
https://developers.google.com/identity/sign-in/web/reference
こちらは2023に停止になるそうです。
iOSでGoogleサインイン
Google API コンソールでプロジェクトを設定
https://console.cloud.google.com/apis/dashboard?hl=JA
Podfileに pod ‘GoogleSignIn’を追記
pod install 実行
Analyzing dependencies
Downloading dependencies
Installing AppAuth (1.4.0)
Installing GTMAppAuth (1.2.2)
Installing GTMSessionFetcher (1.7.0)
Installing GoogleSignIn (6.1.0)
Generating Pods project
Integrating client project
Pod installation complete! There are 10 dependencies from the Podfile and 18 total pods installed.
OAuth client IDを作成
Create an OAuth client IDボタンを押し
プロジェクトを選択(ここで新規作成も可能
credentials.plistをダウンロードして保存
google cloud consoleの認証情報に
こんな感じで OAuth client が生成されています。
OAuth clientをクリックすると詳細からplistもダウンロードできます。
OAuth 2.0 クライアントIDの Web client のクライアントIDを使用するのでメモしておけと
URL schemeを追加する
Project > Target > info > URL Type
URL SchemesにクライアントIDを逆にしたものを記載
( web clientのほうのクライアントID, アプリのみで利用する場合は、client idのほうで
順にやりましたが・・・アプリでサインインするだけであればクライアントのほうだけで大丈夫なようですねweb clientは利用しなくても
早速入れてみる
ログイン画面のビューに signInConfigを追加
let signInConfig = GIDConfiguration.init(clientID: "YOUR_IOS_CLIENT_ID")
func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool {
// Google URL Scheme check
var handled: Bool
handled = GIDSignIn.sharedInstance.handle(url)
if handled {
print("= GIDSignIn =")
print(url)
return true
}
これ認証アプリからの戻りですが、Googleアプリを入れていても呼ばれないので・・・???となったのですが
https://ichi.pro/google-sain-in-o-kanona-kagiri-fukaku-ios-197217330675407
Google+もないので今は呼ばれるアプリがないと?しかしなぜこれを入れるのかと・・・
func application(
_ application: UIApplication,
didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
) -> Bool {
GIDSignIn.sharedInstance.restorePreviousSignIn { user, error in
if error != nil || user == nil {
// Show the app's signed-out state.
} else {
// Show the app's signed-in state.
}
}
return true
}
これも起動時にgoogleログイン状態を必要としなければ要らないです
Googleでサインインボタンを追加
ここは必須ですね
ボタン追加
let googleSignInButton = GIDSignInButton()
googleSignInButton.addTarget(self, action: #selector(signInWithGoogle), for: .touchDown)
googleSignInButton.style = .wide
self.buttonStackView.addArrangedSubview(googleSignInButton)
スタックビューに入れてます。普通のビューでも同じです。
作りの問題かと思いますが、、、 .touchupinside が反応せず .touchDown を利用しています。
実行関数
@objc func signInWithGoogle() {
GIDSignIn.sharedInstance.signIn(with: googleSignInConfig, presenting: self) { user, error in
guard error == nil else {
// ここでエラー処理
return }
// If sign in succeeded, display the app's main content View.
if let userID = user?.userID, userID.length > 10 {
// ここで他の処理を実装
// user?.profile?.name
}
}
}
と言う感じで実装できました!
コメント