Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

【WIP】FCMトークンの登録 #180

Merged
merged 9 commits into from
Sep 8, 2023
Merged

【WIP】FCMトークンの登録 #180

merged 9 commits into from
Sep 8, 2023

Conversation

tsukamoto1783
Copy link
Collaborator

@tsukamoto1783 tsukamoto1783 commented Sep 4, 2023

Issue

close #49

説明

  • アプリ起動時にサインイン済みならfcmTokenを取得してfirestoreに登録する。
  • 未ログインの場合は、ログイン時にfcmTokenを取得してfirestoreに登録する。
    • 現状はとりあえずメールアドレスの登録だけに実装。
    • ソーシャルログインの方にも実装必要。
  • 開発ページにfcmToken情報を表示する仮ページを実装。

UI

その他

fcmToken確認用の開発ページは、あまりイケてるコードではないですが、確認用なのでいいかなと。(いい感じにしようとしてあまりうまくいかなかった。。)
→もし流石にもうちょっと綺麗にしたいとかあればおっしゃってください🙇

チェックリスト

  • PR の冒頭に関連する Issue 番号を記載しましたか?
  • 本 PR の変更に関して、エディタや IDE で意図しない警告は増えていませんか?(lint 警告やタイポなど)
  • Issue の完了の定義は満たせていますか?
  • 当該 Issue のスレッドで、レビュワーにレビュー依頼をしましたか?

@tsukamoto1783 tsukamoto1783 self-assigned this Sep 4, 2023
Comment on lines 84 to 100

/// [FcmTokenRepository] のインスタンス。
final _fcmTokenRepository = FcmTokenRepository();
final _token = await ref.read(getFcmTokenProvider).call();
final _userId = ref.read(userIdProvider);

final _deviceInfo = await getDeviceInfo();

if (_token == null || _userId == null) {
return;
}

await _fcmTokenRepository.setUserFcmToken(
userId: _userId,
token: _token,
deviceInfo: _deviceInfo,
);
Copy link
Collaborator Author

@tsukamoto1783 tsukamoto1783 Sep 4, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

こんな感じでやりたい事あってますでしょうか??

Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

内容はあっています!が、他の書き込み処理を参考にサービスクラスをつくってそこで set の処理を書いてみてください!!(UI は Repository に直接依存させない、Repository とやりとりするのはモデルであるべき)

Comment on lines 40 to 66
// TODO: パッケージ依存なのでcommonではない?
Future<String> getDeviceInfo() async {
final _deviceInfoPlugin = DeviceInfoPlugin();
late final String _os;
late final String _osVersion;
late final String _device;

if (Platform.isAndroid) {
final _androidInfo = await _deviceInfoPlugin.androidInfo;
_os = 'Android';
_osVersion = _androidInfo.version.release;
_device = _androidInfo.device;
} else if (Platform.isIOS) {
final _iosInfo = await _deviceInfoPlugin.iosInfo;
_os = 'iOS';
_osVersion = _iosInfo.systemVersion;
_device = _iosInfo.utsname.machine;
} else {
_os = '';
_osVersion = '';
_device = '';
}

final _deviceInfo = 'os: $_os, osVersion: $_osVersion, device: $_device';
return _deviceInfo;
}

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

こんな感じでやりたい事あってますでしょうか??

Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

あっていると思います!

else は考えなくていい気もするので throw UnimplementedError とかでも良いかもしれません!

また、late final みたいなことは特にせずに単にそれぞれの if 句 else if 句の中で return した方が読みやすいようにも感じます!

Comment on lines 6 to 19
/// 指定した [userId], [token]、[deviceInfo]をもとに ユーザーのFCMトークン情報を作成する。
Future<void> setUserFcmToken({
required String userId,
required String token,
required String deviceInfo,
}) =>
_query.set(
userFcmTokenId: token,
createUserFcmToken: CreateUserFcmToken(
userId: userId,
token: token,
deviceInfo: deviceInfo,
),
);
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

とても良いです!!

Comment on lines 84 to 90
/// 指定した [UserFcmToken] を取得する [FutureProvider].
final fcmTokenFutureProvider = FutureProvider.family
.autoDispose<ReadUserFcmToken?, String>((ref, userFcmTokenId) async {
return ref
.watch(fcmTokenRepositoryProvider)
.fetchUserFcmToken(userFcmTokenId: userFcmTokenId);
});
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

サンプル実装なので良いですが、他を参考に

  • View と Controller: fcm_token/ui/fcm_token.dart
  • Model: fcm_token/fcm_token.dart

に書くべきだと思います!

return;
}

await _fcmTokenRepository.setUserFcmToken(
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

(同上)ここにリポジトリのことを書かない

@kosukesaigusa kosukesaigusa merged commit 811bfdf into main Sep 8, 2023
5 checks passed
@kosukesaigusa kosukesaigusa deleted the feat/add_fcm_token branch September 8, 2023 06:15
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

FCM トークンの追加・確認をできるようにする
2 participants