Compare commits
1 commit
main
...
krille/up-
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
6aec3dd25c |
11 changed files with 47 additions and 231 deletions
|
|
@ -82,11 +82,9 @@ flutter {
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
|
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
|
||||||
//implementation 'com.google.firebase:firebase-messaging:19.0.1' // Workaround for https://github.com/microg/android_packages_apps_GmsCore/issues/313#issuecomment-617651698
|
implementation('com.github.UnifiedPush:android-foss_embedded_fcm_distributor:1.0.0-beta1')
|
||||||
testImplementation 'junit:junit:4.12'
|
testImplementation 'junit:junit:4.12'
|
||||||
androidTestImplementation 'androidx.test:runner:1.1.1'
|
androidTestImplementation 'androidx.test:runner:1.1.1'
|
||||||
androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.1'
|
androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.1'
|
||||||
implementation 'androidx.multidex:multidex:2.0.1'
|
implementation 'androidx.multidex:multidex:2.0.1'
|
||||||
}
|
}
|
||||||
|
|
||||||
//apply plugin: 'com.google.gms.google-services'
|
|
||||||
|
|
|
||||||
|
|
@ -103,13 +103,6 @@
|
||||||
</intent-filter>
|
</intent-filter>
|
||||||
</activity>
|
</activity>
|
||||||
|
|
||||||
<service android:name=".FcmPushService"
|
|
||||||
android:exported="false">
|
|
||||||
<intent-filter>
|
|
||||||
<action android:name="com.google.firebase.MESSAGING_EVENT"/>
|
|
||||||
</intent-filter>
|
|
||||||
</service>
|
|
||||||
|
|
||||||
<receiver android:name="org.unifiedpush.flutter.connector.UnifiedPushReceiver"
|
<receiver android:name="org.unifiedpush.flutter.connector.UnifiedPushReceiver"
|
||||||
tools:replace="android:enabled"
|
tools:replace="android:enabled"
|
||||||
android:enabled="false">
|
android:enabled="false">
|
||||||
|
|
@ -124,6 +117,15 @@
|
||||||
</intent-filter>
|
</intent-filter>
|
||||||
</receiver>
|
</receiver>
|
||||||
|
|
||||||
|
<receiver android:enabled="true" android:name=".EmbeddedDistributor" android:exported="false">
|
||||||
|
<intent-filter>
|
||||||
|
<action android:name="org.unifiedpush.android.distributor.feature.BYTES_MESSAGE"/>
|
||||||
|
<action android:name="org.unifiedpush.android.distributor.REGISTER"/>
|
||||||
|
<action android:name="org.unifiedpush.android.distributor.UNREGISTER"/>
|
||||||
|
</intent-filter>
|
||||||
|
</receiver>
|
||||||
|
|
||||||
|
|
||||||
<!-- Don't delete the meta-data below.
|
<!-- Don't delete the meta-data below.
|
||||||
This is used by the Flutter tool to generate GeneratedPluginRegistrant.java -->
|
This is used by the Flutter tool to generate GeneratedPluginRegistrant.java -->
|
||||||
<meta-data
|
<meta-data
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,14 @@
|
||||||
|
package chat.fluffy.fluffychat
|
||||||
|
|
||||||
|
import android.content.Context
|
||||||
|
import org.unifiedpush.android.foss_embedded_fcm_distributor.EmbeddedDistributorReceiver
|
||||||
|
|
||||||
|
class EmbeddedDistributor: EmbeddedDistributorReceiver() {
|
||||||
|
|
||||||
|
override val googleProjectNumber = "865731724731" // This value comes from the google-services.json
|
||||||
|
|
||||||
|
override fun getEndpoint(context: Context, token: String, instance: String): String {
|
||||||
|
// This returns the endpoint of your FCM Rewrite-Proxy
|
||||||
|
return "https://push.fluffychat.im/_matrix/push/v1/notify?token=$token"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -1,36 +0,0 @@
|
||||||
/*package chat.fluffy.fluffychat
|
|
||||||
|
|
||||||
import com.famedly.fcm_shared_isolate.FcmSharedIsolateService
|
|
||||||
|
|
||||||
import chat.fluffy.fluffychat.MainActivity
|
|
||||||
|
|
||||||
import io.flutter.embedding.android.FlutterActivity
|
|
||||||
import io.flutter.embedding.engine.FlutterEngine
|
|
||||||
import io.flutter.view.FlutterMain
|
|
||||||
import io.flutter.embedding.engine.dart.DartExecutor.DartEntrypoint
|
|
||||||
|
|
||||||
import android.content.Context
|
|
||||||
import android.os.Bundle
|
|
||||||
import android.util.Log
|
|
||||||
import android.view.WindowManager
|
|
||||||
|
|
||||||
class FcmPushService : FcmSharedIsolateService() {
|
|
||||||
override fun getEngine(): FlutterEngine {
|
|
||||||
return provideEngine(getApplicationContext())
|
|
||||||
}
|
|
||||||
|
|
||||||
companion object {
|
|
||||||
fun provideEngine(context: Context): FlutterEngine {
|
|
||||||
var engine = MainActivity.engine
|
|
||||||
if (engine == null) {
|
|
||||||
engine = MainActivity.provideEngine(context)
|
|
||||||
engine.getLocalizationPlugin().sendLocalesToFlutter(
|
|
||||||
context.getResources().getConfiguration())
|
|
||||||
engine.getDartExecutor().executeDartEntrypoint(
|
|
||||||
DartEntrypoint.createDefault())
|
|
||||||
}
|
|
||||||
return engine
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
|
|
@ -8,7 +8,6 @@ buildscript {
|
||||||
dependencies {
|
dependencies {
|
||||||
classpath 'com.android.tools.build:gradle:4.2.1'
|
classpath 'com.android.tools.build:gradle:4.2.1'
|
||||||
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
|
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
|
||||||
//classpath 'com.google.gms:google-services:4.3.8'
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -39,8 +39,6 @@ import '../config/setting_keys.dart';
|
||||||
import 'famedlysdk_store.dart';
|
import 'famedlysdk_store.dart';
|
||||||
import 'platform_infos.dart';
|
import 'platform_infos.dart';
|
||||||
|
|
||||||
//import 'package:fcm_shared_isolate/fcm_shared_isolate.dart';
|
|
||||||
|
|
||||||
class NoTokenException implements Exception {
|
class NoTokenException implements Exception {
|
||||||
String get cause => 'Cannot get firebase token';
|
String get cause => 'Cannot get firebase token';
|
||||||
}
|
}
|
||||||
|
|
@ -52,7 +50,6 @@ class BackgroundPush {
|
||||||
Client client;
|
Client client;
|
||||||
BuildContext? context;
|
BuildContext? context;
|
||||||
GlobalKey<VRouterState>? router;
|
GlobalKey<VRouterState>? router;
|
||||||
String? _fcmToken;
|
|
||||||
void Function(String errorMsg, {Uri? link})? onFcmError;
|
void Function(String errorMsg, {Uri? link})? onFcmError;
|
||||||
L10n? l10n;
|
L10n? l10n;
|
||||||
Store? _store;
|
Store? _store;
|
||||||
|
|
@ -65,8 +62,6 @@ class BackgroundPush {
|
||||||
|
|
||||||
final pendingTests = <String, Completer<void>>{};
|
final pendingTests = <String, Completer<void>>{};
|
||||||
|
|
||||||
final dynamic firebase = null; //FcmSharedIsolate();
|
|
||||||
|
|
||||||
DateTime? lastReceivedPush;
|
DateTime? lastReceivedPush;
|
||||||
|
|
||||||
bool upAction = false;
|
bool upAction = false;
|
||||||
|
|
@ -77,17 +72,6 @@ class BackgroundPush {
|
||||||
onRoomSync ??= client.onSync.stream
|
onRoomSync ??= client.onSync.stream
|
||||||
.where((s) => s.hasRoomUpdate)
|
.where((s) => s.hasRoomUpdate)
|
||||||
.listen((s) => _onClearingPush(getFromServer: false));
|
.listen((s) => _onClearingPush(getFromServer: false));
|
||||||
firebase?.setListeners(
|
|
||||||
onMessage: (message) => pushHelper(
|
|
||||||
PushNotification.fromJson(
|
|
||||||
Map<String, dynamic>.from(message['data'] ?? message)),
|
|
||||||
client: client,
|
|
||||||
l10n: l10n,
|
|
||||||
activeRoomId: router?.currentState?.pathParameters['roomid'],
|
|
||||||
onSelectNotification: goToRoom,
|
|
||||||
),
|
|
||||||
onNewToken: _newFcmToken,
|
|
||||||
);
|
|
||||||
if (Platform.isAndroid) {
|
if (Platform.isAndroid) {
|
||||||
UnifiedPush.initialize(
|
UnifiedPush.initialize(
|
||||||
onNewEndpoint: _newUpEndpoint,
|
onNewEndpoint: _newUpEndpoint,
|
||||||
|
|
@ -123,20 +107,13 @@ class BackgroundPush {
|
||||||
StreamSubscription<LoginState>? onLogin;
|
StreamSubscription<LoginState>? onLogin;
|
||||||
StreamSubscription<SyncUpdate>? onRoomSync;
|
StreamSubscription<SyncUpdate>? onRoomSync;
|
||||||
|
|
||||||
void _newFcmToken(String token) {
|
|
||||||
_fcmToken = token;
|
|
||||||
setupPush();
|
|
||||||
}
|
|
||||||
|
|
||||||
Future<void> setupPusher({
|
Future<void> setupPusher({
|
||||||
String? gatewayUrl,
|
String? gatewayUrl,
|
||||||
String? token,
|
String? token,
|
||||||
Set<String?>? oldTokens,
|
Set<String?>? oldTokens,
|
||||||
bool useDeviceSpecificAppId = false,
|
bool useDeviceSpecificAppId = false,
|
||||||
}) async {
|
}) async {
|
||||||
if (PlatformInfos.isIOS) {
|
print('Setup pusher $gatewayUrl $token');
|
||||||
await firebase?.requestPermission();
|
|
||||||
}
|
|
||||||
final clientName = PlatformInfos.clientName;
|
final clientName = PlatformInfos.clientName;
|
||||||
oldTokens ??= <String>{};
|
oldTokens ??= <String>{};
|
||||||
final pushers = await (client.getPushers().catchError((e) {
|
final pushers = await (client.getPushers().catchError((e) {
|
||||||
|
|
@ -232,8 +209,6 @@ class BackgroundPush {
|
||||||
if (!PlatformInfos.isIOS &&
|
if (!PlatformInfos.isIOS &&
|
||||||
(await UnifiedPush.getDistributors()).isNotEmpty) {
|
(await UnifiedPush.getDistributors()).isNotEmpty) {
|
||||||
await setupUp();
|
await setupUp();
|
||||||
} else {
|
|
||||||
await setupFirebase();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// ignore: unawaited_futures
|
// ignore: unawaited_futures
|
||||||
|
|
@ -251,46 +226,6 @@ class BackgroundPush {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<void> _noFcmWarning() async {
|
|
||||||
if (context == null) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (await store.getItemBool(SettingKeys.showNoGoogle, true)) {
|
|
||||||
await loadLocale();
|
|
||||||
if (PlatformInfos.isAndroid) {
|
|
||||||
onFcmError?.call(
|
|
||||||
l10n!.noGoogleServicesWarning,
|
|
||||||
link: Uri.parse(
|
|
||||||
AppConfig.enablePushTutorial,
|
|
||||||
),
|
|
||||||
);
|
|
||||||
}
|
|
||||||
onFcmError?.call(l10n!.oopsPushError);
|
|
||||||
|
|
||||||
if (null == await store.getItem(SettingKeys.showNoGoogle)) {
|
|
||||||
await store.setItemBool(SettingKeys.showNoGoogle, false);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Future<void> setupFirebase() async {
|
|
||||||
Logs().v('Setup firebase');
|
|
||||||
if (_fcmToken?.isEmpty ?? true) {
|
|
||||||
try {
|
|
||||||
_fcmToken = await firebase?.getToken();
|
|
||||||
if (_fcmToken == null) throw ('PushToken is null');
|
|
||||||
} catch (e, s) {
|
|
||||||
Logs().w('[Push] cannot get token', e, e is String ? null : s);
|
|
||||||
await _noFcmWarning();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
await setupPusher(
|
|
||||||
gatewayUrl: AppConfig.pushNotificationsGatewayUrl,
|
|
||||||
token: _fcmToken,
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
Future<void> goToRoom(String? roomId) async {
|
Future<void> goToRoom(String? roomId) async {
|
||||||
try {
|
try {
|
||||||
Logs().v('[Push] Attempting to go to room $roomId...');
|
Logs().v('[Push] Attempting to go to room $roomId...');
|
||||||
|
|
@ -316,6 +251,7 @@ class BackgroundPush {
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<void> _newUpEndpoint(String newEndpoint, String i) async {
|
Future<void> _newUpEndpoint(String newEndpoint, String i) async {
|
||||||
|
print('New UP endpoint');
|
||||||
upAction = true;
|
upAction = true;
|
||||||
if (newEndpoint.isEmpty) {
|
if (newEndpoint.isEmpty) {
|
||||||
await _upUnregistered(i);
|
await _upUnregistered(i);
|
||||||
|
|
@ -324,36 +260,35 @@ class BackgroundPush {
|
||||||
var endpoint =
|
var endpoint =
|
||||||
'https://matrix.gateway.unifiedpush.org/_matrix/push/v1/notify';
|
'https://matrix.gateway.unifiedpush.org/_matrix/push/v1/notify';
|
||||||
try {
|
try {
|
||||||
final url = Uri.parse(newEndpoint)
|
const matrixGatewayPath = '/_matrix/push/v1/notify';
|
||||||
.replace(
|
if (Uri.parse(newEndpoint).path == matrixGatewayPath) {
|
||||||
path: '/_matrix/push/v1/notify',
|
endpoint = newEndpoint.split('?').first;
|
||||||
query: '',
|
} else {
|
||||||
)
|
final url = Uri.parse(newEndpoint)
|
||||||
.toString()
|
.replace(
|
||||||
.split('?')
|
path: matrixGatewayPath,
|
||||||
.first;
|
query: '',
|
||||||
final res =
|
)
|
||||||
json.decode(utf8.decode((await http.get(Uri.parse(url))).bodyBytes));
|
.toString()
|
||||||
if (res['gateway'] == 'matrix' ||
|
.split('?')
|
||||||
(res['unifiedpush'] is Map &&
|
.first;
|
||||||
res['unifiedpush']['gateway'] == 'matrix')) {
|
final res = json
|
||||||
endpoint = url;
|
.decode(utf8.decode((await http.get(Uri.parse(url))).bodyBytes));
|
||||||
|
if (res['gateway'] == 'matrix' ||
|
||||||
|
(res['unifiedpush'] is Map &&
|
||||||
|
res['unifiedpush']['gateway'] == 'matrix')) {
|
||||||
|
endpoint = url;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
Logs().i(
|
Logs().i(
|
||||||
'[Push] No self-hosted unified push gateway present: ' + newEndpoint);
|
'[Push] No self-hosted unified push gateway present: ' + newEndpoint);
|
||||||
}
|
}
|
||||||
Logs().i('[Push] UnifiedPush using endpoint ' + endpoint);
|
Logs().i('[Push] UnifiedPush using endpoint ' + endpoint);
|
||||||
final oldTokens = <String?>{};
|
|
||||||
try {
|
|
||||||
final fcmToken = await firebase?.getToken();
|
|
||||||
oldTokens.add(fcmToken);
|
|
||||||
} catch (_) {}
|
|
||||||
await setupPusher(
|
await setupPusher(
|
||||||
gatewayUrl: endpoint,
|
gatewayUrl: endpoint,
|
||||||
token: newEndpoint,
|
token: Uri.tryParse(newEndpoint)?.queryParameters['token'],
|
||||||
oldTokens: oldTokens,
|
useDeviceSpecificAppId: false,
|
||||||
useDeviceSpecificAppId: true,
|
|
||||||
);
|
);
|
||||||
await store.setItem(SettingKeys.unifiedPushEndpoint, newEndpoint);
|
await store.setItem(SettingKeys.unifiedPushEndpoint, newEndpoint);
|
||||||
await store.setItemBool(SettingKeys.unifiedPushRegistered, true);
|
await store.setItemBool(SettingKeys.unifiedPushRegistered, true);
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,4 @@
|
||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
git apply ./scripts/enable-android-google-services.patch
|
|
||||||
FLUFFYCHAT_ORIG_GROUP="im.fluffychat"
|
FLUFFYCHAT_ORIG_GROUP="im.fluffychat"
|
||||||
FLUFFYCHAT_ORIG_TEAM="4NXF6Z997G"
|
FLUFFYCHAT_ORIG_TEAM="4NXF6Z997G"
|
||||||
#FLUFFYCHAT_NEW_GROUP="com.example.fluffychat"
|
#FLUFFYCHAT_NEW_GROUP="com.example.fluffychat"
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,5 @@
|
||||||
flutter pub get
|
flutter pub get
|
||||||
flutter pub run import_sorter:main --no-comments --exit-if-changed
|
flutter pub run import_sorter:main --no-comments --exit-if-changed
|
||||||
flutter format lib/ test/ --set-exit-if-changed
|
flutter format lib/ test/ --set-exit-if-changed
|
||||||
git apply ./scripts/enable-android-google-services.patch
|
|
||||||
flutter pub get
|
|
||||||
flutter analyze
|
flutter analyze
|
||||||
flutter pub run dart_code_metrics:metrics lib -r gitlab > code-quality-report.json || true
|
flutter pub run dart_code_metrics:metrics lib -r gitlab > code-quality-report.json || true
|
||||||
|
|
@ -1,91 +0,0 @@
|
||||||
diff --git a/android/app/build.gradle b/android/app/build.gradle
|
|
||||||
index ad9ffb87..37baafb1 100644
|
|
||||||
--- a/android/app/build.gradle
|
|
||||||
+++ b/android/app/build.gradle
|
|
||||||
@@ -44,7 +44,7 @@ android {
|
|
||||||
|
|
||||||
defaultConfig {
|
|
||||||
applicationId "chat.fluffy.fluffychat"
|
|
||||||
- minSdkVersion 16
|
|
||||||
+ minSdkVersion 19
|
|
||||||
targetSdkVersion 30
|
|
||||||
versionCode flutterVersionCode.toInteger()
|
|
||||||
versionName flutterVersionName
|
|
||||||
@@ -82,11 +82,11 @@ flutter {
|
|
||||||
|
|
||||||
dependencies {
|
|
||||||
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
|
|
||||||
- //implementation 'com.google.firebase:firebase-messaging:19.0.1' // Workaround for https://github.com/microg/android_packages_apps_GmsCore/issues/313#issuecomment-617651698
|
|
||||||
+ implementation 'com.google.firebase:firebase-messaging:19.0.1' // Workaround for https://github.com/microg/android_packages_apps_GmsCore/issues/313#issuecomment-617651698
|
|
||||||
testImplementation 'junit:junit:4.12'
|
|
||||||
androidTestImplementation 'androidx.test:runner:1.1.1'
|
|
||||||
androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.1'
|
|
||||||
implementation 'androidx.multidex:multidex:2.0.1'
|
|
||||||
}
|
|
||||||
|
|
||||||
-//apply plugin: 'com.google.gms.google-services'
|
|
||||||
+apply plugin: 'com.google.gms.google-services'
|
|
||||||
diff --git a/android/app/src/main/kotlin/chat/fluffy/fluffychat/FcmPushService.kt b/android/app/src/main/kotlin/chat/fluffy/fluffychat/FcmPushService.kt
|
|
||||||
index d9930f55..510e9845 100644
|
|
||||||
--- a/android/app/src/main/kotlin/chat/fluffy/fluffychat/FcmPushService.kt
|
|
||||||
+++ b/android/app/src/main/kotlin/chat/fluffy/fluffychat/FcmPushService.kt
|
|
||||||
@@ -1,4 +1,4 @@
|
|
||||||
-/*package chat.fluffy.fluffychat
|
|
||||||
+package chat.fluffy.fluffychat
|
|
||||||
|
|
||||||
import com.famedly.fcm_shared_isolate.FcmSharedIsolateService
|
|
||||||
|
|
||||||
@@ -33,4 +33,3 @@ class FcmPushService : FcmSharedIsolateService() {
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
-*/
|
|
||||||
\ No newline at end of file
|
|
||||||
diff --git a/android/build.gradle b/android/build.gradle
|
|
||||||
index 85aa8647..3b7e09e7 100644
|
|
||||||
--- a/android/build.gradle
|
|
||||||
+++ b/android/build.gradle
|
|
||||||
@@ -8,7 +8,7 @@ buildscript {
|
|
||||||
dependencies {
|
|
||||||
classpath 'com.android.tools.build:gradle:4.2.1'
|
|
||||||
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
|
|
||||||
- //classpath 'com.google.gms:google-services:4.3.8'
|
|
||||||
+ classpath 'com.google.gms:google-services:4.3.8'
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
diff --git a/lib/utils/background_push.dart b/lib/utils/background_push.dart
|
|
||||||
index 00ca2aaa..8bb8a156 100644
|
|
||||||
--- a/lib/utils/background_push.dart
|
|
||||||
+++ b/lib/utils/background_push.dart
|
|
||||||
@@ -39,7 +39,7 @@ import '../config/setting_keys.dart';
|
|
||||||
import 'famedlysdk_store.dart';
|
|
||||||
import 'platform_infos.dart';
|
|
||||||
|
|
||||||
-//import 'package:fcm_shared_isolate/fcm_shared_isolate.dart';
|
|
||||||
+import 'package:fcm_shared_isolate/fcm_shared_isolate.dart';
|
|
||||||
|
|
||||||
class NoTokenException implements Exception {
|
|
||||||
String get cause => 'Cannot get firebase token';
|
|
||||||
@@ -65,7 +65,7 @@ class BackgroundPush {
|
|
||||||
|
|
||||||
final pendingTests = <String, Completer<void>>{};
|
|
||||||
|
|
||||||
- final dynamic firebase = null; //FcmSharedIsolate();
|
|
||||||
+ final dynamic firebase = FcmSharedIsolate();
|
|
||||||
|
|
||||||
DateTime? lastReceivedPush;
|
|
||||||
|
|
||||||
diff --git a/pubspec.yaml b/pubspec.yaml
|
|
||||||
index c6295788..8dd17ce4 100644
|
|
||||||
--- a/pubspec.yaml
|
|
||||||
+++ b/pubspec.yaml
|
|
||||||
@@ -24,7 +24,7 @@ dependencies:
|
|
||||||
email_validator: ^2.0.1
|
|
||||||
emoji_picker_flutter: ^1.1.2
|
|
||||||
encrypt: ^5.0.1
|
|
||||||
- #fcm_shared_isolate: ^0.1.0
|
|
||||||
+ fcm_shared_isolate: ^0.1.0
|
|
||||||
file_picker_cross: ^4.5.0
|
|
||||||
flutter:
|
|
||||||
sdk: flutter
|
|
||||||
|
|
@ -1,5 +1,4 @@
|
||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
git apply ./scripts/enable-android-google-services.patch
|
|
||||||
cd android
|
cd android
|
||||||
echo $FDROID_KEY | base64 --decode --ignore-garbage > key.jks
|
echo $FDROID_KEY | base64 --decode --ignore-garbage > key.jks
|
||||||
echo "storePassword=${FDROID_KEY_PASS}" >> key.properties
|
echo "storePassword=${FDROID_KEY_PASS}" >> key.properties
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,4 @@
|
||||||
#!/bin/sh -ve
|
#!/bin/sh -ve
|
||||||
git apply ./scripts/enable-android-google-services.patch
|
|
||||||
flutter clean
|
flutter clean
|
||||||
flutter pub get
|
flutter pub get
|
||||||
cd ios
|
cd ios
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue