Add firebase

This commit is contained in:
2024-06-06 23:28:19 +08:00
parent 4b2ac8894d
commit 0b8daad945
24 changed files with 490 additions and 8 deletions

88
lib/firebase_options.dart Normal file
View File

@ -0,0 +1,88 @@
// File generated by FlutterFire CLI.
// ignore_for_file: type=lint
import 'package:firebase_core/firebase_core.dart' show FirebaseOptions;
import 'package:flutter/foundation.dart'
show defaultTargetPlatform, kIsWeb, TargetPlatform;
/// Default [FirebaseOptions] for use with your Firebase apps.
///
/// Example:
/// ```dart
/// import 'firebase_options.dart';
/// // ...
/// await Firebase.initializeApp(
/// options: DefaultFirebaseOptions.currentPlatform,
/// );
/// ```
class DefaultFirebaseOptions {
static FirebaseOptions get currentPlatform {
if (kIsWeb) {
return web;
}
switch (defaultTargetPlatform) {
case TargetPlatform.android:
return android;
case TargetPlatform.iOS:
return ios;
case TargetPlatform.macOS:
return macos;
case TargetPlatform.windows:
return windows;
case TargetPlatform.linux:
throw UnsupportedError(
'DefaultFirebaseOptions have not been configured for linux - '
'you can reconfigure this by running the FlutterFire CLI again.',
);
default:
throw UnsupportedError(
'DefaultFirebaseOptions are not supported for this platform.',
);
}
}
static const FirebaseOptions web = FirebaseOptions(
apiKey: 'AIzaSyBKfIQpTouj5rXnlzkEieSlbAzepm4mgJE',
appId: '1:961776991058:web:b91d12f2892a5609f4188b',
messagingSenderId: '961776991058',
projectId: 'solian-0x001',
authDomain: 'solian-0x001.firebaseapp.com',
storageBucket: 'solian-0x001.appspot.com',
measurementId: 'G-XY3HHKG0PE',
);
static const FirebaseOptions android = FirebaseOptions(
apiKey: 'AIzaSyDvFNudXYs29uDtcCv6pFR8h5tXBs90FYk',
appId: '1:961776991058:android:a8d3f7995b0b8e86f4188b',
messagingSenderId: '961776991058',
projectId: 'solian-0x001',
storageBucket: 'solian-0x001.appspot.com',
);
static const FirebaseOptions ios = FirebaseOptions(
apiKey: 'AIzaSyCzQIyiYKoYHTpGXhN-IjgMML8z797WVD8',
appId: '1:961776991058:ios:727229d368cc47e1f4188b',
messagingSenderId: '961776991058',
projectId: 'solian-0x001',
storageBucket: 'solian-0x001.appspot.com',
iosBundleId: 'dev.solsynth.solian',
);
static const FirebaseOptions macos = FirebaseOptions(
apiKey: 'AIzaSyCzQIyiYKoYHTpGXhN-IjgMML8z797WVD8',
appId: '1:961776991058:ios:727229d368cc47e1f4188b',
messagingSenderId: '961776991058',
projectId: 'solian-0x001',
storageBucket: 'solian-0x001.appspot.com',
iosBundleId: 'dev.solsynth.solian',
);
static const FirebaseOptions windows = FirebaseOptions(
apiKey: 'AIzaSyBKfIQpTouj5rXnlzkEieSlbAzepm4mgJE',
appId: '1:961776991058:web:dcd731c8c5ce1281f4188b',
messagingSenderId: '961776991058',
projectId: 'solian-0x001',
authDomain: 'solian-0x001.firebaseapp.com',
storageBucket: 'solian-0x001.appspot.com',
measurementId: 'G-EF9BZMKBC3',
);
}

View File

@ -1,6 +1,8 @@
import 'package:firebase_core/firebase_core.dart';
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:sentry_flutter/sentry_flutter.dart';
import 'package:solian/firebase_options.dart';
import 'package:solian/providers/account.dart';
import 'package:solian/providers/auth.dart';
import 'package:solian/providers/chat.dart';
@ -15,6 +17,12 @@ import 'package:solian/theme.dart';
import 'package:solian/translations.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
await Firebase.initializeApp(
options: DefaultFirebaseOptions.currentPlatform,
);
await SentryFlutter.init(
(options) {
options.dsn =

View File

@ -2,8 +2,10 @@ import 'dart:convert';
import 'dart:io';
import 'dart:math' as math;
import 'package:firebase_messaging/firebase_messaging.dart';
import 'package:get/get.dart';
import 'package:permission_handler/permission_handler.dart';
import 'package:platform_device_id/platform_device_id.dart';
import 'package:solian/models/notification.dart';
import 'package:solian/models/packet.dart';
import 'package:solian/models/pagination.dart';
@ -165,4 +167,23 @@ class AccountProvider extends GetxController {
}
}
}
Future<void> registerPushNotifications() async {
final AuthProvider auth = Get.find();
if (!await auth.isAuthorized) throw Exception('unauthorized');
final deviceUuid = await PlatformDeviceId.getDeviceId;
final token = await FirebaseMessaging.instance.setAutoInitEnabled(true);
final client = auth.configureClient(service: 'passport');
final resp = await client.post('/api/notifications/subtribe', {
'provider': 'firebase',
'device_token': token,
'device_id': deviceUuid,
});
if (resp.statusCode != 200) {
throw Exception(resp.bodyString);
}
}
}

View File

@ -141,6 +141,8 @@ class AuthProvider extends GetConnect {
storage.deleteAll();
}
// Data Layer
Response? _cachedUserProfileResponse;
Future<bool> get isAuthorized => storage.containsKey(key: 'auth_credentials');