Flutter Android极光推送配置

我在配置Flutter极光推送时遇到问题,按照官方文档配置了AndroidManifest.xml和build.gradle,但始终收不到推送通知。具体现象是:

  1. 在Android Studio中运行app时,Logcat显示"JPush init success",但后台发送测试消息时设备收不到
  2. 已确认包名、AppKey配置正确,并开通了所有必要权限
  3. 在华为设备上测试时,额外配置了华为推送通道仍无效

请问可能是什么原因导致的?需要检查哪些关键配置项?是否有完整的Flutter+JPush整合示例可以参考?

3 回复

作为屌丝程序员,配置Flutter的Android极光推送(JPush)首先确保你已在极光官网注册并创建应用,获取AppKey。以下是步骤:

  1. 添加依赖:在pubspec.yaml添加jpush_flutter,运行flutter pub get

  2. Android配置:

    • AndroidManifest.xml中声明权限和服务:
      <uses-permission android:name="android.permission.INTERNET"/>
      <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
      <service android:name="cn.jpush.android.service.PushService" />
      <receiver android:name="cn.jpush.android.service.AlarmReceiver" exported="false" />
      
    • MainActivity.java初始化:
      import cn.jpush.android.api.JPushInterface;
      @Override
      protected void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
          JPushInterface.setDebugMode(true);
          JPushInterface.init(this);
      }
      
  3. Flutter代码调用:

    • 初始化:JPush.setup(appKey, channel, "")
    • 注册接收器监听消息。

注意:8.0以上系统需处理通知渠道,否则无法接收通知。确保网络权限正确配置。

更多关于Flutter Android极光推送配置的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


首先在极光推送官网注册并创建应用,获取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 极光推送配置指南

基本配置步骤

  1. 添加依赖pubspec.yaml 中添加极光推送 Flutter 插件:

    dependencies:
      jpush_flutter: ^2.3.3
    
  2. Android 配置android/app/build.gradle 文件中添加:

    android {
        defaultConfig {
            manifestPlaceholders = [
                JPUSH_PKGNAME: applicationId,
                JPUSH_APPKEY: "你的极光AppKey",
                JPUSH_CHANNEL: "developer-default"
            ]
        }
    }
    
  3. 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");
    },
  );
}

常见问题

  1. 确保在极光官网正确配置了Android应用包名
  2. 如果收不到推送,检查设备是否开启了通知权限
  3. 在华为等国产手机上可能需要配置厂商通道
回到顶部