npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2025 – Pkg Stats / Ryan Hefner

gt-push-ohos-plugin

v1.0.1

Published

push for ohos

Downloads

15

Readme

Github 地址

安装与使用

  • 下载鸿蒙插件工程gt-push-ohos-plugin-1.0.0.tgz
  • 将gt-push-ohos-plugin-1.0.0.tgz放到RN工程下
  • 安装 , 如:npm install file:gt-push-ohos-plugin/gt-push-ohos-plugin-1.0.0.tgz

下面的代码展示了这个库的基本使用场景: 完成代码参考App.tsx

[!WARNING] 使用时 import 的库名不变。

import { GetuiPush } from 'gt-push-ohos-plugin';
function App(): React.JSX.Element {
  const isDarkMode = useColorScheme() === 'dark';
  const eventListener = useRef<EmitterSubscription | null>(null);
  const [cid, setCid] = useState<string>('');
  const [version, setVersion] = useState<string>('');
  const [tag, setTagValue] = useState<string>(''); // 补充缺失的 tag 状态及更新函数

  // 初始化推送服务
  const initPush = (): void => {
    GetuiPush.initPush(
      (cid: string) => {
        console.log('initPush cid : ' + cid);
      },
      (error: string) => {
        console.log('initPush error : ' + error);
      }
    );
  };

  // 设置标签
  const setTag = (): void => {
    GetuiPush.setTag(['李四', '张三'], '123');
  };

  // 查询标签
  const queryTag = (): void => {
    GetuiPush.queryTag('123');
  };

  // 设置事件监听
  const setCallback = (): void => {
    DeviceEventEmitter.addListener('receiveRemoteNotification', (data) => {
      console.log('listener  接收到透传消息 : ' + data);
    });

    DeviceEventEmitter.addListener('onReceiveClientId', (data) => {
      console.log('listener cid : ' + data);
      setCid(data);
    });

    DeviceEventEmitter.addListener('onReceiveDeviceToken', (data) => {
      console.log('listener 厂商token : ' + data);
    });

    DeviceEventEmitter.addListener('onReceiveOnlineState', (data) => {
      console.log('listener 在线状态 : ' + data);
    });

    DeviceEventEmitter.addListener('onReceiveCommandResult', (data) => {
      console.log('listener 指令回执(setTag 、bindAlias...) : ' + data);
      // action
      // SET_TAG_RESULT = 10009;  setTag
      // QUERY_TAG_RESULT = 10012; queryTag
      // BIND_ALIAS_RESULT = 10010; bindAlias
      // UNBIND_ALIAS_RESULT = 10011; unbindAlias
      try {
        const command = JSON.parse(data); // 注意:原代码用了未定义的 jsonString,这里改用 data
        if (command.action === 10012) {
          console.log('listener queryTag : ' + data);
          setTagValue(JSON.stringify(command.tags) )
        }
      } catch (e) {
        console.error('解析 command 数据失败', e);
      }
    });

    DeviceEventEmitter.addListener('onNotificationMessageArrived', (data) => {
      console.log('listener 接受到通知 : ' + data);
    });

    DeviceEventEmitter.addListener('onNotificationMessageClicked', (data) => {
      console.log('listener 通知被点击 : ' + data);
    });

    DeviceEventEmitter.addListener('onNotificationsEnabled', (data) => {
      console.log('listener 系统通知开关状态 : ' + data);
    });
  };

  // 组件生命周期管理
  useEffect(() => {
    setCallback();
    GetuiPush.version((version: string) => {
      setVersion(version);
    });

    // 卸载时清理监听
    return () => {
      // eventListener.current?.remove();
    };
  }, []);
//....省略
export default App;

Link

目前 HarmonyOS 暂不支持 AutoLink,所以 Link 步骤需要手动配置。 建议参考鸿蒙官网教程RN应用鸿蒙化开发指南

首先需要使用 DevEco Studio 打开项目里的 HarmonyOS 工程 harmony

1.在工程根目录的 oh-package.json5 添加 overrides 字段

{
  ...
  "overrides": {
    "@rnoh/react-native-openharmony" : "./react_native_openharmony"
  }
}

2.引入原生端代码

[!TIP] har 包位于三方库安装路径的 harmony 文件夹下。

打开 entry/oh-package.json5,添加以下依赖

"dependencies": {
    "@rnoh/react-native-openharmony": "0.72.90",
    "GtPushOhosSdk": "file:../../node_modules/gt-push-ohos-plugin/harmony/GtPushOhosSdk.har"
  }

点击右上角的 sync 按钮

3.配置 CMakeLists 和引入 IdoPackage

打开 entry/src/main/cpp/CMakeLists.txt,添加:

project(rnapp)
cmake_minimum_required(VERSION 3.4.1)
set(CMAKE_SKIP_BUILD_RPATH TRUE)
set(OH_MODULE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/../../../oh_modules")
set(RNOH_APP_DIR "${CMAKE_CURRENT_SOURCE_DIR}")

set(RNOH_CPP_DIR "${OH_MODULE_DIR}/@rnoh/react-native-openharmony/src/main/cpp")
set(RNOH_GENERATED_DIR "${CMAKE_CURRENT_SOURCE_DIR}/generated")
set(CMAKE_ASM_FLAGS "-Wno-error=unused-command-line-argument -Qunused-arguments")
set(CMAKE_CXX_FLAGS "-fstack-protector-strong -Wl,-z,relro,-z,now,-z,noexecstack -s -fPIE -pie")
add_compile_definitions(WITH_HITRACE_SYSTRACE)
set(WITH_HITRACE_SYSTRACE 1) # for other CMakeLists.txt files to use

add_subdirectory("${RNOH_CPP_DIR}" ./rn)
add_subdirectory("${OH_MODULE_DIR}/GtPushOhosSdk/src/main/cpp" ./gtpsuh)

add_library(rnoh_app SHARED
   "./PackageProvider.cpp"
   "${RNOH_CPP_DIR}/RNOHAppNapiBridge.cpp"
 )

target_link_libraries(rnoh_app PUBLIC rnoh)
target_link_libraries(rnoh_app PUBLIC rnoh_gtpush)

打开 entry/src/main/cpp/PackageProvider.cpp,添加:

#include "RNOH/PackageProvider.h"  
#include "GtPushPackage.h"  

using namespace rnoh;  
std::vector<std::shared_ptr<Package>> 
PackageProvider::getPackages(Package::Context ctx) {
   return {
          std::make_shared<GtPushPackage>(ctx)
   };
}

4.在 ArkTs 侧引入 NetInfoPackage

打开 entry/src/main/ets/RNPackagesFactory.ts,添加:

import { RNPackageContext, RNPackage } from '@rnoh/react-native-openharmony/ts';
import  { GtPushPackage } from 'GtPushOhosSdk/ts';

export function createRNPackages(ctx: RNPackageContext): RNPackage[] {
  return [
    new GtPushPackage(ctx),
  ];
}

5.补全通知点击报表

import {GtPushModule} from 'GtPushOhosSdk';

export default class EntryAbility extends RNAbility {
    onCreate(want: Want): void {
        super.onCreate(want)
        hilog.info(DOMAIN, 'testTag', '%{public}s', 'Ability onCreate');
        //补充点击事件报表
        GtPushModule.setClickWant(want)
    }
    
    onNewWant(want: Want, launchParam: AbilityConstant.LaunchParam): void {
        //补充点击事件报表
        GtPushModule.setClickWant(want)
    }
}

6.配置appid参数

打开 entry/src/main/module.json5,添加:

    "metadata": [
      {
        "name": "GETUI_APPID",
        "value": "djYjSlFVMf6p5YOy2OQUs8"//你的APPID个推官网申请
      },

    ],
    "requestPermissions": [
      {
        "name": "ohos.permission.INTERNET"
      },
      {
        "name": "ohos.permission.GET_NETWORK_INFO"
      },
      {
        "name": "ohos.permission.GET_WIFI_INFO"
      },
      {
        "name": "ohos.permission.APP_TRACKING_CONSENT",
        "reason" : "$string:oaid_reason",
        "usedScene": {
          "when": "always"
        }
      }
    ]

6.运行

点击右上角的 sync 按钮

或者在终端执行:

cd entry
ohpm install

然后编译、运行即可。

约束与限制

兼容性

要使用此库,需要使用正确的 React-Native 和 RNOH 版本。另外,还需要使用配套的 DevEco Studio 和 手机 ROM。

方法

export interface Spec extends TurboModule {

  /**
   * 初始化推送服务 只有Android,  IOS在AppDelegate中初始化
   */
   initPush(): void;

  /**
   * 打开推送服务
   */
   turnOnPush(): void;

   turnOffPush(): void;

  /**
   * 获取SDK的Cid
   *
   * @param cb 回调函数,接收 Cid 值
   */
   clientId(cb: (param: string) => void): void;


  /**
   * 获取SDK版本号
   *
   * @param cb 回调函数,接收版本值
   */
   version(cb: (param: string) => void): void;

  /**
   * 是否让SDK 后台离线(默认值:true)
   *
   * @param offLine 支持当APP进入后台后,个推是否离线,true.离线
   */
   setBackgroundOffLine(offLine: boolean): void;

  /**
   * 绑定别名功能:后台可以根据别名进行推送
   *
   * @param alias 别名字符串
   * @param aSn 绑定序列码, 不为nil
   */
   bindAlias(alias: string, aSn?: string): void;

  /**
   * 取消绑定别名功能
   *
   * @param alias 别名字符串
   * @param isSelf 是否只对当前cid有效. true: 只对当前cid做解绑;false:对所有绑定该别名的cid列表做解绑.
   * @param aSn 绑定序列码, 不为nil
   */
   unbindAlias(alias: string, isSelf: boolean, aSn?: string): void;

  /**
   * 给用户打标签 , 后台可以根据标签进行推送
   *
   * @param tags 别名数组
   *
   * @return 提交结果,YES表示尝试提交成功,NO表示尝试提交失败
   */
   setTag(tags: string[], sn:string):void;

   queryTag(sn:string):void;
  /**
   * 上行第三方自定义回执actionid
   *
   * @param actionId 用户自定义的actionid,int类型,取值90001-90999。
   * @param taskId 下发任务的任务ID
   * @param msgId 下发任务的消息ID
   * 该方法需要在回调方法“GeTuiSdkDidReceivePayload:andTaskId:andMessageId:andOffLine:fromApplication:”使用
   */
   sendFeedbackMessage(actionId: number, taskId: string, msgId: string): void;

   /**
    * 设置静默时间.
    *
    * @param beginHour 开始时间,beginHour >= 0 && beginHour < 24,单位 h.
    * @param duration  持续时间,duration > 0 && duration <= 23,持续时间为 0 则取消静默,单位 h.
    * @return 不是真正调用结果, 仅仅是该方法是否调用成功.
    */
   setSilentTime(beginHour: number, duration: number): boolean;


   setBadgeNum(badgeNum: number):void;


}

设置事件监听

const setCallback = (): void => {
    DeviceEventEmitter.addListener('receiveRemoteNotification', (data) => {
    console.log('listener  接收到透传消息 : ' + data);
    });

    DeviceEventEmitter.addListener('onReceiveClientId', (data) => {
      console.log('listener cid : ' + data);
      setCid(data);
    });

    DeviceEventEmitter.addListener('onReceiveDeviceToken', (data) => {
      console.log('listener 厂商token : ' + data);
    });

    DeviceEventEmitter.addListener('onReceiveOnlineState', (data) => {
      console.log('listener 在线状态 : ' + data);
    });

    DeviceEventEmitter.addListener('onReceiveCommandResult', (data) => {
      console.log('listener 指令回执(setTag 、bindAlias...) : ' + data);
      // action
      // SET_TAG_RESULT = 10009;  setTag
      // QUERY_TAG_RESULT = 10012; queryTag
      // BIND_ALIAS_RESULT = 10010; bindAlias
      // UNBIND_ALIAS_RESULT = 10011; unbindAlias
      try {
        const command = JSON.parse(data); // 注意:原代码用了未定义的 jsonString,这里改用 data
        if (command.action === 10012) {
          console.log('listener queryTag : ' + data);
          setTagValue(JSON.stringify(command.tags) )
        }
      } catch (e) {
        console.error('解析 command 数据失败', e);
      }
    });

    DeviceEventEmitter.addListener('onNotificationMessageArrived', (data) => {
      console.log('listener 接受到通知 : ' + data);
    });

    DeviceEventEmitter.addListener('onNotificationMessageClicked', (data) => {
      console.log('listener 通知被点击 : ' + data);
    });

    DeviceEventEmitter.addListener('onNotificationsEnabled', (data) => {
      console.log('listener 系统通知开关状态 : ' + data);
    });
};