应用程序关闭时的 Onesignal 通知颤动

时间:2021-01-21 03:54:54

标签: flutter dart onesignal

如何在应用程序关闭时发送 onesignal 通知?当应用程序打开时没有问题。该应用完全被用户关闭,而不是在后台运行的应用。

我提供了我的代码以供审核: 我是新手,所以不确定它是如何工作的,尤其是推送通知

import 'dart:async';
import 'dart:io';
import 'package:flutter/material.dart';
import 'package:connectivity/connectivity.dart';
import 'package:flutter_inappwebview/flutter_inappwebview.dart';
import 'package:onesignal_flutter/onesignal_flutter.dart';

Future main() async {
  runApp(new MyApp());
}

class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => new _MyAppState();
}

class _MyAppState extends State<MyApp> {
  String _outputText = "";
  @override
  void initState() {
    super.initState();
    initOneSignal();
  }

  @override
  void dispose() {
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
        home: IndexedStack(
      index: 0,
      children: <Widget>[
        InAppWebViewPage(),
        Container(
          child: Text(_outputText),
        )
      ],
    ));
  }

  Future<void> initOneSignal() async {
    await OneSignal.shared
        .init("xxxxxxxx-xxxxxxxxxx", iOSSettings: null);
    OneSignal.shared
        .setInFocusDisplayType(OSNotificationDisplayType.notification);
    OneSignal.shared
        .setNotificationReceivedHandler((OSNotification notification) {
      this.setState(() {
        _outputText =
            "Received notification: \n${notification.jsonRepresentation().replaceAll("\\n", "\n")}";
      });
    });
  }
}

class InAppWebViewPage extends StatefulWidget {
  @override
  _InAppWebViewPageState createState() => new _InAppWebViewPageState();
}

class _InAppWebViewPageState extends State<InAppWebViewPage> {
  InAppWebViewController webView;
  int _page = 2;
  bool _loadError = false;
  StreamSubscription<ConnectivityResult> subscription;

  @override
  initState() {
    super.initState();
    subscription = Connectivity()
        .onConnectivityChanged
        .listen((ConnectivityResult result) {
      if (result != ConnectivityResult.none && webView != null) {
        print("reload");
        _loadError = false;
        webView.reload();
      }
    });
  }

  @override
  dispose() {
    super.dispose();
    subscription.cancel();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: IndexedStack(
        index: _page,
        children: <Widget>[
          Padding(
            padding: const EdgeInsets.only(top: 20.0),
            child: InAppWebView(
              initialUrl: "https://flutter.dev/",
              initialHeaders: {},
              initialOptions: InAppWebViewGroupOptions(
                crossPlatform: InAppWebViewOptions(
                  clearCache: true,
                  debuggingEnabled: true,
                ),
              ),
              onWebViewCreated: (InAppWebViewController controller) {
                webView = controller;
              },
              onLoadStart: (InAppWebViewController controller, String url) {},
              onLoadStop: (InAppWebViewController controller, String url) {
                print(url);
                setState(() {
                  if (!_loadError) {
                    _page = 0;
                  } else {
                    _page = 1;
                  }
                });
              },
              onLoadError: (InAppWebViewController controller, String url,
                  int code, String message) async {
                print("error $url: $code, $message");
                _loadError = true;
              },
              onLoadHttpError: (InAppWebViewController controller, String url,
                  int statusCode, String description) async {
                print("HTTP error $url: $statusCode, $description");
              },
            ),
          ),
          (Platform.isAndroid)
              ? Container(
                  child: Text("My custom error message"),
                )
              : Container(
                  decoration: BoxDecoration(
                  image: DecorationImage(
                    image: AssetImage('assets/images/splash.png'),
                    fit: BoxFit.fill,
                  ),
                )),
          Container(
              color: Colors.transparent,
              decoration: BoxDecoration(
                image: DecorationImage(
                  image: ExactAssetImage('assets/images/splash.png'),
                  fit: BoxFit.fill,
                ),
              )),
        ],
      ),
    );
  }
}

感谢任何帮助。提前致谢

1 个答案:

答案 0 :(得分:0)

确保您正确遵循 Flutter SDK 设置 https://documentation.onesignal.com/docs/flutter-sdk-setup