Skip to content

Background service to check if node goes offline #994

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

Merged
merged 48 commits into from
Apr 30, 2025
Merged
Show file tree
Hide file tree
Changes from 38 commits
Commits
Show all changes
48 commits
Select commit Hold shift + click to select a range
130d6fc
WIP: adding notifications pgk
AlaaElattar Apr 9, 2025
2952f0e
fix ios issue and show notification with offline nodes
AlaaElattar Apr 13, 2025
783e580
remove unused import && undo changes in podfile.lock
AlaaElattar Apr 13, 2025
fd5ee16
WIP: adding permissions for android
AlaaElattar Apr 14, 2025
e7939be
WIP: downgrade background_fetch
AlaaElattar Apr 14, 2025
b8d1983
WIP: downgrade background_fetch
AlaaElattar Apr 14, 2025
d8ec42a
clear cached background_fetch
AlaaElattar Apr 14, 2025
09fcf79
specify ndk version
AlaaElattar Apr 14, 2025
039d0a7
undo nkd version setup
AlaaElattar Apr 14, 2025
79255c0
WIP: add debug logs
AlaaElattar Apr 14, 2025
7536668
WIP: debug background_fetch version
AlaaElattar Apr 14, 2025
c63e68d
update pubspec.lock
AlaaElattar Apr 14, 2025
62ac54d
update build.gradle
AlaaElattar Apr 14, 2025
e3eeef0
WIP: remove gradle cache
AlaaElattar Apr 14, 2025
e79387a
fix command
AlaaElattar Apr 14, 2025
d3aa5a1
WIP: Update build.gradle
AlaaElattar Apr 14, 2025
940a189
WIP: fix space
AlaaElattar Apr 14, 2025
2f74467
undo latest commit
AlaaElattar Apr 14, 2025
c5d36b4
add maven url in build.gradle
AlaaElattar Apr 14, 2025
58933f1
Add close button for confirmation dialog (#976)
AlaaElattar Apr 9, 2025
a719351
Handle non-loading for delete wallet (#973)
AlaaElattar Apr 9, 2025
bd2625d
Prevent PIN Entry Attempts During 30 Second Lockout Period (#989)
AlaaElattar Apr 9, 2025
d0cdb36
Fix transactions paginations (#992)
zaelgohary Apr 9, 2025
f8d3766
handle duplicated daily (#986)
AlaaElattar Apr 14, 2025
9dfcd94
Update the packages version for background_fetch & flutter_local_noti…
AhmedHanafy725 Apr 15, 2025
6a60a02
Request to enable the notification service on android
AhmedHanafy725 Apr 15, 2025
4532ecb
Revert the changes in the wrong manifest file
AhmedHanafy725 Apr 15, 2025
c4873e7
Update the gradle repos
AhmedHanafy725 Apr 15, 2025
d28d9b2
Update build gradle dependencies
AhmedHanafy725 Apr 15, 2025
d9453e7
Update the manifest permissions
AhmedHanafy725 Apr 15, 2025
d9f57dd
Merge branch 'development' into development_check_nodes
AhmedHanafy725 Apr 16, 2025
eaf9eab
only show notifications for nodes down last 2 days && group notificat…
AlaaElattar Apr 22, 2025
78a059b
remove unused import
AlaaElattar Apr 22, 2025
7bcfb88
update checking nodes for last 7 days
AlaaElattar Apr 22, 2025
01c6b32
Update app/lib/services/background_service.dart
AlaaElattar Apr 24, 2025
ff26022
apply pr comments && apply the exponential notification
AlaaElattar Apr 24, 2025
56afeb9
handle notification grouping
AlaaElattar Apr 24, 2025
69ba0e6
handled tapping on notification
AlaaElattar Apr 24, 2025
3aeeeeb
Hide show phrase (#995)
zaelgohary Apr 16, 2025
48b9cd1
Handle duplicated contacts in favorite List (#983)
AlaaElattar Apr 24, 2025
7b09e6a
Fix auth timeout routing (#1000)
zaelgohary Apr 27, 2025
b877ea9
fix ios issue and show notification with offline nodes
AlaaElattar Apr 13, 2025
ffead77
update pubspec.lock
AlaaElattar Apr 14, 2025
e0b7121
Merge branch 'development' into development_check_nodes
AlaaElattar Apr 28, 2025
4a4be60
fix workflow
AlaaElattar Apr 28, 2025
a0016f7
fix equation && workflow
AlaaElattar Apr 28, 2025
d7a1b80
undo the equation
AlaaElattar Apr 30, 2025
c2b8c0b
fixed time conversion
AlaaElattar Apr 30, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions app/android/app/build_local
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@ android {
}

compileOptions {
coreLibraryDesugaringEnabled true
sourceCompatibility JavaVersion.VERSION_17
targetCompatibility JavaVersion.VERSION_17
}
Expand Down Expand Up @@ -101,4 +102,7 @@ dependencies {
implementation "androidx.lifecycle:lifecycle-viewmodel:$lifecycle_version"
implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:$lifecycle_version"
implementation "androidx.activity:activity:1.9.3"
implementation 'androidx.window:window:1.0.0'
implementation 'androidx.window:window-java:1.0.0'
coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:2.1.4'
}
4 changes: 4 additions & 0 deletions app/android/app/build_production
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@ android {
}

compileOptions {
coreLibraryDesugaringEnabled true
sourceCompatibility JavaVersion.VERSION_17
targetCompatibility JavaVersion.VERSION_17
}
Expand Down Expand Up @@ -101,4 +102,7 @@ dependencies {
implementation "androidx.lifecycle:lifecycle-viewmodel:$lifecycle_version"
implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:$lifecycle_version"
implementation "androidx.activity:activity:1.9.3"
implementation 'androidx.window:window:1.0.0'
implementation 'androidx.window:window-java:1.0.0'
coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:2.1.4'
}
4 changes: 4 additions & 0 deletions app/android/app/build_staging
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@ android {
}

compileOptions {
coreLibraryDesugaringEnabled true
sourceCompatibility JavaVersion.VERSION_17
targetCompatibility JavaVersion.VERSION_17
}
Expand Down Expand Up @@ -101,4 +102,7 @@ dependencies {
implementation "androidx.lifecycle:lifecycle-viewmodel:$lifecycle_version"
implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:$lifecycle_version"
implementation "androidx.activity:activity:1.9.3"
implementation 'androidx.window:window:1.0.0'
implementation 'androidx.window:window-java:1.0.0'
coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:2.1.4'
}
4 changes: 4 additions & 0 deletions app/android/app/build_testing
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@ android {
}

compileOptions {
coreLibraryDesugaringEnabled true
sourceCompatibility JavaVersion.VERSION_17
targetCompatibility JavaVersion.VERSION_17
}
Expand Down Expand Up @@ -101,4 +102,7 @@ dependencies {
implementation "androidx.lifecycle:lifecycle-viewmodel:$lifecycle_version"
implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:$lifecycle_version"
implementation "androidx.activity:activity:1.9.3"
implementation 'androidx.window:window:1.0.0'
implementation 'androidx.window:window-java:1.0.0'
coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:2.1.4'
}
32 changes: 31 additions & 1 deletion app/android/app/src/main/AndroidManifest_local
Original file line number Diff line number Diff line change
@@ -1,6 +1,12 @@
<manifest xmlns:tools="http://schemas.android.com/tools" xmlns:android="http://schemas.android.com/apk/res/android">
<application tools:replace="android:label" android:label="ThreeFold Connect" android:icon="@mipmap/ic_launcher" android:usesCleartextTraffic="true" android:enableOnBackInvokedCallback="true">
<activity android:name=".MainActivity" android:exported="true" android:launchMode="singleTop" android:theme="@style/LaunchTheme" android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode"
<activity android:name=".MainActivity"
android:exported="true"
android:launchMode="singleTop"
android:theme="@style/LaunchTheme"
android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode"
android:showWhenLocked="true"
android:turnScreenOn="true"
android:hardwareAccelerated="true" android:windowSoftInputMode="adjustResize" android:enableOnBackInvokedCallback="false">
<meta-data android:name="io.flutter.embedding.android.NormalTheme" android:resource="@style/NormalTheme" />
<meta-data android:name="io.flutter.embedding.android.SplashScreenDrawable" android:resource="@drawable/launch_background" />
Expand Down Expand Up @@ -32,6 +38,22 @@
</intent-filter>
</activity>
<meta-data android:name="flutterEmbedding" android:value="2" />
<service
android:name="com.dexterous.flutterlocalnotifications.ForegroundService"
android:exported="false"
android:stopWithTask="false"
android:foregroundServiceType="specialUse">
<property android:name="android.app.PROPERTY_SPECIAL_USE_FGS_SUBTYPE" android:value="To demonstrate how to use foreground services to show notifications"/>
</service>
<receiver android:exported="false" android:name="com.dexterous.flutterlocalnotifications.ScheduledNotificationReceiver" />
<receiver android:exported="false" android:name="com.dexterous.flutterlocalnotifications.ScheduledNotificationBootReceiver">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED"/>
<action android:name="android.intent.action.MY_PACKAGE_REPLACED"/>
<action android:name="android.intent.action.QUICKBOOT_POWERON" />
<action android:name="com.htc.intent.action.QUICKBOOT_POWERON"/>
</intent-filter>
</receiver>
</application>

<uses-permission android:name="android.permission.INTERNET" />
Expand All @@ -41,6 +63,14 @@
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.USE_FINGERPRINT" />
<uses-permission android:name="android.permission.USE_BIOMETRIC" />
<uses-permission android:minSdkVersion="34" android:name="android.permission.USE_EXACT_ALARM" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
<uses-permission android:name="android.permission.SCHEDULE_EXACT_ALARM" />
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.USE_FULL_SCREEN_INTENT" />
<uses-permission android:name="android.permission.POST_NOTIFICATIONS"/>
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_SPECIAL_USE" />

<uses-feature android:name="android.hardware.camera.autofocus" />
<uses-feature android:name="android.hardware.camera" />
Expand Down
32 changes: 31 additions & 1 deletion app/android/app/src/main/AndroidManifest_production
Original file line number Diff line number Diff line change
@@ -1,6 +1,12 @@
<manifest xmlns:tools="http://schemas.android.com/tools" xmlns:android="http://schemas.android.com/apk/res/android">
<application tools:replace="android:label" android:label="ThreeFold Connect" android:icon="@mipmap/ic_launcher" android:usesCleartextTraffic="true" android:enableOnBackInvokedCallback="true">
<activity android:name=".MainActivity" android:exported="true" android:launchMode="singleTop" android:theme="@style/LaunchTheme" android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode"
<activity android:name=".MainActivity"
android:exported="true"
android:launchMode="singleTop"
android:theme="@style/LaunchTheme"
android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode"
android:showWhenLocked="true"
android:turnScreenOn="true"
android:hardwareAccelerated="true" android:windowSoftInputMode="adjustResize" android:enableOnBackInvokedCallback="false">
<meta-data android:name="io.flutter.embedding.android.NormalTheme" android:resource="@style/NormalTheme" />
<meta-data android:name="io.flutter.embedding.android.SplashScreenDrawable" android:resource="@drawable/launch_background" />
Expand Down Expand Up @@ -32,6 +38,22 @@
</intent-filter>
</activity>
<meta-data android:name="flutterEmbedding" android:value="2" />
<service
android:name="com.dexterous.flutterlocalnotifications.ForegroundService"
android:exported="false"
android:stopWithTask="false"
android:foregroundServiceType="specialUse">
<property android:name="android.app.PROPERTY_SPECIAL_USE_FGS_SUBTYPE" android:value="To demonstrate how to use foreground services to show notifications"/>
</service>
<receiver android:exported="false" android:name="com.dexterous.flutterlocalnotifications.ScheduledNotificationReceiver" />
<receiver android:exported="false" android:name="com.dexterous.flutterlocalnotifications.ScheduledNotificationBootReceiver">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED"/>
<action android:name="android.intent.action.MY_PACKAGE_REPLACED"/>
<action android:name="android.intent.action.QUICKBOOT_POWERON" />
<action android:name="com.htc.intent.action.QUICKBOOT_POWERON"/>
</intent-filter>
</receiver>
</application>

<uses-permission android:name="android.permission.INTERNET" />
Expand All @@ -41,6 +63,14 @@
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.USE_FINGERPRINT" />
<uses-permission android:name="android.permission.USE_BIOMETRIC" />
<uses-permission android:minSdkVersion="34" android:name="android.permission.USE_EXACT_ALARM" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
<uses-permission android:name="android.permission.SCHEDULE_EXACT_ALARM" />
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.USE_FULL_SCREEN_INTENT" />
<uses-permission android:name="android.permission.POST_NOTIFICATIONS"/>
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_SPECIAL_USE" />

<uses-feature android:name="android.hardware.camera.autofocus" />
<uses-feature android:name="android.hardware.camera" />
Expand Down
32 changes: 31 additions & 1 deletion app/android/app/src/main/AndroidManifest_staging
Original file line number Diff line number Diff line change
@@ -1,6 +1,12 @@
<manifest xmlns:tools="http://schemas.android.com/tools" xmlns:android="http://schemas.android.com/apk/res/android">
<application tools:replace="android:label" android:label="ThreeFold Connect" android:icon="@mipmap/ic_launcher" android:usesCleartextTraffic="true" android:enableOnBackInvokedCallback="true">
<activity android:name=".MainActivity" android:exported="true" android:launchMode="singleTop" android:theme="@style/LaunchTheme" android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode"
<activity android:name=".MainActivity"
android:exported="true"
android:launchMode="singleTop"
android:theme="@style/LaunchTheme"
android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode"
android:showWhenLocked="true"
android:turnScreenOn="true"
android:hardwareAccelerated="true" android:windowSoftInputMode="adjustResize" android:enableOnBackInvokedCallback="false">
<meta-data android:name="io.flutter.embedding.android.NormalTheme" android:resource="@style/NormalTheme" />
<meta-data android:name="io.flutter.embedding.android.SplashScreenDrawable" android:resource="@drawable/launch_background" />
Expand Down Expand Up @@ -32,6 +38,22 @@
</intent-filter>
</activity>
<meta-data android:name="flutterEmbedding" android:value="2" />
<service
android:name="com.dexterous.flutterlocalnotifications.ForegroundService"
android:exported="false"
android:stopWithTask="false"
android:foregroundServiceType="specialUse">
<property android:name="android.app.PROPERTY_SPECIAL_USE_FGS_SUBTYPE" android:value="To demonstrate how to use foreground services to show notifications"/>
</service>
<receiver android:exported="false" android:name="com.dexterous.flutterlocalnotifications.ScheduledNotificationReceiver" />
<receiver android:exported="false" android:name="com.dexterous.flutterlocalnotifications.ScheduledNotificationBootReceiver">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED"/>
<action android:name="android.intent.action.MY_PACKAGE_REPLACED"/>
<action android:name="android.intent.action.QUICKBOOT_POWERON" />
<action android:name="com.htc.intent.action.QUICKBOOT_POWERON"/>
</intent-filter>
</receiver>
</application>

<uses-permission android:name="android.permission.INTERNET" />
Expand All @@ -41,6 +63,14 @@
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.USE_FINGERPRINT" />
<uses-permission android:name="android.permission.USE_BIOMETRIC" />
<uses-permission android:minSdkVersion="34" android:name="android.permission.USE_EXACT_ALARM" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
<uses-permission android:name="android.permission.SCHEDULE_EXACT_ALARM" />
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.USE_FULL_SCREEN_INTENT" />
<uses-permission android:name="android.permission.POST_NOTIFICATIONS"/>
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_SPECIAL_USE" />

<uses-feature android:name="android.hardware.camera.autofocus" />
<uses-feature android:name="android.hardware.camera" />
Expand Down
32 changes: 31 additions & 1 deletion app/android/app/src/main/AndroidManifest_testing
Original file line number Diff line number Diff line change
@@ -1,6 +1,12 @@
<manifest xmlns:tools="http://schemas.android.com/tools" xmlns:android="http://schemas.android.com/apk/res/android">
<application tools:replace="android:label" android:label="ThreeFold Connect" android:icon="@mipmap/ic_launcher" android:usesCleartextTraffic="true" android:enableOnBackInvokedCallback="true">
<activity android:name=".MainActivity" android:exported="true" android:launchMode="singleTop" android:theme="@style/LaunchTheme" android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode"
<activity android:name=".MainActivity"
android:exported="true"
android:launchMode="singleTop"
android:theme="@style/LaunchTheme"
android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode"
android:showWhenLocked="true"
android:turnScreenOn="true"
android:hardwareAccelerated="true" android:windowSoftInputMode="adjustResize" android:enableOnBackInvokedCallback="false">
<meta-data android:name="io.flutter.embedding.android.NormalTheme" android:resource="@style/NormalTheme" />
<meta-data android:name="io.flutter.embedding.android.SplashScreenDrawable" android:resource="@drawable/launch_background" />
Expand Down Expand Up @@ -32,6 +38,22 @@
</intent-filter>
</activity>
<meta-data android:name="flutterEmbedding" android:value="2" />
<service
android:name="com.dexterous.flutterlocalnotifications.ForegroundService"
android:exported="false"
android:stopWithTask="false"
android:foregroundServiceType="specialUse">
<property android:name="android.app.PROPERTY_SPECIAL_USE_FGS_SUBTYPE" android:value="To demonstrate how to use foreground services to show notifications"/>
</service>
<receiver android:exported="false" android:name="com.dexterous.flutterlocalnotifications.ScheduledNotificationReceiver" />
<receiver android:exported="false" android:name="com.dexterous.flutterlocalnotifications.ScheduledNotificationBootReceiver">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED"/>
<action android:name="android.intent.action.MY_PACKAGE_REPLACED"/>
<action android:name="android.intent.action.QUICKBOOT_POWERON" />
<action android:name="com.htc.intent.action.QUICKBOOT_POWERON"/>
</intent-filter>
</receiver>
</application>

<uses-permission android:name="android.permission.INTERNET" />
Expand All @@ -41,6 +63,14 @@
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.USE_FINGERPRINT" />
<uses-permission android:name="android.permission.USE_BIOMETRIC" />
<uses-permission android:minSdkVersion="34" android:name="android.permission.USE_EXACT_ALARM" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
<uses-permission android:name="android.permission.SCHEDULE_EXACT_ALARM" />
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.USE_FULL_SCREEN_INTENT" />
<uses-permission android:name="android.permission.POST_NOTIFICATIONS"/>
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_SPECIAL_USE" />

<uses-feature android:name="android.hardware.camera.autofocus" />
<uses-feature android:name="android.hardware.camera" />
Expand Down
2 changes: 2 additions & 0 deletions app/android/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@ allprojects {
mavenCentral()
maven { url 'https://jitpack.io' }
maven { url 'https://maven.google.com' }
// [required] background_fetch
maven { url "${project(':background_fetch').projectDir}/libs" }
}
}

Expand Down
2 changes: 1 addition & 1 deletion app/ios/Podfile.lock
Original file line number Diff line number Diff line change
Expand Up @@ -257,4 +257,4 @@ SPEC CHECKSUMS:

PODFILE CHECKSUM: 050ff199c8e97450c391a88d64db90da96da9995

COCOAPODS: 1.16.2
COCOAPODS: 1.16.2
18 changes: 16 additions & 2 deletions app/ios/Runner/AppDelegate.swift
Original file line number Diff line number Diff line change
@@ -1,13 +1,27 @@
import UIKit
import Flutter
import flutter_local_notifications

@UIApplicationMain
@objc class AppDelegate: FlutterAppDelegate {
override func application(
override func userNotificationCenter(_ center: UNUserNotificationCenter, willPresent notification: UNNotification, withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) {
completionHandler([.alert, .badge, .sound])
}

override func application(
_ application: UIApplication,
didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
) -> Bool {
FlutterLocalNotificationsPlugin.setPluginRegistrantCallback { (registry) in
GeneratedPluginRegistrant.register(with: registry)
}

if #available(iOS 10.0, *) {
UNUserNotificationCenter.current().delegate = self as UNUserNotificationCenterDelegate
}

GeneratedPluginRegistrant.register(with: self)
return super.application(application, didFinishLaunchingWithOptions: launchOptions)

}
}
}
14 changes: 14 additions & 0 deletions app/ios/Runner/Info.plist
Original file line number Diff line number Diff line change
Expand Up @@ -86,5 +86,19 @@
<false/>
<key>io.flutter.embedded_views_preview</key>
<true/>
<key>UIBackgroundModes</key>
<array>
<string>fetch</string>
<string>remote-notification</string>
</array>

<key>NSUserNotificationAlertStyle</key>
<string>alert</string>

<key>NSLocalNetworkUsageDescription</key>
<string>This app uses the network to monitor your node status.</string>

<key>NSUserNotificationUsageDescription</key>
<string>This app needs permission to send you notifications when your node is offline.</string>
</dict>
</plist>
Loading