flutter 极光推送配置流程(极光通道/华为厂商/IOS)

这篇具有很好参考价值的文章主要介绍了flutter 极光推送配置流程(极光通道/华为厂商/IOS)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

极光推送配置流程

极光通道(在线)

配置时间 2024年3月11日

创建应用

极光推送厂商通道,flutter,flutter,华为,ios
应用列表 - 创建应用
极光推送厂商通道,flutter,flutter,华为,ios
Android - 选中消息推送 - 下一步

创建Flutter项目
极光推送厂商通道,flutter,flutter,华为,ios
填写包名
极光推送厂商通道,flutter,flutter,华为,ios

创建完成
极光推送厂商通道,flutter,flutter,华为,ios

项目配置

运行命令行 flutter pub add jpush_flutter
极光推送厂商通道,flutter,flutter,华为,ios

Android -> app -> build.gradle 更改JPUSH_APPKEY的值
极光推送厂商通道,flutter,flutter,华为,ios
极光推送厂商通道,flutter,flutter,华为,ios

工具类注册JPush Android

import 'package:flutter/services.dart';
import 'package:get/get.dart';
import 'package:jpush_flutter/jpush_flutter.dart';

class JPushUtil {
  JPushUtil._internal();

  static final _instance = JPushUtil._internal();

  factory JPushUtil() => _instance;

  final JPush jPush = JPush();

  Future<void> initPlatformState() async {
    String? platformVersion;
    try {
      jPush.addEventHandler(
        onReceiveNotification: (message) async {
          print("flutter onReceiveNotification: $message");
        },
        onOpenNotification: (message) async {
          print("flutter onOpenNotification: $message");
        },
        onReceiveMessage: (message) async {
          print("flutter onReceiveMessage: $message");
        },
        onReceiveNotificationAuthorization: (message) async {
          print("flutter onReceiveNotificationAuthorization: $message");
        },
        onConnected: (message) {
          print("flutter onConnected: $message");
          return Future(() => null);
        },
      );
    } on PlatformException {
      platformVersion = 'Failed to get platform version.';
      print(platformVersion);
    }
    jPush.isNotificationEnabled().then((bool value) {
      print("通知授权是否打开: $value");
      if (!value) {
        Get.snackbar(
          "提示",
          "没有通知权限,点击跳转打开通知设置界面",
          duration: const Duration(seconds: 6),
          onTap: (_) {
            jPush.openSettingsForNotification();
          },
        );
      }
    }).catchError((onError) {
      print("通知授权是否打开: ${onError.toString()}");
    });

    jPush.enableAutoWakeup(enable: true);
    jPush.setup(
      appKey: '7f684a39ff1f95ef1657acdd',
      production: true,
      debug: true,
    );
    jPush.applyPushAuthority(
      const NotificationSettingsIOS(
        sound: true,
        alert: true,
        badge: true,
      ),
    );
    final rid = await jPush.getRegistrationID();
    print("flutter getRegistrationID: $rid");
  }

  setAlias(String aliasStr) {
    final alias = jPush.setAlias(aliasStr);
    print("Alias is $alias");
  }
}

main.dart

import 'package:demonstration_project/jPushUtil.dart';
import 'package:flutter/material.dart';
import 'package:get/get.dart';

void main() {
  runApp(const MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  // This widget is the root of your application.
  
  Widget build(BuildContext context) {
    return GetMaterialApp(
      title: 'Flutter 极光推送',
      home: HomePage(),
    );
  }
}

class HomePage extends StatefulWidget {
  
  State<HomePage> createState() => _HomePageState();
}

class _HomePageState extends State<HomePage> {
  
  void initState() {
    JPushUtil().initPlatformState();
    super.initState();
  }

  
  Widget build(BuildContext context) {
    return const Scaffold(
      body: Center(
        child: Text("极光推送配置"),
      ),
    );
  }
}

运行项目

运行项目在Android端,有getRegistrationID,则注册成功
极光推送厂商通道,flutter,flutter,华为,ios

测试接收推送之前,先打开接收通知的权限
极光推送厂商通道,flutter,flutter,华为,ios

在极光平台检测集成
极光推送厂商通道,flutter,flutter,华为,ios

推送消息

平台推送

直接在平台客户端输入对应的数值来推送消息
极光推送厂商通道,flutter,flutter,华为,ios
极光推送厂商通道,flutter,flutter,华为,ios
注:当APP被杀死后,极光通道的推送就不能及时收到了,所以要配置厂商通道

推送API

通过接口调用推送

厂商通道(华为)

创建项目 创建应用

应用服务 - PUSH
极光推送厂商通道,flutter,flutter,华为,ios
极光推送厂商通道,flutter,flutter,华为,ios
继续
极光推送厂商通道,flutter,flutter,华为,ios
选择中国
极光推送厂商通道,flutter,flutter,华为,ios
开通推送服务
极光推送厂商通道,flutter,flutter,华为,ios
极光推送厂商通道,flutter,flutter,华为,ios
添加应用
极光推送厂商通道,flutter,flutter,华为,ios
输入相关信息
极光推送厂商通道,flutter,flutter,华为,ios
下载agconnect-services.json
极光推送厂商通道,flutter,flutter,华为,ios
放到应用级目录下
极光推送厂商通道,flutter,flutter,华为,ios

SHA256证书指纹

极光推送厂商通道,flutter,flutter,华为,ios

生成签名jks

生成签名文件的参考文档链接
极光推送厂商通道,flutter,flutter,华为,ios
创建新的Key
极光推送厂商通道,flutter,flutter,华为,ios
极光推送厂商通道,flutter,flutter,华为,ios
极光推送厂商通道,flutter,flutter,华为,ios
极光推送厂商通道,flutter,flutter,华为,ios
极光推送厂商通道,flutter,flutter,华为,ios

生成签名证书指纹

** keytool -list -v -keystore ./demostration_project_key.jks**
极光推送厂商通道,flutter,flutter,华为,ios

配置SHA256证书指纹

极光推送厂商通道,flutter,flutter,华为,ios

项目配置

若出现以下报错
极光推送厂商通道,flutter,flutter,华为,ios
修改Manifest.xml文件
极光推送厂商通道,flutter,flutter,华为,ios

修改android/build.gradle文件
极光推送厂商通道,flutter,flutter,华为,ios

buildscript {
    ext.kotlin_version = '1.9.0'
    repositories {
        google()
        mavenCentral()
        // 配置HMS Core SDK的Maven仓地址。
        maven { url 'https://developer.huawei.com/repo/' }
    }

    dependencies {
        classpath 'com.android.tools.build:gradle:7.1.3'
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
        classpath 'com.huawei.agconnect:agcp:1.6.0.300'
    }
}
allprojects {
    repositories {
        google()
        mavenCentral()
        maven { url 'https://developer.huawei.com/repo/' }
    }
}

若出现以下报错
极光推送厂商通道,flutter,flutter,华为,ios
那说明漏了配置AGC插件,参考相关链接
极光推送厂商通道,flutter,flutter,华为,ios
接着添加依赖
极光推送厂商通道,flutter,flutter,华为,ios

dependencies {
    // 极光推送  'cn.jiguang.sdk:jpush:5.2.3' 和 'cn.jiguang.sdk.plugin:huawei:5.2.3' 版本需一致
    implementation 'cn.jiguang.sdk:jpush:5.2.3'
    implementation 'com.huawei.agconnect:agconnect-core:1.8.1.300'
    implementation 'com.huawei.hms:push:6.12.0.300'
    implementation 'cn.jiguang.sdk.plugin:huawei:5.2.3' // 这里版本一定要和极光插件版本一致!!!
}

最后配置签名文件,若出现以下错误,就代表没有配置签名
极光推送厂商通道,flutter,flutter,华为,ios
极光推送厂商通道,flutter,flutter,华为,ios

    signingConfigs {
        debug {
            //keystore中key的别名
            keyAlias 'demo_key'
            //keystore中key的密码
            keyPassword '123456'
            //keystore的文件路径,可以是绝对路径也可以是相对路径
            storeFile file('../demostration_project_key.jks')
            //keystore的密码l
            storePassword '123456'
        }
    }

最后在极光平台厂商通道配置设置App ID 和App Secret,并启用
极光推送厂商通道,flutter,flutter,华为,ios

华为平台配置

极光推送厂商通道,flutter,flutter,华为,ios
回执配置参考链接
极光推送厂商通道,flutter,flutter,华为,ios
极光推送厂商通道,flutter,flutter,华为,ios
极光推送厂商通道,flutter,flutter,华为,ios
这里的自分类是华为控制滥发消息的,需要设置一下,参考链接
极光推送厂商通道,flutter,flutter,华为,ios
选一个要发的场景
极光推送厂商通道,flutter,flutter,华为,ios
填写信息,和场景相关的信息
极光推送厂商通道,flutter,flutter,华为,ios
极光推送厂商通道,flutter,flutter,华为,ios
激活功能
极光推送厂商通道,flutter,flutter,华为,ios
极光推送厂商通道,flutter,flutter,华为,ios
极光推送厂商通道,flutter,flutter,华为,ios

找一台华为手机来运行项目

若出现以下这句,就代表配置成功了
极光推送厂商通道,flutter,flutter,华为,ios
这里的检测会有延迟,真机测试能离线收到消息就ok
极光推送厂商通道,flutter,flutter,华为,ios

错误集锦

1、版本不一致

1、极光厂商插件版本和JPush版本不一致,即便输出huawei token,也是收不到离线消息的

    // 极光推送  'cn.jiguang.sdk:jpush:5.2.3' 和 'cn.jiguang.sdk.plugin:huawei:5.2.3' 版本需一致
    implementation 'cn.jiguang.sdk:jpush:5.2.3'
    // 华为
    implementation 'com.huawei.agconnect:agconnect-core:1.8.1.300'
    implementation 'com.huawei.hms:push:6.12.0.300'
    implementation 'cn.jiguang.sdk.plugin:huawei:5.2.3'

2、权限

网络权限记得加上

<uses-permission android:name="android.permission.INTERNET" />

Ios

官方配置参考链接

Push

极光推送厂商通道,flutter,flutter,华为,ios
极光推送厂商通道,flutter,flutter,华为,ios
极光推送厂商通道,flutter,flutter,华为,ios

Podfile

极光推送厂商通道,flutter,flutter,华为,ios

  pod 'JPush'
  pod 'JOperate'
  pod 'JCore'

终端 pod install
极光推送厂商通道,flutter,flutter,华为,ios

Token Authentication配置

极光推送厂商通道,flutter,flutter,华为,ios
developer.apple.com
极光推送厂商通道,flutter,flutter,华为,ios
后续步骤直接参考上面的链接,很详细
最后获取到的
极光推送厂商通道,flutter,flutter,华为,ios
极光推送厂商通道,flutter,flutter,华为,ios
极光推送厂商通道,flutter,flutter,华为,ios

运行项目

极光推送厂商通道,flutter,flutter,华为,ios
配置完成

推送API

推送API参考文档

鉴权方式

用冒号拼接appkey和masterSecret,并用base64加密该字符串,最终再拼上"Basic "

    final content = utf8.encode("$appKey:$masterSecret");
    String base64AuthString = "Basic ${base64Encode(content)}";

测试代码文章来源地址https://www.toymoban.com/news/detail-855204.html

import 'dart:convert';
import 'dart:io';

import 'package:dio/dio.dart';
import 'package:flutter/material.dart';

void main() {
  runApp(const MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  
  Widget build(BuildContext context) {
    return MaterialApp(
      title: '推送',
      theme: ThemeData(
        colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
        useMaterial3: true,
      ),
      home: const MyHomePage(title: '信息推送'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  const MyHomePage({super.key, required this.title});

  final String title;

  
  State<MyHomePage> createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  final String appKey = "XXX";
  final String masterSecret = "XXX";
  late String base64AuthString;
  final Dio dio = Dio();

  late String notificationAlert;
  late String notificationTitle;
  late String notificationAudienceAlias;

  
  void initState() {
    final content = utf8.encode("$appKey:$masterSecret");
    base64AuthString = "Basic ${base64Encode(content)}";
    super.initState();
  }

  
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        backgroundColor: Theme.of(context).colorScheme.inversePrimary,
        title: Text(widget.title),
      ),
      body: Center(
        child: Padding(
          padding: const EdgeInsets.all(8.0),
          child: ListView(
            children: [
              TextField(
                decoration: const InputDecoration(
                  labelText: "主标题",
                  hintText: "请输入...",
                ),
                onChanged: (s) {
                  notificationAlert = s;
                },
              ),
              TextField(
                decoration: const InputDecoration(
                  labelText: "副标题",
                  hintText: "请输入...",
                ),
                onChanged: (s) {
                  notificationTitle = s;
                },
              ),
              TextField(
                decoration: const InputDecoration(
                  labelText: "别名",
                  hintText: "请输入...",
                ),
                onChanged: (s) {
                  notificationAudienceAlias = s;
                },
              ),
              Padding(
                padding: const EdgeInsets.all(8.0),
                child: ElevatedButton(
                  onPressed: () {
                    showDialog(
                        context: context,
                        builder: (context) {
                          return SimpleDialog(
                            title: const Text("确定发送?"),
                            children: [
                              SimpleDialogOption(
                                child: const Text("确定"),
                                onPressed: () {
                                  pushMessage(
                                    notificationAlert: notificationAlert,
                                    notificationTitle: notificationTitle,
                                    notificationAudienceAlias: [
                                      notificationAudienceAlias
                                    ],
                                  );
                                  Navigator.of(context).pop();
                                },
                              ),
                              SimpleDialogOption(
                                child: const Text("取消"),
                                onPressed: () {
                                  Navigator.of(context).pop();
                                },
                              )
                            ],
                          );
                        });
                  },
                  child: const Text("推送消息"),
                ),
              ),
            ],
          ),
        ),
      ),
    );
  }

  /// 推送
  pushMessage({
    required String notificationAlert,
    required String notificationTitle,
    required List<String> notificationAudienceAlias,
  }) async {
    const String url = "https://api.jpush.cn/v3/push";
    var data = json.encode({
      "platform": ["android", "ios"],
      "inapp_message": {"inapp_message": false},
      "options": {
        "classification": 0,
        "time_to_live": 86400,
        "apns_production": false,
        "third_party_channel": {
          "huawei": {
            "skip_quota": false,
            "distribution": "secondary_push",
            "channel_id": "",
            "category": "DEVICE_REMINDER",
            "receipt_id": ""
          }
        }
      },
      "notification": {
        "alert": notificationAlert,
        "android": {
          "alert": notificationAlert,
          "title": notificationTitle,
          "intent": {"url": "intent:#Intent;action=android.intent.action.MAIN;end"},
          "sound": "",
          "priority": 0,
          "category": "",
          "alert_type": 7,
          "style": 0,
          "builder_id": 0,
          "large_icon": "",
          "badge_add_num": 1,
          "extras": {
            "param": "123"
          }
        },
        "ios": {
          "alert": {
            "title": notificationAlert,
            "body": notificationTitle,
          },
          "content-available": 0,
          "mutable-content": 1,
          "sound": "default",
          "badge": "+1",
          "thread-id": "",
          "interruption-level": "active",
          "filter-criteria": "",
          "extras": {
            "参数": "A"
          }
        }
      },
      "audience": {
        "alias": notificationAudienceAlias,
      }
    });
    final response = await dio.request(
      url,
      data: data,
      options: Options(
        headers: {
          HttpHeaders.authorizationHeader: base64AuthString,
        },
        method: "POST",
      ),
    );
    print(response.data.toString());
  }
}

到了这里,关于flutter 极光推送配置流程(极光通道/华为厂商/IOS)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 极光Java 版本服务器端实现别名消息推送

    REST API 文档:

    2024年02月15日
    浏览(44)
  • 使用Android Studio 利用极光推送SDK 制作手机 APP 实现远程测试技术 (第一部)

    总参考文章:https://blog.csdn.net/qq_38436214/article/details/105073213 Android Studio 安装配置教程 - Windows(详细版) 1.JDK 安装与环境变量配置(Win10详细版) 《jdk-8u371-windows-i586.exe》 https://blog.csdn.net/qq_38436214/article/details/105071088 此时会让登录账号密码: https://login.oracle.com/mysso/signon.jsp 账号:

    2024年02月03日
    浏览(46)
  • flutter 打包IOS及常用配置

    项目名字配置是在 ios/Runner/Info.plist 文件中的 dict 下的 CFBundleName testapp 。如下图所示: String里面就可以修改名称 iOS 项目 Logo的配置是在 ios/Runner/Assets.xcassets/AppIcon.appiconset 文件下,直接更换图片,名字不要改动 。 XCODE打开IOS文件夹下的项目,打开Runner.xcworkspace 在ios 工程中配

    2024年01月25日
    浏览(38)
  • xcode 设置 ios苹果图标,为Flutter应用程序配置iOS图标

    工具网址:https://icon.wuruihong.com/ 下载之后文件目录如下 拷贝到项目的iosRunnerAssets.xcassetsAppIcon.appiconset目录下,如下图

    2024年01月23日
    浏览(68)
  • iOS- flutter flavor 多环境Configurations配置

    在这里我添加了4个Scheme,Dev、Test、MTest、Prod。 同时,在 Info.plist 的 Bundle display name 选项中,输入: ${APP_DISPLAY_NAME} 比如,我创建了Test环境,那首先选择Test的Scheme,点击编辑,进入下图流程:

    2024年02月07日
    浏览(48)
  • 【flutter】使用permission_handler配置android和 iOS的权限

    flutter在pub.flutter-io.cn插件库中有很多的关于权限配置的插件,但是就我个人而言,比较推荐使用permission_handler这个插件。当我们打开permission_handler时候,往往新手小白会因为它的官网文档而弄的一头雾水,权限配置往往涉及到android和ios两个方向的相关知识,有可能大多数人就

    2024年02月12日
    浏览(40)
  • iOS通用链接(UniversalLink)配置详细流程

    登录苹果账号后,点击创建的APP 的Bundle ID,跳转到APP 信息页面。 记录下 Team ID  和 Bundle ID  备用。 勾选上 功能列表上的 ”Associated Domains“选项。 配置苹果后台 创建一个text空文本文件,去掉文件后缀,命名为 apple-app-site-association (不能修改,且不能添加后缀)。 文件内添加

    2024年02月13日
    浏览(38)
  • Uniapp IOS universal link 配置流程

    Universal Link是苹果再WWDC 2015上提出的iOS 9的新特性,是一种仅限于苹果设备的特别深度链接协议,能通过打开一个Https链接来直接启动您的客户端应用。开始之前,确保你有一个Https协议的域名,下面我们就看看在uniapp中如何正确配置。 ♥️ 步骤一:新建 apple-app-site-associatio

    2024年02月08日
    浏览(44)
  • 厂商认证 | 华三、思科、华为认证,到底考哪个好?

    在IT行业,获得认证是提升职业发展和竞争力的重要途径之一。 而 华三(H3C)、思科(Cisco)和华为(Huawei) 都是 业内知名的厂商 ,其推出的认证在行业内 备受认可 ,相信这几个认证大家肯定都是有所耳闻的。 不过认证越多,大家的选择困难症肯定也就上来了。 那么,究

    2024年02月07日
    浏览(39)
  • 国内云服务器厂商阿里云,腾讯云,华为云那个好?该如何选择?

    国内市场占比比较多的分别为阿里云,腾讯云和华为云,这三家可以说是国内乃至亚洲的天花板了,很多新手用户不知道选择哪家,这篇文章将详细介绍每家的优点缺点以及面向的用户,让我们赶快开始吧! 阿里云投入研发云计算最早,市场份额国内第一,稳定性不错。不过

    2024年02月13日
    浏览(64)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包