add sentry
This commit is contained in:
@@ -4,12 +4,16 @@ import 'package:onesignal_flutter/onesignal_flutter.dart';
|
||||
/// OneSignal service for managing push notifications and external user ID.
|
||||
///
|
||||
/// This service handles:
|
||||
/// - Initializing OneSignal SDK
|
||||
/// - Setting external user ID after login (using phone number)
|
||||
/// - Restoring external user ID on app startup
|
||||
/// - Clearing external user ID on logout
|
||||
///
|
||||
/// Usage:
|
||||
/// ```dart
|
||||
/// // Initialize in main.dart
|
||||
/// await OneSignalService.init(appId: 'your-app-id');
|
||||
///
|
||||
/// // After successful login
|
||||
/// await OneSignalService.login(phoneNumber);
|
||||
///
|
||||
@@ -19,6 +23,78 @@ import 'package:onesignal_flutter/onesignal_flutter.dart';
|
||||
class OneSignalService {
|
||||
OneSignalService._();
|
||||
|
||||
/// OneSignal App ID - Replace with your actual App ID from OneSignal dashboard
|
||||
static const String _defaultAppId = '778ca22d-c719-4ec8-86cb-a6b911166066';
|
||||
|
||||
/// Initialize OneSignal SDK
|
||||
///
|
||||
/// Must be called before using any other OneSignal methods.
|
||||
/// Sets up push subscription observers and requests notification permission.
|
||||
///
|
||||
/// [appId] - Optional App ID override (uses default if not provided)
|
||||
/// [requestPermission] - Whether to request notification permission (default: true)
|
||||
static Future<void> init({
|
||||
String? appId,
|
||||
bool requestPermission = true,
|
||||
}) async {
|
||||
try {
|
||||
// Set debug log level (verbose in debug, none in release)
|
||||
OneSignal.Debug.setLogLevel(kDebugMode ? OSLogLevel.verbose : OSLogLevel.none);
|
||||
|
||||
// Initialize with App ID
|
||||
OneSignal.initialize(appId ?? _defaultAppId);
|
||||
debugPrint('🔔 OneSignal initialized');
|
||||
|
||||
// Add push subscription observer to track subscription state changes
|
||||
OneSignal.User.pushSubscription.addObserver((state) {
|
||||
debugPrint('🔔 Push subscription state changed:');
|
||||
debugPrint(' Previous - optedIn: ${state.previous.optedIn}, id: ${state.previous.id}');
|
||||
debugPrint(' Current - optedIn: ${state.current.optedIn}, id: ${state.current.id}');
|
||||
debugPrint(' Subscription ID: ${state.current.id}');
|
||||
debugPrint(' Push Token: ${state.current.token}');
|
||||
|
||||
if (state.current.id != null) {
|
||||
debugPrint('🔔 ✅ Device successfully subscribed!');
|
||||
}
|
||||
});
|
||||
|
||||
// Add notification permission observer
|
||||
OneSignal.Notifications.addPermissionObserver((isGranted) {
|
||||
debugPrint('🔔 Notification permission changed: $isGranted');
|
||||
});
|
||||
|
||||
// Request permission if enabled
|
||||
if (requestPermission) {
|
||||
final accepted = await OneSignal.Notifications.requestPermission(true);
|
||||
debugPrint('🔔 Permission request result: $accepted');
|
||||
}
|
||||
|
||||
// Give OneSignal SDK time to complete initialization and server registration
|
||||
await Future<void>.delayed(const Duration(seconds: 2));
|
||||
|
||||
// Log current subscription status
|
||||
_logSubscriptionStatus();
|
||||
} catch (e) {
|
||||
debugPrint('🔔 OneSignal error: Failed to initialize - $e');
|
||||
}
|
||||
}
|
||||
|
||||
/// Log current subscription status for debugging
|
||||
static void _logSubscriptionStatus() {
|
||||
final optedIn = OneSignal.User.pushSubscription.optedIn;
|
||||
final id = OneSignal.User.pushSubscription.id;
|
||||
final token = OneSignal.User.pushSubscription.token;
|
||||
|
||||
debugPrint('🔔 Current subscription status:');
|
||||
debugPrint(' Opted In: $optedIn');
|
||||
debugPrint(' Subscription ID: $id');
|
||||
debugPrint(' Push Token: $token');
|
||||
|
||||
if (id == null) {
|
||||
debugPrint('🔔 ⚠️ Subscription ID is null - check device connectivity and OneSignal app ID');
|
||||
}
|
||||
}
|
||||
|
||||
/// Login user to OneSignal by setting external user ID.
|
||||
///
|
||||
/// This associates the device with the user's phone number,
|
||||
|
||||
Reference in New Issue
Block a user