返回

告别后台推送烦恼:Flutter x 极光,打造流畅 App 推送体验

前端

前言

在移动应用开发中,推送通知扮演着至关重要的角色,它可以有效地触达用户,传递重要信息和更新。然而,对于第三方应用来说,平台限制往往会成为一道障碍,导致关闭 App 后无法进行后台推送。

本文将以 Flutter 为例,结合极光推送 SDK,为您提供一份详细的指南,帮助您克服第三方推送限制,打造流畅的 App 推送体验。

前台推送:让信息触手可及

首先,让我们从最基本的开始——前台推送。这是一种无需用户授权即可在 App 前台显示通知的方式,非常适合传递及时信息或提醒。

步骤 1:引入极光推送 SDK

在您的 Flutter 项目中引入极光推送 SDK:

dependencies:
  jpush_flutter: ^4.2.0

步骤 2:初始化 SDK

main.dart 文件中初始化极光推送 SDK:

import 'package:jpush_flutter/jpush_flutter.dart';

void main() async {
  // ...

  // 初始化极光推送 SDK
  JPushFlutter.setup(appKey, channel);

  // ...
}

步骤 3:监听推送事件

注册推送事件监听器,以便在收到推送通知时触发回调:

JPushFlutter.addReceiveNotificationListener((JPushNotification notification) {});

关闭 App 后台推送:突破第三方限制

现在,我们已经掌握了前台推送,但真正的挑战在于如何突破第三方限制,在关闭 App 后继续推送。

步骤 1:请求用户授权

为了在关闭 App 后进行后台推送,我们需要请求用户的授权。在 Flutter 中,可以使用 user_permissions 插件:

import 'package:user_permissions/user_permissions.dart';

Future<void> requestNotificationPermission() async {
  PermissionStatus status = await UserPermissions.getNotificationPermissionStatus();
  if (status != PermissionStatus.authorized) {
    PermissionStatus result = await UserPermissions.requestNotificationPermission();
    if (result == PermissionStatus.authorized) {
      // 用户已授权
    }
  }
}

步骤 2:启用极光后台推送

在获得用户授权后,我们可以启用极光推送后台推送功能:

JPushFlutter.enableBackgroundPush();

步骤 3:处理后台推送

要处理后台推送,我们需要在 AppDelegate(iOS)或 MainActivity(Android)中实现方法:

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler {
  // ...
}
@Override
public void onMessageReceived(Context context, Intent intent) {
  // ...
}

实例实战:信息推送与实时更新

让我们通过一个实例来巩固我们的知识。假设我们正在开发一个电商应用,需要在用户下单后推送订单状态更新。

实时更新前台推送

当用户下单后,我们可以通过前台推送立即通知他们订单状态:

// 在下单成功后发送推送
JPushFlutter.sendLocalNotification(
  notificationID: 12345,
  title: '订单状态更新',
  content: '您的订单已成功下单,订单号:12345',
);

订单状态后台推送

为了在关闭 App 后继续推送订单状态更新,我们需要使用后台推送。假设用户在关闭 App 后收到了一条新订单状态更新:

// 订单状态已更新
{
  "orderID": "12345",
  "status": "已发货"
}

我们可以在 didReceiveRemoteNotificationonMessageReceived 方法中处理这条消息,并通过本地推送通知用户:

JPushFlutter.sendLocalNotification(
  notificationID: 12346,
  title: '订单状态更新',
  content: '您的订单已发货,订单号:12345',
);

总结

通过本文提供的指南,您可以轻松实现 Flutter 中的第三方厂商推送,并突破关闭 App 后台推送的限制。这将极大地提升您的 App 用户体验,确保重要信息和更新始终能够触达用户。

在移动开发中,持续探索和创新至关重要。希望本文能为您提供宝贵的经验,助力您打造更加完善和用户友好的 App。