我正在将Flutter与OneSignal一起使用。当应用打开或在后台运行时,所有配置和处理程序均按预期工作。但关闭时不行。 如果应用程序已关闭,我会收到通知,但是当我点击它们时,应用程序会打开,但没有附加参数,也不会触发与通知接收相关的事件处理程序。
我一直想知道我的单信号初始化脚本是否放错了地方。 我想知道是否还有其他人遇到过同样的问题。因为我找不到任何相关的问题。
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}');
}
}
}
push-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);
}
}