Seamless push notification activation

This commit is contained in:
LittleSheep 2024-06-07 19:49:14 +08:00
parent 3fad6e6b51
commit 879bd4e4db
4 changed files with 17 additions and 32 deletions

View File

@ -2,6 +2,7 @@ import 'package:firebase_core/firebase_core.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
import 'package:sentry_flutter/sentry_flutter.dart'; import 'package:sentry_flutter/sentry_flutter.dart';
import 'package:solian/exts.dart';
import 'package:solian/firebase_options.dart'; import 'package:solian/firebase_options.dart';
import 'package:solian/providers/account.dart'; import 'package:solian/providers/account.dart';
import 'package:solian/providers/auth.dart'; import 'package:solian/providers/auth.dart';
@ -66,6 +67,13 @@ class SolianApp extends StatelessWidget {
if (value) { if (value) {
Get.find<AccountProvider>().connect(); Get.find<AccountProvider>().connect();
Get.find<ChatProvider>().connect(); Get.find<ChatProvider>().connect();
try {
Get.find<AccountProvider>().registerPushNotifications();
} catch (err) {
context.showSnackbar('pushNotifyRegisterFailed'
.trParams({'reason': err.toString()}));
}
} }
}); });
}, },

View File

@ -6,7 +6,6 @@ import 'package:solian/router.dart';
import 'package:solian/screens/auth/signin.dart'; import 'package:solian/screens/auth/signin.dart';
import 'package:solian/screens/auth/signup.dart'; import 'package:solian/screens/auth/signup.dart';
import 'package:solian/widgets/account/account_heading.dart'; import 'package:solian/widgets/account/account_heading.dart';
import 'package:solian/widgets/account/push_notify_register_dialog.dart';
class AccountScreen extends StatefulWidget { class AccountScreen extends StatefulWidget {
const AccountScreen({super.key}); const AccountScreen({super.key});
@ -102,31 +101,6 @@ class _AccountScreenState extends State<AccountScreen> {
setState(() {}); setState(() {});
}, },
), ),
const Divider(thickness: 0.3, height: 0.3)
.paddingSymmetric(vertical: 16),
Wrap(
spacing: 4,
children: [
InkWell(
child: Text(
'pushNotifyRegisterAction'.tr,
style: TextStyle(
color: Theme.of(context)
.colorScheme
.onSurface
.withOpacity(0.85),
),
),
onTap: () {
showDialog(
context: context,
builder: (context) =>
const PushNotifyRegisterDialog(),
);
},
)
],
)
], ],
); );
}, },

View File

@ -193,11 +193,13 @@ class SolianMessages extends Translations {
'badgeSolsynthStaff': 'Solsynth Staff', 'badgeSolsynthStaff': 'Solsynth Staff',
'badgeSolarOriginalCitizen': 'Solar Network Natives', 'badgeSolarOriginalCitizen': 'Solar Network Natives',
'badgeGreatCommunityContributor': 'Great Community Contributor', 'badgeGreatCommunityContributor': 'Great Community Contributor',
'pushNotifyRegisterAction': 'Enable Push Notifications',
'pushNotifyRegister': 'Register Push Notification Device', 'pushNotifyRegister': 'Register Push Notification Device',
'pushNotifyRegisterCaption': 'pushNotifyRegisterCaption':
'Activating push notifications allows you to get our latest notifications even when the app is completely closed. We use Apple\'s official push service on iOS/macOS devices; other devices provide push notifications through Google Firebase. To register a device for push notifications, you may need to connect to Google\'s servers and install the Google Framework on your device.', 'Activating push notifications allows you to get our latest notifications even when the app is completely closed. We use Apple\'s official push service on iOS/macOS devices; other devices provide push notifications through Google Firebase. To register a device for push notifications, you may need to connect to Google\'s servers and install the Google Framework on your device. Although you dismiss this dialog, this registration will be auto performed when you next time launch the app.',
'pushNotifyRegisterDone': 'Push Notifications has been activated.', 'pushNotifyRegisterDone': 'Push notifications has been activated.',
'pushNotifyRegisterFailed':
'Unable to active push notification... @reason',
'about': 'About',
}, },
'zh_CN': { 'zh_CN': {
'hide': '隐藏', 'hide': '隐藏',
@ -377,11 +379,12 @@ class SolianMessages extends Translations {
'badgeSolsynthStaff': 'Solsynth 工作人员', 'badgeSolsynthStaff': 'Solsynth 工作人员',
'badgeSolarOriginalCitizen': 'Solar Network 原住民', 'badgeSolarOriginalCitizen': 'Solar Network 原住民',
'badgeGreatCommunityContributor': '优秀社区贡献者', 'badgeGreatCommunityContributor': '优秀社区贡献者',
'pushNotifyRegisterAction': '激活推送通知',
'pushNotifyRegister': '注册推送通知设备', 'pushNotifyRegister': '注册推送通知设备',
'pushNotifyRegisterCaption': 'pushNotifyRegisterCaption':
'激活推送通知便可以让你在应用程序完全关闭的时候仍然获取到我们最新的通知。在 iOS/macOS 设备上我们使用 Apple 官方的推送服务;其他设备则通过 Google Firebase 提供推送通知。要注册推送通知设备,您可能需要连接到 Google 的服务器(在中国大陆不可用)并在您的设备上安装 Google Framework。', '激活推送通知便可以让你在应用程序完全关闭的时候仍然获取到我们最新的通知。在 iOS/macOS 设备上我们使用 Apple 官方的推送服务;其他设备则通过 Google Firebase 提供推送通知。要注册推送通知设备,您可能需要连接到 Google 的服务器(在中国大陆不可用)并在您的设备上安装 Google Framework。即使您关闭此对话框,下次启动应用程序时仍会自动执行此注册。',
'pushNotifyRegisterDone': '推送通知已成功激活', 'pushNotifyRegisterDone': '推送通知已成功激活',
'pushNotifyRegisterFailed': '推送通知激活失败…… @reason',
'about': '关于',
} }
}; };
} }

View File

@ -166,7 +166,7 @@ class _ChatMessageInputState extends State<ChatMessageInput> {
child: Column( child: Column(
mainAxisAlignment: MainAxisAlignment.center, mainAxisAlignment: MainAxisAlignment.center,
children: [ children: [
const Divider(thickness: 0.3, height: 0.3), const Divider(thickness: 0.3, height: 1),
if (_replyTo != null) if (_replyTo != null)
MaterialBanner( MaterialBanner(
leading: const FaIcon(FontAwesomeIcons.reply, size: 18), leading: const FaIcon(FontAwesomeIcons.reply, size: 18),