Как открыть уведомление, когда приложение закрыто [Flutter] [OneSignal] - PullRequest
1 голос
/ 08 января 2020

Я использую 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);
  }
}
...