uniapp 接入极光推送

uni-app + 极光推送完成ios、android端app推送功能。

1、登录极光

极光官网

截屏2023-09-12 16.54.50.png

选择极光推送,登录以后添加应用跟着官方提示一步一步走就行了,例:

截屏2023-09-12 16.57.34.png

2、uni-app插件市场导入官方JPush、JCore的SDK

极光推送 JPush 官方 SDK 跟着文档走就是了,我这里只是截取了部分。

截屏2023-09-12 17.00.45.png

截屏2023-09-12 17.01.46.png

极光推送 JCore 官方 SDK

截屏2023-09-12 17.03.11.png

极光 SDK 基础组件。极光 SDK 使用都需要依赖该组件。这句话谨记,当时我就是没导入这个,一直打自定义基座失败,找了好久的原因(无奈.png)

3、HBuilderx的manifest.json中进行配置

App原生插件配置,选择云端插件

截屏2023-09-12 17.08.21.png

填写你在极光官网填写的那些资料就行了

截屏2023-09-12 17.08.49.png

这里记得按照示例来,开通了哪些厂商就填哪些(android),比如我官网推送设置里面的小米的App ID是123456789,那我填写的时候就应该是MI-123456789

截屏2023-09-12 17.11.34.png

App模块配置Push(消息推送),只需要勾选Push。

截屏2023-09-12 17.46.12.png

4、页面代码

// init
import $store from "@/store/index.js";
// 获取当前是 ios 还是 android
const platform = $store.state.systemInfo?.platform ?? "";

// #ifdef APP-PLUS
// 引入 App 原生语言插件
const jpushModule = uni.requireNativePlugin("JG-JPush");

// 极光推送初始化
export const JPushInit = async () => {
  // 初始化推送服务
  jpushModule.initJPushService();
  // 是否启用日志输出
  jpushModule.setLoggerEnable(true);
  // 设置别名(到时候可以根据别名进行推送)
  jpushModule.setAlias({ alias: "别名", sequence: 1 });
  // 监听 是否开启权限  只在首次登录时判断权限 防止索取权限频繁被拒
  // const isEnabled = await getNotificationEnabled();
  // if ($store.getters.isFirsttLogin && !isEnabled) noticMsgTool();
  // 监听极光连接状态
  jpushModule.addConnectEventListener(result => {
    result.connectEnable && getRegistrationID();
    console.log("监听到了连接状态变化 --> ", result.connectEnable ? "已连接" : "未连接");
    // 这里可以做业务逻辑
  });
  // 极光推送的消息通知回调
  jpushModule.addNotificationListener(result => {
    const BadgeNum = 0; // 角标数量
    jpushModule.setBadge(BadgeNum); // 极光设置角标数量
    plus.runtime.setBadgeNumber(BadgeNum); // h5+设置角标数量
    console.log("收到通知 -->", result);
    // 点击事件
    if (result.notificationEventType === "notificationOpened") {
      uni.navigateTo({ url: "" }); // 点击推送消息跳转页面
    }
  });
  // 检查推送服务是否停止
  jpushModule.isPushStopped(({ code }) => {
    // code   0已停止推送  1未停止推送
    console.log(`${code === 0 ? "已停止推送" : "推送中..."}`);
  });
};

// 获取registerID
const getRegistrationID = () => {
  jpushModule.getRegistrationID(async result => {
    const registrationId = result.registerID;
    console.log("🚀 ~ getRegistrationID ~ registrationId:", registrationId);
    try {
      // 绑定极光 可以在这里对接后端绑定极光
    } catch (error) {
      console.log("🚀 ~ getRegistrationID ~ error:", error);
    }
  });
};

//监听 是否开启权限
export const getNotificationEnabled = () => {
  return new Promise(resolve => {
    if (platform === "ios") {
      // 判断ios是否打开权限
      jpushModule.requestNotificationAuthorization(result => {
        //如果小于2 未打开通知权限
        resolve(result.status >= 2);
      });
    } else {
      // 判断android是否打开权限
      jpushModule.isNotificationEnabled(result => {
        //如果为0则表示 未打开通知权限
        resolve(result.code !== 0);
      });
    }
  });
};

// 通知权限设置弹框
export const noticMsgTool = (content = "您还没有开启通知权限,无法接受到消息通知,请前往设置!") => {
  uni.showModal({
    title: "通知权限提醒",
    content,
    showCancel: true,
    confirmText: "去设置",
    cancelText: "稍后设置",
    success: res => {
      if (!res.confirm) return;
      // 苹果打开对应的通知栏
      if (platform === "ios") {
        let app = plus.ios.invoke("UIApplication", "sharedApplication");
        let setting = plus.ios.invoke("NSURL", "URLWithString:", "app-settings:");
        plus.ios.invoke(app, "openURL:", setting);
        plus.ios.deleteObject(setting);
        plus.ios.deleteObject(app);
      } else {
        // android打开对应的通知栏
        const main = plus.android.runtimeMainActivity();
        const pkName = main.getPackageName();
        const uid = main.getApplicationInfo().plusGetAttribute("uid");
        const IntentClass = plus.android.importClass("android.content.Intent");
        const Build = plus.android.importClass("android.os.Build");
        const intent = new IntentClass("android.settings.APP_NOTIFICATION_SETTINGS");
        // android 8.0引导
        if (Build.VERSION.SDK_INT >= 26) {
          intent.putExtra("android.provider.extra.APP_PACKAGE", pkName);
        } else if (Build.VERSION.SDK_INT >= 21) {
          // android 5.0-7.0
          intent.putExtra("app_package", pkName);
          intent.putExtra("app_uid", uid);
        } else {
          // (<21)其他--跳转到该应用管理的详情页
          intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
          let uri = Uri.fromParts("package", mainActivity.getPackageName(), null);
          intent.setData(uri);
        }
        // 跳转到该应用的系统通知设置页
        main.startActivity(intent);
      }
    },
  });
};
//#endif

// #ifdef APP-PLUS
import { JPushInit, noticMsgTool, getNotificationEnabled } from "@/components/bind-jpush.js";
//#endif

// #ifdef APP-PLUS
JPushInit()
//#endif

// 通知设置 主动调弹框到手机系统设置栏设置通知权限
async noticeSetting() {
  const isEnabled = await getNotificationEnabled();
  noticMsgTool(isEnabled ? "当前权限已开启,是否继续前往通知设置" : void 0);
},

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值