static Future _configurePushNotifications() async {
final FlutterLocalNotificationsPlugin flutterLocalNotificationsPlugin =
Get.put<FlutterLocalNotificationsPlugin>(
FlutterLocalNotificationsPlugin());
await flutterLocalNotificationsPlugin
.resolvePlatformSpecificImplementation<
IOSFlutterLocalNotificationsPlugin>()
?.requestPermissions(
alert: true,
badge: true,
sound: true,
);
const AndroidInitializationSettings initializationSettingsAndroid =
AndroidInitializationSettings('ic_launcher');
final IOSInitializationSettings initializationSettingsIOS =
IOSInitializationSettings(
onDidReceiveLocalNotification: _onLocalNotificationRecived,
);
final InitializationSettings initializationSettings =
InitializationSettings(
android: initializationSettingsAndroid,
iOS: initializationSettingsIOS,
);
flutterLocalNotificationsPlugin.initialize(initializationSettings,
onSelectNotification: (payload) async {
final data = jsonDecode(payload);
if (data['type'] != 'record') return;
_onRecordNotificationPressed(int.parse(data['record_id']));
});
}
static Future _onLocalNotificationRecived(
int id, String title, String body, String payload) async {
print('id: ${id}');
print('title: ${title}');
print('body: ${body}');
print('payload: ${payload}');
}
static Future _configureFirebaseMessaging() async {
await Firebase.initializeApp();
final apnToken = await FirebaseMessaging.instance.getAPNSToken();
final token = await FirebaseMessaging.instance.getToken();
debugPrint('FCM Token: [$token]');
debugPrint('APN Token: [$apnToken]');
// * handle message recived via firebase
FirebaseMessaging.onMessage.listen(_onFirebaseMessageRecived);
FirebaseMessaging.onBackgroundMessage(_onFirebaseBackgroundMessageRecived);
FirebaseMessaging.onMessageOpenedApp
.where((event) =>
event.data['type'] == 'record')
.listen((message) =>
_onRecordNotificationPressed(int.parse(
message.data['record_id'])));
}
static Future _onFirebaseBackgroundMessageRecived(
RemoteMessage message) async {
print('Firebase Background Message Recived');
}
static Future _onFirebaseMessageRecived(RemoteMessage message) async {
print('Firebase Message Recived');
if (Platform.isIOS) return;
await Get.find<FlutterLocalNotificationsPlugin>().show(
0,
message.notification.title,
message.notification.body,
platformChannelSpecifics,
payload: jsonEncode(
message.data),
);
}
static Future _onRecordNotificationPressed(int recordId,
{bool first = true}) async {
final recordService = Get.find<IRecordService>();
final storage = Get.find<IApplicationStorage>();
try {
final record = await recordService.find(recordId);
if (storage.userInfo == null) {
await Get.offAllNamed(RoutesPath.login);
return;
}
Get.offAllNamed(RoutesPath.home);
await Get.toNamed(
RoutesPath.detailedRecord,
arguments: {
'record': record,
},
);
} catch (_) {
if (first)
Get.offAllNamed(RoutesPath.noInternetConnection, arguments: {
'callback': () =>
_onRecordNotificationPressed(recordId, first: false),
});
else
throw '';
}
}