Flutter iOS极光推送角标设置

在Flutter项目中集成极光推送时,iOS端的角标设置遇到问题:

  1. 收到推送后应用角标未自动更新,即使payload中包含"badge"字段
  2. 尝试使用flutter_jpush插件中的setBadge方法手动设置,但角标仍不变化
  3. 在AppDelegate.swift中添加了JPUSHService.setBadge()相关代码,依然无效
  4. 测试环境:Flutter 3.7、jpush_flutter_plugin 2.8.0、Xcode14.2
  5. 是否需要在iOS原生端额外配置?正确的角标设置流程应该是怎样的?
3 回复

在Flutter中使用极光推送(JPush)设置iOS应用角标,可以通过原生代码实现。首先确保已集成JPush插件。然后,在AppDelegate.m中调用JPush的设置角标方法:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    [[JPUSHService sharedInstance] setApplicationIconBadgeNumber:0]; // 设置初始角标为0
    return YES;
}

在Flutter端,通过MethodChannel调用此原生方法即可动态设置角标值。例如:

import 'package:flutter/services.dart';

class JPushManager {
  static const MethodChannel _channel = MethodChannel('jpush_manager');

  static Future<void> setBadge(int badge) async {
    await _channel.invokeMethod('setBadge', {'badge': badge});
  }
}

记得在iOS工程中配置好推送权限及APNs证书。完成后,调用JPushManager.setBadge(5)即可将角标设置为5。

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


作为屌丝程序员,我来告诉你如何在Flutter中设置iOS的极光推送角标。

首先确保你已经集成了极光推送插件,比如jpush_flutter。然后在iOS端设置角标可以通过原生代码实现:

  1. 打开Xcode项目中的AppDelegate.m文件,在didFinishLaunchingWithOptions方法里添加:
[[JPUSHService sharedInstance] setApplicationIconBadgeNumber:0];

这会将角标清零。

  1. 在需要设置角标的Flutter代码中使用methodChannel调用原生方法:
const platform = MethodChannel('flutter/jpush');
await platform.invokeMethod('setBadge', {'badge': 5});
  1. 对应在原生iOS端处理这个方法:
- (void)setBadge:(int)badge {
    [[UIApplication sharedApplication] setApplicationIconBadgeNumber:badge];
}

这样就可以实现动态设置iOS推送角标了。记得在应用退出时也要清零角标,避免用户看到不准确的数字。

在Flutter中设置iOS的极光推送角标(Badge),可以通过以下步骤实现:

  1. 首先确保已集成极光推送SDK,在pubspec.yaml中添加:
dependencies:
  jpush_flutter: ^版本号
  1. 初始化时设置角标功能:
import 'package:jpush_flutter/jpush_flutter.dart';

JPush jpush = JPush();

// 初始化
jpush.setup(
  appKey: "你的AppKey",
  channel: "developer-default",
  production: false, // 是否生产环境
);
jpush.applyPushAuthority(); // 申请推送权限
  1. 设置/修改角标数量:
// 设置角标数量
jpush.setBadge(5).then((_) {
  print("角标设置成功");
});

// 清除角标
jpush.setBadge(0).then((_) {
  print("角标已清除");
});
  1. 在iOS原生端需要配置: 在AppDelegate.swift中添加:
// 在didFinishLaunchingWithOptions中
JPUSHService.setBadge(0) // 初始化时清除角标

注意事项:

  1. 需要在Xcode中开启推送权限
  2. 角标设置必须在主线程执行
  3. 后台运行时收到推送会自动更新角标
  4. 测试时请使用真实iOS设备,模拟器不支持

如需更多功能如本地角标管理,可以配合flutter_local_notifications插件使用。

回到顶部