如何在flutter中实现推送通知

时间:2017-10-05 06:08:16

标签: dart flutter

您好我正在尝试实施推送通知,如何显示为通知可以任何一个帮助,我能听,因为我收到通知但我无法看到消息,它显示为警报,但我希望作为通知可以任何一个帮助,在Android或iOS中我们应该在清单文件和应用程序委托文件中如何在flutter中

我的代码看起来像这样

 class PushMessagingExample extends StatefulWidget {
 @override
 _PushMessagingExampleState createState() => new _PushMessagingExampleState();
 }

class _PushMessagingExampleState extends State<PushMessagingExample> {
String _homeScreenText = "Waiting for token...";
bool _topicButtonsDisabled = false;

final FirebaseMessaging _firebaseMessaging = new FirebaseMessaging();
final TextEditingController _topicController =
new TextEditingController(text: 'topic');

Future<Null> _showItemDialog(Map<String, dynamic> message) async {
final Item item = _itemForMessage(message);
showDialog<Null>(
    context: context,
    child: new AlertDialog(
      content: new Text("Item ${message} has been updated"),
      actions: <Widget>[
        new FlatButton(
            child: const Text('CLOSE'),
            onPressed: () {
              Navigator.pop(context, false);
            }),
        new FlatButton(
            child: const Text('SHOW'),
            onPressed: () {
              Navigator.pop(context, true);
            }),
      ],
    )).then((bool shouldNavigate) {
  if (shouldNavigate == true) {
    _navigateToItemDetail(message);
  }
});
}

 Future<Null> _navigateToItemDetail(Map<String, dynamic> message) async     {
final Item item = _itemForMessage(message);
// Clear away dialogs
Navigator.popUntil(context, (Route<dynamic> route) => route is PageRoute);
if (!item.route.isCurrent) {
  Navigator.push(context, item.route);
}
}

  @override
 void initState() {
  super.initState();
_firebaseMessaging.configure(
  onMessage: (Map<String, dynamic> message) {
    print("onMessage: $message");
    print(message);
    _showItemDialog(message);
  },
  onLaunch: (Map<String, dynamic> message) {
    print("onLaunch: $message");
    print(message);
    _navigateToItemDetail(message);
  },
  onResume: (Map<String, dynamic> message) {
    print("onResume: $message");
    print(message);
    _navigateToItemDetail(message);
  },
);
_firebaseMessaging.requestNotificationPermissions(
    const IosNotificationSettings(sound: true, badge: true, alert: true));
_firebaseMessaging.onIosSettingsRegistered
    .listen((IosNotificationSettings settings) {
  print("Settings registered: $settings");
});
_firebaseMessaging.getToken().then((String token) {
  assert(token != null);
  setState(() {
    _homeScreenText = "Push Messaging token: $token";
  });
  print(_homeScreenText);
});
}

@override
Widget build(BuildContext context) {
return new Scaffold(


    body: new Material(
      child: new Column(
        children: <Widget>[
          new Center(
            child: new Text(_homeScreenText),
          ),

        ],
      ),
    ));
  }

  }

5 个答案:

答案 0 :(得分:5)

在Flutter中推送通知可能特别困难,因为要使其与Android&iOS的特定实现(当然两者都完全不同)一起使用,您必须做两次工作。

我一直在构建用于抖动的OneSignal SDK。几天之内就可以准备好了。我们尽最大努力简化推送通知,并且以符合GDPR的方式轻松使用我们的SDK。

回购在这里(https://github.com/OneSignal/OneSignal-Flutter-SDK),它是开源的,我们欢迎任何人的贡献。它充当原生Android和iOS OneSignal SDK的包装。

答案 1 :(得分:3)

如果您尝试将信息放在锁定屏幕上,请务必发送&#34;通知&#34;消息类型,而不是&#34;数据&#34;将传递给正在运行的应用程序的消息。您可以在Firebase开发者指南中了解有关different types of Firebase messages的更多信息。

答案 2 :(得分:1)


1。添加依赖性

我们使用名为firebase_messaging ...的插件来发送推送通知。

https://pub.dev/packages/firebase_messaging

打开您的pubspec.yaml文件并添加此依赖项

依赖性: firebase_messaging:^ 6.0.9


2。 Firebase帐户

在继续操作之前,请确保您具有Firebase帐户。
在下一步中,您应该可以下载 google-services.json 文件。

下载文件后,请确保将其复制到Android项目的app /文件夹中。


3。 Android清单

添加

<intent-filter>
  <action android:name="FLUTTER_NOTIFICATION_CLICK" />
  <category android:name="android.intent.category.DEFAULT" />
</intent-filter>

将这些行添加到[project] /android/build.gradle

dependencies {
    classpath 'com.android.tools.build:gradle:4.0.0'
    classpath 'com.google.gms:google-services:4.3.3'
}



将这些行添加到[project] /android/app/build.gradle

 dependencies {
   implementation fileTree(dir: "libs", include: ["*.jar"])
   implementation 'androidx.appcompat:appcompat:1.1.0'
   implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
   implementation 'com.google.firebase:firebase-messaging:20.2.3'
   implementation 'com.google.firebase:firebase-analytics:17.4.4'

   // Add the SDK for Firebase Cloud Messaging
   testImplementation 'junit:junit:4.12'
   androidTestImplementation 'androidx.test.ext:junit:1.1.1'
   androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'

 }


 apply plugin: 'com.google.gms.google-services'

完成

答案 3 :(得分:1)

让我给你最突出的使用 Flutter 推送通知的解决方案,这是我今天遇到的,它是,locally 它是 samuelezedi.com 的一个包,它发送本地通知.安排它,最好的部分是它不需要像我们总是做的太多设置 flutter_local_notification 人们在使用它后失去他们的 Strands ?,它是如此复杂而且不适合初学者,所以我们找到了 {{1} } 本地会帮助你。

发送本地推送通知

locally

看看这是多么容易发送推送通知,

发送本地预定通知

使用 Locally locally = Locally( context: context, payload: 'test', pageRoute: null, //Link to which page you want to open appIcon: 'mipmap/ic_launcher', //Icon of your app, in android>app>src>main>res>drawable-v21 I put my png Icon.. ); locally.show(title: "Remaindero to use Toodolee", message: "Hey do this work"); 代替 .show 这将有助于您安排时间

.schedule

他们的文档非常好,非常棒,像我这样的新手可以很好地理解它,我在这里找不到的一件事是对自定义声音的支持。

这是文档的链接。 https://pub.dev/packages/locally

非常感谢

答案 4 :(得分:-3)

您使用的FCM很好,对于Android来说,只要遵循食谱就不应该成为问题,这会很好,真正的挑战在于iOS,因为您需要先创建密钥,然后再获得推送证书通知,将其添加到podfile中并在xcode中激活它。使用这些链接可获取更多信息:herethis one