Я использую Flutter с OneSignal. Все конфиги и обработчики работают как положено, когда приложение открыто или в фоновом режиме. Но не тогда, когда закрыто. Я получаю уведомления, если приложение закрыто, но когда я нажимаю на них, приложение открывается, но без прикрепленных параметров и не вызывает обработчики событий, связанные с получением уведомления.
Мне было интересно, есть ли мой скрипт инициализации oneignal неуместно. И я хотел знать, страдает ли кто-то еще от той же проблемы. Потому что я не могу найти ни одной связанной проблемы.
class FonixTelematicsApp extends StatefulWidget {
@override
_FonixTelematicsAppState createState() => _FonixTelematicsAppState();
}
class _FonixTelematicsAppState extends State<FonixTelematicsApp> {
@override
void initState() {
super.initState();
initPlatformState();
}
Future<void> initPlatformState() async {
if (!mounted) return;
await pushService.init();
eventBus.on<AppPushOpenEvent>().listen(
(AppPushOpenEvent event) => onAppPushNotification(event.notification));
}
onAppPushNotification(OSNotification notification) {
var data = notification.payload.additionalData;
Map<String, dynamic> pages = {
'alarm': (Map<dynamic, dynamic> alert) {
Map<String, dynamic> alertData = {'id': alert['id']};
return {
'route': Routes.alertDetails,
'arguments': new AlertDetailsPageArguments(
alert: Alert.fromJson(alertData), isPushNotification: true)
};
},
'auth': (Map<dynamic, dynamic> properties) {
return {
'route': Routes.auth,
'arguments': new AuthPageArguments(key: properties['key'])
};
}
};
if (pages[data['page']] != null) {
Map<dynamic, dynamic> pageData = data['data'];
Map<String, dynamic> page = pages[data['page']](pageData);
debugPrint('Will push new page! ${page.toString()}');
navigatorKey.currentState
.pushNamed(page['route'], arguments: page['arguments']);
} else {
debugPrint(
'onAppPushNotification: unrecognized payload ${notification.payload}');
}
}
}
pu sh -service.dart
class PushService extends BasePushService {
Future<void> init() async {
// OneSignal.shared.setLogLevel(OSLogLevel.verbose, OSLogLevel.none);
OneSignal.shared.setNotificationReceivedHandler((OSNotification notification) {
var data = notification.payload.additionalData;
if (data['page'] == 'auth') {
eventBus.fire(AppPushOpenEvent(notification));
}
});
OneSignal.shared.setNotificationOpenedHandler((data) {
eventBus.fire(AppPushOpenEvent(data.notification));
});
OneSignal.shared
.setInAppMessageClickedHandler((OSInAppMessageAction action) {
print(action);
});
OneSignal.shared
.setSubscriptionObserver((OSSubscriptionStateChanges changes) {
print("SUBSCRIPTION STATE CHANGED: ${changes.jsonRepresentation()}");
_subscriptionObserver(changes);
});
OneSignal.shared.setPermissionObserver((OSPermissionStateChanges changes) {
debugPrint("PERMISSION STATE CHANGED: ${changes.jsonRepresentation()}");
});
await OneSignal.shared
.init("xxxx-xxxx-xxxx-xxxxx", iOSSettings: {
OSiOSSettings.autoPrompt: true,
OSiOSSettings.inAppLaunchUrl: true,
OSiOSSettings.promptBeforeOpeningPushUrl: false
});
OneSignal.shared
.setInFocusDisplayType(OSNotificationDisplayType.notification);
}
}