* 目次 [#g8b12124]
#contents
* お断り [#bf685724]
この記事はflutter初心者のメモなので、信頼性はないです。ないというか、
わかってません。すみません。調べ中のメモです。flutter本家のリンクの劣化版ぐらいの価値はあります。
* とりあえずのゴール [#kd09bea0]
flutterでgoogle認証させてopenid取得したい
そのためにはgoogle cloudeでoauthのスコープの設定や、ドメインの設定が必要だ。
ドメインの設定には、ローカルでやるにはngrokを使って確認ができそうだ。
firebaseにデプロイしても仮ドメインがもらえる。
というところまではわかった気がする。
そのためにはもしやサーバとして起動させなくてはならないのではないか?
という疑問に当たった。
* 本家のドキュメント [#ad8b7074]
https://docs.flutter.dev/?_gl=1*qxmvbk*_up*MQ..*_ga*MTc0NjIzOTI1OC4xNzIyODc4NDc0*_ga_04YGWK0175*MTcyMjg3ODQ3NC4xLjAuMTcyMjg3ODQ3NC4wLjAuMA..
** はじめてのflutterアプリ [#c0fc4c00]
入門書だな
コードラボというのが始まって85分間見積られている感じのサイトだった
https://codelabs.developers.google.com/codelabs/flutter-codelab-first?hl=ja#0
** 細分化された資料のインデックス [#s4ddde9d]
https://docs.flutter.dev/get-started/learn-more
** ウェブ開発者のためのFlutter [#xb443fda]
https://docs.flutter.dev/get-started/flutter-for/web-devs
** サンプル [#c317dfc5]
地図とfirebaseのサンプルだと!?
https://flutter.github.io/samples/flutter_maps_firestore.html
場所のメモ
https://flutter.github.io/samples/place_tracker.html
** クックブック [#d5670d64]
逆引き集に近い感じだな
https://docs.flutter.dev/cookbook
** ソリューション [#qec893af]
いくつもあるが、抜粋だな
*** AI [#l344b57d]
https://docs.flutter.dev/cookbook
*** firebaseとfirestore [#p3ad76ce]
https://docs.flutter.dev/data-and-backend/firebase
*** アプリに地図を追加する [#sff163d4]
https://developers.google.com/maps/flutter-package/overview?hl=ja
https://codelabs.developers.google.com/codelabs/google-maps-in-flutter?hl=ja#3
* ngrok [#d2386ab6]
インストールは簡単だった。
無料でもそこそこ使える。グローバルIP + 仮ドメインサービスみたいなものという認識をしたよ。
** 起動 [#k587c154]
払いだされたアドレスをngrokのサイトで確認しに行き
ローカルで起動すると、ローカルのポートが外部公開される感じです。
* 参考になるかもしれない記事 [#l4519bce]
** フェデレーション ID とソーシャル ログイン [#i3c63037]
https://firebase.google.com/docs/auth/flutter/federated-auth?hl=ja#ios+-and-android
googleとfirebaseのサンプルコードがありました。
*** dart [#uea4e684]
以下をpubspec.yamlに入れておく必要があります。
google_sign_in
https://pub.dev/packages/google_sign_in
いや、いろいろめんどくさい設定あったはずやろ。説明が淡泊な感じ。
*** コード [#o7e7d8cc]
import 'package:google_sign_in/google_sign_in.dart';
Future<UserCredential> signInWithGoogle() async {
// Trigger the authentication flow
final GoogleSignInAccount? googleUser = await GoogleSignIn().signIn();
// Obtain the auth details from the request
final GoogleSignInAuthentication? googleAuth = await googleUser?.authentication;
// Create a new credential
final credential = GoogleAuthProvider.credential(
accessToken: googleAuth?.accessToken,
idToken: googleAuth?.idToken,
);
// Once signed in, return the UserCredential
return await FirebaseAuth.instance.signInWithCredential(credential);
}
*** webの場合 [#r1cf8751]
ウェブの場合、Firebase SDK は、Firebase プロジェクトを使用して認証フローを自動的に処理できます。次に例を示します。
Google 認証プロバイダを作成し、ユーザーから取得する追加の権限スコープを指定します。
GoogleAuthProvider googleProvider = GoogleAuthProvider();
googleProvider.addScope('https://www.googleapis.com/auth/contacts.readonly');
googleProvider.setCustomParameters({
'login_hint': 'user@example.com'
});
認証情報を signInWithPopup メソッドに渡します。これにより、ユーザーにプロジェクトへのログインを求める新しいウィンドウが表示されます。また、signInWithRedirect を使用して同じウィンドウ内で認証プロセスを行うこともできます。
Future<UserCredential> signInWithGoogle() async {
// Create a new provider
GoogleAuthProvider googleProvider = GoogleAuthProvider();
googleProvider.addScope('https://www.googleapis.com/auth/contacts.readonly');
googleProvider.setCustomParameters({
'login_hint': 'user@example.com'
});
// Once signed in, return the UserCredential
return await FirebaseAuth.instance.signInWithPopup(googleProvider);
// Or use signInWithRedirect
// return await FirebaseAuth.instance.signInWithRedirect(googleProvider);
}