diff --git a/android/app/build.gradle b/android/app/build.gradle index fbc3a66..772bc9e 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -79,6 +79,7 @@ flutter { dependencies { implementation 'com.google.firebase:firebase-analytics:17.2.2' + implementation 'com.google.firebase:firebase-messaging:20.2.0' testImplementation 'junit:junit:4.12' androidTestImplementation 'com.android.support.test:runner:1.0.2' androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2' diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml index 6b6c8dc..31520d2 100644 --- a/android/app/src/main/AndroidManifest.xml +++ b/android/app/src/main/AndroidManifest.xml @@ -43,16 +43,20 @@ - - - - - + () { + @Override + public void onComplete(@NonNull Task task) { + if (task.isSuccessful()) { + Context context = getActivity(); + SharedPreferences.Editor editor = context.getSharedPreferences("FlutterSharedPreferences", Context.MODE_PRIVATE).edit(); + String token = task.getResult().getToken(); + editor.putString("flutter.fcm-token", token); + editor.commit(); + } + } + }); + } + } diff --git a/lib/home_assistant.class.dart b/lib/home_assistant.class.dart index 3946c87..c591a50 100644 --- a/lib/home_assistant.class.dart +++ b/lib/home_assistant.class.dart @@ -22,8 +22,6 @@ class HomeAssistant { Map services; bool autoUi = false; - String fcmToken; - Map _rawLovelaceData; var _rawStates; var _rawUserInfo; diff --git a/lib/main.dart b/lib/main.dart index d515454..47ea6f3 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -16,10 +16,10 @@ import 'package:http/http.dart' as http; import 'package:charts_flutter/flutter.dart' as charts; import 'package:flutter_markdown/flutter_markdown.dart'; import 'package:flutter_custom_tabs/flutter_custom_tabs.dart'; -import 'package:firebase_messaging/firebase_messaging.dart'; +//import 'package:firebase_messaging/firebase_messaging.dart'; import 'package:flutter_secure_storage/flutter_secure_storage.dart'; import 'package:device_info/device_info.dart'; -import 'package:flutter_local_notifications/flutter_local_notifications.dart'; +//import 'package:flutter_local_notifications/flutter_local_notifications.dart'; import 'package:in_app_purchase/in_app_purchase.dart'; import 'plugins/dynamic_multi_column_layout.dart'; import 'plugins/spoiler_card.dart'; @@ -157,8 +157,8 @@ part 'cards/badges.dart'; part 'managers/app_settings.dart'; EventBus eventBus = new EventBus(); -final FirebaseMessaging _firebaseMessaging = FirebaseMessaging(); -FlutterLocalNotificationsPlugin flutterLocalNotificationsPlugin = new FlutterLocalNotificationsPlugin(); +//final FirebaseMessaging _firebaseMessaging = FirebaseMessaging(); +//FlutterLocalNotificationsPlugin flutterLocalNotificationsPlugin = new FlutterLocalNotificationsPlugin(); const String appName = 'HA Client'; const String appVersion = String.fromEnvironment('versionName', defaultValue: '0.0.0'); const whatsNewUrl = 'http://ha-client.app/service/whats_new_1.1.0.md'; diff --git a/lib/managers/app_settings.dart b/lib/managers/app_settings.dart index 46cce8a..9e7d0e3 100644 --- a/lib/managers/app_settings.dart +++ b/lib/managers/app_settings.dart @@ -20,6 +20,7 @@ class AppSettings { String tempToken; String oauthUrl; String webhookId; + String fcmToken; double haVersion; bool scrollBadges; int appIntegrationVersion; @@ -40,6 +41,7 @@ class AppSettings { if (full) { Logger.d('Loading settings...'); SharedPreferences prefs = await SharedPreferences.getInstance(); + fcmToken = prefs.getString('fcm-token'); _domain = prefs.getString('hassio-domain'); _port = prefs.getString('hassio-port'); webhookId = prefs.getString('app-webhook-id'); diff --git a/lib/managers/mobile_app_integration_manager.class.dart b/lib/managers/mobile_app_integration_manager.class.dart index e8aaed9..45dd716 100644 --- a/lib/managers/mobile_app_integration_manager.class.dart +++ b/lib/managers/mobile_app_integration_manager.class.dart @@ -12,7 +12,7 @@ class MobileAppIntegrationManager { "os_version": DeviceInfoManager().osVersion, "app_data": { "push_token": "", - "push_url": "https://us-central1-ha-client-c73c4.cloudfunctions.net/pushNotifyV2" + "push_url": "https://us-central1-ha-client-c73c4.cloudfunctions.net/pushNotifyV3" } }; @@ -26,7 +26,7 @@ class MobileAppIntegrationManager { static Future checkAppRegistration() { Completer completer = Completer(); _appRegistrationData["device_name"] = AppSettings().mobileAppDeviceName ?? getDefaultDeviceName(); - (_appRegistrationData["app_data"] as Map)["push_token"] = "${HomeAssistant().fcmToken}"; + (_appRegistrationData["app_data"] as Map)["push_token"] = "${AppSettings().fcmToken}"; if (AppSettings().webhookId == null) { Logger.d("Mobile app was not registered yet. Registering..."); var registrationData = Map.from(_appRegistrationData); diff --git a/lib/pages/main/main.page.dart b/lib/pages/main/main.page.dart index 377d516..1498615 100644 --- a/lib/pages/main/main.page.dart +++ b/lib/pages/main/main.page.dart @@ -33,35 +33,8 @@ class _MainPageState extends State with WidgetsBindingObserver, Ticker super.initState(); WidgetsBinding.instance.addObserver(this); - _firebaseMessaging.configure( - onLaunch: (data) { - Logger.d("Notification [onLaunch]: $data"); - return Future.value(); - }, - onMessage: (data) { - Logger.d("Notification [onMessage]: $data"); - return _showNotification(title: data["notification"]["title"], text: data["notification"]["body"]); - }, - onResume: (data) { - Logger.d("Notification [onResume]: $data"); - return Future.value(); - } - ); - _bottomInfoBarController = BottomInfoBarController(); - _firebaseMessaging.requestNotificationPermissions(const IosNotificationSettings(sound: true, badge: true, alert: true)); - - // initialise the plugin. app_icon needs to be a added as a drawable resource to the Android head project - var initializationSettingsAndroid = - new AndroidInitializationSettings('mini_icon'); - var initializationSettingsIOS = new IOSInitializationSettings( - onDidReceiveLocalNotification: null); - var initializationSettings = new InitializationSettings( - initializationSettingsAndroid, initializationSettingsIOS); - flutterLocalNotificationsPlugin.initialize(initializationSettings, - onSelectNotification: onSelectNotification); - _settingsSubscription = eventBus.on().listen((event) { Logger.d("Settings change event: reconnect=${event.reconnect}"); if (event.reconnect) { @@ -73,31 +46,13 @@ class _MainPageState extends State with WidgetsBindingObserver, Ticker _fullLoad(); } - Future onSelectNotification(String payload) async { - if (payload != null) { - Logger.d('Notification clicked: ' + payload); - } - } - - Future _showNotification({String title, String text}) async { - var androidPlatformChannelSpecifics = new AndroidNotificationDetails( - 'ha_notify', 'Home Assistant notifications', 'Notifications from Home Assistant notify service', - importance: Importance.Max, priority: Priority.High); - var iOSPlatformChannelSpecifics = new IOSNotificationDetails(); - var platformChannelSpecifics = new NotificationDetails( - androidPlatformChannelSpecifics, iOSPlatformChannelSpecifics); - await flutterLocalNotificationsPlugin.show( - 0, - title ?? appName, - text, - platformChannelSpecifics - ); - } - void _fullLoad() { _bottomInfoBarController.showInfoBottomBar(progress: true,); + Logger.d('[loading] fullLoad'); _subscribe().then((_) { + Logger.d('[loading] subscribed'); ConnectionManager().init(loadSettings: true, forceReconnect: true).then((__){ + Logger.d('[loading] COnnection manager initialized'); SharedPreferences.getInstance().then((prefs) { HomeAssistant().currentDashboardPath = prefs.getString('lovelace_dashboard_url') ?? HomeAssistant.DEFAULT_DASHBOARD; _fetchData(useCache: true); @@ -155,9 +110,7 @@ class _MainPageState extends State with WidgetsBindingObserver, Ticker } } - Future _subscribe() { - Completer completer = Completer(); - + Future _subscribe() async { if (_stateSubscription == null) { _stateSubscription = eventBus.on().listen((event) { if (event.needToRebuildUI) { @@ -238,11 +191,10 @@ class _MainPageState extends State with WidgetsBindingObserver, Ticker }); } - _firebaseMessaging.getToken().then((String token) { + /*_firebaseMessaging.getToken().then((String token) { HomeAssistant().fcmToken = token; completer.complete(); - }); - return completer.future; + });*/ } void _showOAuth() { diff --git a/pubspec.yaml b/pubspec.yaml index cbed309..1f62a8b 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -23,10 +23,8 @@ dependencies: flutter_custom_tabs: ^0.6.0 flutter_webview_plugin: ^0.3.10+1 webview_flutter: ^0.3.19+7 - firebase_messaging: ^6.0.15 flutter_secure_storage: ^3.3.3 device_info: ^0.4.1+4 - flutter_local_notifications: ^1.1.6 geolocator: ^5.3.1 workmanager: ^0.2.2 battery: ^1.0.0