应用关闭时如何打开通知[Flutter] [OneSignal]

时间:2020-01-08 14:20:14

标签: android flutter dart onesignal

我正在将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);
  }
}

0 个答案:

没有答案
相关问题