IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> flutter集成jpush实现推送(Android和IOS) -> 正文阅读

[移动开发]flutter集成jpush实现推送(Android和IOS)

1.前提准备

极光开发者服务注册并登录,在首页添加应用,如下图:
在这里插入图片描述

2.Flutter集成Jpush

在工程pubspec.yaml添加Jpush依赖,如下图:
在这里插入图片描述
Android
在 /android/app/build.gradle 中添加下列代码:

android: {
  ....
  defaultConfig {
    applicationId "替换成自己应用 ID"
    ...
    ndk {
	//选择要添加的对应 cpu 类型的 .so 库。
	abiFilters 'armeabi', 'armeabi-v7a', 'x86', 'x86_64', 'mips', 'mips64', 'arm64-v8a',        
    }

    manifestPlaceholders = [
        JPUSH_PKGNAME : applicationId,
        JPUSH_APPKEY : "appkey", // NOTE: JPush 上注册的包名对应的 Appkey.
        JPUSH_CHANNEL : "developer-default", //暂时填写默认值即可.
    ]
  }    
}

IOS
在 xcode8 之后需要点开推送选项: TARGETS -> Capabilities -> Push Notification 设为 on 状态

3.flutter客户端集成极光SDK

在main.dart文件导包

import 'package:flutter_jpush/flutter_jpush.dart';

在APP初始化main.dart添加如下:

  static JPush jpush = null;

  initJPushState() async{
    if(jpush != null) return jpush;

    jpush = JPush();

    try {
      if (Platform.isAndroid == true) {
        jpush.addEventHandler(
          // 接收通知回调方法。
          onReceiveNotification: onPushForAndroid,
          // 点击通知回调方法。
          onOpenNotification: onResumeForAndroid,
          // 接收自定义消息回调方法。
          onReceiveMessage: (Map<String, dynamic> message) async {
            print("flutter onReceiveMessage: $message");
          },
        );
      } else if (Platform.isIOS == true) {
        jpush.addEventHandler(
          // 接收通知回调方法。
          onReceiveNotification: onPush,
          // 点击通知回调方法。
          onOpenNotification: onResume,
          // 接收自定义消息回调方法。
          onReceiveMessage: (Map<String, dynamic> message) async {
            print("flutter onReceiveMessage: $message");
          },
        );
      }
    } on Exception {
      print("--->获取平台版本失败");
    }

    jpush.setup(
        appKey: "866ac8de67c493b8183cbe68",
        channel: "developer-default",
        production: false,
        debug: true
    );

    //ios-权限获取
    jpush.applyPushAuthority(
        new NotificationSettingsIOS(sound: true, alert: true, badge: true)
    );

    //获取极光设备id
    jpush.getRegistrationID().then((value) =>
    {
    	//value值返回的是当前设备的极光唯一标识
    	//通常用来推送某一用户时,传递给极光的唯一标识
    });

    //测试发送消息通知
//    var fireDate = DateTime.fromMillisecondsSinceEpoch(
//        DateTime.now().millisecondsSinceEpoch + 5000);
//    var noti = LocalNotification(
//        id: 234,
//        title: '测试',
//        buildId: 1,
//        content: '推送测试,测试测试',
//        fireTime: fireDate,
//        extra: {"fa": "0"});
//    jpush.sendLocalNotification(noti).then((value) => null);

  }

在没有后台的情况下,可以在官网进行推送测试,如下图:
在这里插入图片描述

4.JAVA服务端集成极光SDK

添加maven依赖
将下边的依赖条件放到你项目的 maven pom.xml 文件里

<dependency>
    <groupId>cn.jpush.api</groupId>
    <artifactId>jpush-client</artifactId>
    <version>3.4.8</version>
</dependency>

创建一个极光推送的Util类

APP_KEY :在极光开放平台创建应用,极光提供的AppKey
MASTER_SECRET :在极光开放平台创建应用,极光提供的Master Secret(注意粘贴过来的有没有空格,有的话删掉)
JPUSH_URL:极光推送地址(https://api.jpush.cn)

注:IOS端需通过创建IosAlert并setAlert()设置推送的title和body, Android直接setAlert和setTitle即可

package com.bfj.mobilepush;

import cn.jiguang.common.ClientConfig;
import cn.jiguang.common.resp.APIConnectionException;
import cn.jiguang.common.resp.APIRequestException;
import cn.jpush.api.JPushClient;
import cn.jpush.api.push.PushResult;
import cn.jpush.api.push.model.*;
import cn.jpush.api.push.model.audience.Audience;
import cn.jpush.api.push.model.notification.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.configurationprocessor.json.JSONException;

import java.util.HashMap;
import java.util.Map;

import static cn.jpush.api.push.model.notification.PlatformNotification.ALERT;

public class JGMobilePush {
    protected static final Logger LOG = LoggerFactory.getLogger(JGMobilePush.class);

    protected static final String APP_KEY = "在极光开放平台创建应用,极光提供的AppKey";
    protected static final String MASTER_SECRET = "在极光开放平台创建应用,极光提供的Master Secret";
    protected static final String JPUSH_URL = "https://api.jpush.cn";



    public static void sendPushWithCustomConfig(String title, String body, String endpointArn, Map<String, String> info) throws JSONException {
        ClientConfig config = ClientConfig.getInstance();
        // Setup the custom hostname
        config.setPushHostName(JPUSH_URL);

        JPushClient jpushClient = new JPushClient(MASTER_SECRET, APP_KEY, null, config);

        // For push, all you need do is to build PushPayload object.
        PushPayload payload = getPushPayload(title, body, endpointArn, info);
//        PushPayload payload = buildPushObject_ios_tagAnd_alertWithExtrasAndMessage();

        try {
            PushResult result = jpushClient.sendPush(payload);
            LOG.info("Got result - " + result);

        } catch (APIConnectionException e) {
            LOG.error("Connection error. Should retry later. ", e);

        } catch (APIRequestException e) {
            LOG.error("Error response from JPush server. Should review and fix it. ", e);
            LOG.info("HTTP Status: " + e.getStatus());
            LOG.info("Error Code: " + e.getErrorCode());
            LOG.info("Error Message: " + e.getErrorMessage());
            LOG.info("Msg ID: " + e.getMsgId());
        }
    }
    public static PushPayload getPushPayload(String title, String body, String endpointArn, Map<String, String> info) {
        IosAlert alert = IosAlert.newBuilder().setTitleAndBody(title, null, body).build();
        return PushPayload.newBuilder()
                //指定当前推送是安卓或ios
                .setPlatform(Platform.android_ios())
                //指定发送用户的registerId
                .setAudience(Audience.registrationId(endpointArn))
                .setNotification(Notification.newBuilder()
                        // 指定当前推送的android通知
                        .addPlatformNotification(AndroidNotification.newBuilder().setAlert(body)
                                .setTitle(title)
                                .addExtras(info)
                                // 此字段为透传字段,不会显示在通知栏。用户可以通过此字段来做一些定制需求,如特定的key传要指定跳转的页面(value)
                                .build())

                        // 指定当前推送的iOS通知
                        .addPlatformNotification(IosNotification.newBuilder()
                                // 传一个IosAlert对象,指定apns title、title、subtitle等
                                .setAlert(alert)
                                // 直接传alert
                                // 此字段的值default表示系统默认声音;传sound.caf表示此推送以项目里面打包的sound.caf声音来提醒,
                                // 如果系统没有此音频则以系统默认声音提醒;此字段如果传空字符串,iOS9及以上的系统是无声音提醒,以下的系统是默认声音
                                .setSound(title)
                                .addExtras(info)
                                // 此字段为透传字段,不会显示在通知栏。用户可以通过此字段来做一些定制需求,如特定的key传要指定跳转的页面(value)
                                .build())
                        .build())
                .setOptions(Options.newBuilder()
                        .setApnsProduction(true)
                        .build())
                .build();
    }
}


主程序调用sendPushWithCustomConfig()方法即可进行推送

5.集成Android

添加应用成功后,如下图:
在这里插入图片描述
选择消息推送,点击下一步,如下图:
在这里插入图片描述
填写应用包名,Android应用程序的包名(Package Name),在 AndroidManifest.xml 里配置使用的(一旦配置成功不可更改),点击下一步即可使用。

6.集成IOS

创建应用程序 ID

登陆 苹果开发者网站 进入开发者账户。
go_to_account_page

从开发者账户页面左侧入口进入 “Certificates, IDs & Profiles” 页面。
go_to_cert_page

创建 App ID,填写 App ID 的 NAME 和 Bundle ID(如果 ID 已经存在可以直接跳过此步骤)。
add_appid
注: 此处需要指定具体的 Bundle ID 不要使用通配符。
appid_suffix
为 App 开启 Push Notification 功能。如果是已经创建的 App ID 也可以通过设置开启 Push Notification 功能。
在这里插入图片描述

填写好以上属性后,点击 “Continue”,确认 AppId 属性的正确性,点击 “Register”,注册 AppId 成功。

鉴权方式的配置

极光官网应用的鉴权信息一旦配置,只能用相同 bundleID 的鉴权信息进行更新,无法修改为其他的 bundleID,请在配置前仔细检查 bundleID 是否正确

方式一:通过 .p12 证书鉴权
如果你之前没有创建过 Push 证书或者是要重新创建一个新的,请在证书列表下面新建。
在这里插入图片描述
新建证书需要注意选择 APNs 证书种类。如图 APNs 证书有开发(Development)和生产(Production)两种。
注:开发证书用于开发调试使用;生产证书既能用于开发调试,也可用于产品发布。此处我们选择生产证书为例。
在这里插入图片描述
点击 “Continue”, 之后选择该证书准备绑定的 AppID。
在这里插入图片描述
再点 “Continue” 会让你上传 CSR 文件。( CSR 文件会在下一步创建)
在这里插入图片描述
打开系统自带的 KeychainAccess 创建 Certificate Signing Request。如下图操作:
在这里插入图片描述

填写“用户邮箱”和“常用名称” ,并选择“存储到磁盘”,证书文件后缀为 .certSigningRequest 。
在这里插入图片描述

回到浏览器中 CSR 上传页面,上传刚刚生成的后缀为 .certSigningRequest 的文件。
生成证书成功后,点击 “Download” 按钮把证书下载下来,是后缀为 .cer 的文件。
在这里插入图片描述

双击证书后,会在 “KeychainAccess” 中打开,选择左侧“钥匙串”列表中“登录”,以及“种类”列表中“我的证书”,找到刚才下载的证书,并导出为 .p12 文件。如下图:
export_p12 save_p12

在极光控制台上,进入你应用的应用设置中 iOS 的鉴权方式选择 “证书”,上传刚才导出的 .p12 证书。极光会在后台为你的应用进行鉴权。
Apple 的生产推送证书允许用于开发环境的推送,勾选将生产证书用于开发环境,开发者可以仅上传生产证书,即可在官网推送平台处选择开发环境做推送,不用再生成和上传开发证书。
在这里插入图片描述

Provisioning Profile 的创建

创建 Provisioning Profile 的前提,已在 Apple Developer 网站创建待发布应用所使用的 Bundle ID 的 App ID,且为该 App ID 创建了 iOS Development 证书。

在苹果开发者账号的 Provisioning Profile 页面点击下图按钮,创建 Provisioning Profile
在这里插入图片描述

选择此 Provisioning Profile 的环境后点击 [Continue]:
在这里插入图片描述

选择要创建 Provisioning Profile 的 App ID 后点击 [Continue]:
在这里插入图片描述

选择所属的开发者证书,(这里创建了多个开发者证书,建议只创建一个,方便管理)为了方便,选择了 [Select All],再点击 [Continue] 进入下一步:
在这里插入图片描述

为该 Provisioning Profile 选择将要安装的设备(一般选择 [Select All]),点击 [Continue]:
在这里插入图片描述

给该 Provisioning Profile 填写 Profile Name,点击 [generate] 完成创建。
在这里插入图片描述

填写完 Profile Name 后点击 [generate] 完成创建,之后点击 [DownLoad] 下载 Provisioning Profile
在这里插入图片描述

双击下载下来的 Provisioning Profile,添加到 xcode。

XCode 的证书配置教程

参照 iOS SDK 集成指南集成 JPush SDK 和上传了推送用到的 p12 证书后在编译运行前需要先配置一下证书,步骤如下:

打开 xxx-info.plist 的 Bundle identifier 项把上传到 JPush 控制台的 bundle id 填写进去:
在这里插入图片描述

点击项目,选择目标 TARGETS 后进入 Build Setting 界面,搜索 “Code signing”,按照下图配置
在这里插入图片描述

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2021-07-09 17:36:08  更:2021-07-09 17:36:23 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/20 5:42:55-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码