Flutter Android极光推送配置
我在配置Flutter极光推送时遇到问题,按照官方文档配置了AndroidManifest.xml和build.gradle,但始终收不到推送通知。具体现象是:
- 在Android Studio中运行app时,Logcat显示"JPush init success",但后台发送测试消息时设备收不到
- 已确认包名、AppKey配置正确,并开通了所有必要权限
- 在华为设备上测试时,额外配置了华为推送通道仍无效
请问可能是什么原因导致的?需要检查哪些关键配置项?是否有完整的Flutter+JPush整合示例可以参考?
3 回复
首先在极光推送官网注册并创建应用,获取AppKey。接着在Flutter项目中添加jpush_flutter
插件。
在Android的build.gradle
中加入JPush SDK依赖,并确保minSdkVersion >= 16
。修改AndroidManifest.xml
,添加权限和接收器:
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.RECEIVE_APN_PUSH" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
<application>
<service android:name="cn.jpush.android.service.PushService" />
<receiver android:name="cn.jpush.android.service.JPushReceiver"
android:exported="false">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="${applicationId}" />
</intent-filter>
</receiver>
</application>
然后在代码中初始化推送服务:
import 'package:jpush_flutter/jpush_flutter.dart';
final JPush jpush = JPush();
void setupPush() {
jpush.setup(
appKey: "your_jiguang_app_key",
channel: "developer-default",
production: false,
);
jpush.addEventHandler(
onReceiveNotification: (Map<String, dynamic> message) async {
print(message);
},
onOpenNotification: (Map<String, dynamic> message) async {
print(message);
},
);
}
最后别忘了测试推送功能是否正常工作。
Flutter Android 极光推送配置指南
基本配置步骤
-
添加依赖 在
pubspec.yaml
中添加极光推送 Flutter 插件:dependencies: jpush_flutter: ^2.3.3
-
Android 配置 在
android/app/build.gradle
文件中添加:android { defaultConfig { manifestPlaceholders = [ JPUSH_PKGNAME: applicationId, JPUSH_APPKEY: "你的极光AppKey", JPUSH_CHANNEL: "developer-default" ] } }
-
AndroidManifest.xml 配置 在
android/app/src/main/AndroidManifest.xml
中添加权限和接收器:<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STSTORAGE" /> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.WAKE_LOCK" /> <uses-permission android:name="android.permission.RECEIVE_USER_PRESENT" /> <application> <receiver android:name="cn.jpush.android.service.PushReceiver" android:enabled="true"> <intent-filter> <action android:name="cn.jpush.android.intent.REGISTRATION" /> <action android:name="cn.jpush.android.intent.MESSAGE_RECEIVED" /> <action android:name="cn.jpush.android.intent.NOTIFICATION_RECEIVED" /> <action android:name="cn.jpush.android.intent.NOTIFICATION_OPENED" /> </intent-filter> </receiver> </application>
初始化代码
import 'package:jpush_flutter/jpush_flutter.dart';
final JPush jpush = JPush();
void initJPush() async {
await jpush.setup(
appKey: "你的AppKey",
channel: "developer-default",
production: false, // 是否为生产环境
debug: true, // 设置是否打印debug日志
);
// 获取注册ID
jpush.getRegistrationID().then((rid) {
print("Registration ID: $rid");
});
// 监听通知点击事件
jpush.addEventHandler(
onReceiveNotification: (Map<String, dynamic> message) async {
print("收到推送通知: $message");
},
onOpenNotification: (Map<String, dynamic> message) async {
print("点击通知打开应用: $message");
},
);
}
常见问题
- 确保在极光官网正确配置了Android应用包名
- 如果收不到推送,检查设备是否开启了通知权限
- 在华为等国产手机上可能需要配置厂商通道