【大前端】封裝一個React Native與Android/IOS 端通用的埋點接口

RN 層只暴露一個統一的埋點方法,例如 trackEvent(eventName, params),內部通過 NativeModule 調用 Android/iOS 的原生埋點 SDK。這樣 RN 層不用關心具體實現。

寫一個通用的示例:


1. RN 層封裝統一接口(JS 代碼)

// analytics.js
import { NativeModules, Platform } from 'react-native';const { AnalyticsModule } = NativeModules;const Analytics = {trackEvent(eventName, params = {}) {if (!AnalyticsModule) {console.warn("AnalyticsModule not linked");return;}AnalyticsModule.trackEvent(eventName, params);}
};export default Analytics;

RN 業務里用法:

import Analytics from './analytics';Analytics.trackEvent('button_click', { page: 'home', userId: '12345' });

2. Android 端原生模塊

android/app/src/main/java/com/yourapp/analytics/AnalyticsModule.java

package com.yourapp.analytics;import android.util.Log;
import com.facebook.react.bridge.ReactApplicationContext;
import com.facebook.react.bridge.ReactContextBaseJavaModule;
import com.facebook.react.bridge.ReactMethod;
import com.facebook.react.bridge.ReadableMap;import java.util.HashMap;
import java.util.Map;public class AnalyticsModule extends ReactContextBaseJavaModule {public AnalyticsModule(ReactApplicationContext reactContext) {super(reactContext);}@Overridepublic String getName() {return "AnalyticsModule"; // RN 里調用的名字}@ReactMethodpublic void trackEvent(String eventName, ReadableMap params) {Map<String, Object> map = params.toHashMap();// TODO: 這里替換成你們實際的埋點 SDK 調用Log.d("Analytics", "TrackEvent: " + eventName + " params: " + map.toString());}
}

注冊模塊 AnalyticsPackage.java

package com.yourapp.analytics;import com.facebook.react.ReactPackage;
import com.facebook.react.bridge.NativeModule;
import com.facebook.react.uimanager.ViewManager;import java.util.ArrayList;
import java.util.Collections;
import java.util.List;public class AnalyticsPackage implements ReactPackage {@Overridepublic List<NativeModule> createNativeModules(ReactApplicationContext reactContext) {List<NativeModule> modules = new ArrayList<>();modules.add(new AnalyticsModule(reactContext));return modules;}@Overridepublic List<ViewManager> createViewManagers(ReactApplicationContext reactContext) {return Collections.emptyList();}
}

MainApplication.java 里注冊:

@Override
protected List<ReactPackage> getPackages() {return Arrays.<ReactPackage>asList(new MainReactPackage(),new AnalyticsPackage()  // 注冊);
}

3. iOS 端原生模塊

ios/AnalyticsModule.m

#import <React/RCTBridgeModule.h>@interface RCT_EXTERN_MODULE(AnalyticsModule, NSObject)RCT_EXTERN_METHOD(trackEvent:(NSString *)eventName params:(NSDictionary *)params)@end

ios/AnalyticsModule.swift(或 .m,我用 Swift 例子):

import Foundation@objc(AnalyticsModule)
class AnalyticsModule: NSObject {@objcfunc trackEvent(_ eventName: String, params: [String: Any]) {// TODO: 替換為 iOS 的埋點 SDK 調用print("TrackEvent: \(eventName), params: \(params)")}
}

? 最終效果:
RN 調用 Analytics.trackEvent("xxx", {...})
👉 Android / iOS 走各自原生埋點 SDK。

這樣就實現了 RN 與原生端通用的埋點接口

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/97131.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/97131.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/97131.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

詳解 外部負載均衡器 → Ingress Controller Pod 這個過程

在常見的生產架構中&#xff1a; 外部負載均衡器&#xff08;Ng/ELB/ALB/NLB等&#xff09;終止來自客戶端的 HTTPS 連接。 它將解密后的明文 HTTP 請求轉發給后端的 Kubernetes Ingress Controller Pods。 Ingress Controller 處理 HTTP 請求&#xff0c;并將 HTTP 響應返回給…

Markdown 編輯器 語法

這里寫自定義目錄標題歡迎使用Markdown編輯器新的改變功能快捷鍵合理的創建標題&#xff0c;有助于目錄的生成如何改變文本的樣式插入鏈接與圖片如何插入一段漂亮的代碼片生成一個適合你的列表創建一個表格設定內容居中、居左、居右SmartyPants創建一個自定義列表如何創建一個注…

【PyTorch項目實戰】SAM(Segment Anything Model) —— 致力于建立第一個圖像分割基礎模型

文章目錄一、SAM&#xff08;Segment Anything Model&#xff09; —— 致力于建立第一個圖像分割基礎模型&#xff08;Foundation Model&#xff09;1、項目背景2、核心任務設計3、模型架構&#xff1a;圖像編碼器 提示編碼器 掩碼解碼器4、核心創新&#xff1a;可提示分割任…

第一次實習總結

開發模式的轉變現在雖然不怎么使用很傳統的軟件開發模型了&#xff0c;但是好歹也要敏捷開發吧。事實上&#xff0c;我這個小廠甚至做的更絕。全程無UML。。。需要一天&#xff1a;1.項目組長與客戶進行需求對接。2.項目組長然后就找我來講述需求&#xff0c;我就直接制作出原型…

創建uniApp小程序項目vue3+ts+uniapp

vscode創建pnpm i -D types/wechat-miniprogram uni-helper/uni-app-types{"compilerOptions": {"types": ["dcloudio/types","types/wechat-miniprogram","uni-helper/uni-app-types"] },"vueCompilerOptions": …

GitHub 熱榜項目 - 日榜(2025-08-28)

GitHub 熱榜項目 - 日榜(2025-08-28) 生成于&#xff1a;2025-08-28 統計摘要 共發現熱門項目&#xff1a;13 個 榜單類型&#xff1a;日榜 本期熱點趨勢總結 本期GitHub熱門項目凸顯三大技術趨勢&#xff1a;1) AI領域持續爆發&#xff0c;涵蓋大模型系統提示研究(asgeirt…

IPV6

本節課要掌握的知識點&#xff08;學習目標&#xff09; 概括IPv6相較于IPv4的優勢 (Why IPv6?) 描述IPv6的基本概念 描述IPv6報文頭部的格式和原理 描述IPv6地址格式和地址類型 描述IPv6地址配置的方法和基本過程 執行IPv6地址以及IPv6靜態路由的簡單配置 一、IPV6 基礎…

零基礎開發應用:cpolar+Appsmith平民化方案

文章目錄前言1.什么是Appsmith2.Docker部署3.Appsmith簡單使用4.安裝cpolar內網穿透5. 配置公網地址6. 配置固定公網地址總結前言 你是否也曾想搭建一個屬于自己的應用&#xff0c;卻被復雜的編程知識嚇退&#xff1f;或者&#xff0c;想快速開發一個小工具解決工作難題&#…

【Ruoyi 解密 - 08. 前端探秘1】------ 從“交互原理”到“開發邏輯”,后端也能看懂的前端實戰指南

Ruoyi-Vue3 核心知識點串講&#xff1a;從“交互原理”到“開發邏輯”&#xff0c;后端也能看懂的前端實戰指南 對于非前端工程師而言&#xff0c;學習 Ruoyi-Vue3 并非要成為專業前端開發者&#xff0c;而是要掌握“前后端交互邏輯”——搞懂數據如何從后端接口流轉到前端頁面…

Java SpringBoot+Mybatis-Flex+Logback實現打印日志

先看效果2025-08-26 09:52:19.834 [http-nio-10003-exec-10] INFO c.x.c.logging.RequestLoggingFilter - HTTP請求: {headers{content-length213, host192.168.31.149:10003, content-typeapplication/json, connectionkeep-alive, accept-encodinggzip, deflate, br, user-a…

SegEarth-R1: Geospatial Pixel Reasoning via Large Language Model

摘要 遙感技術已成為理解環境動態、城市規劃和災害管理的關鍵。然而,傳統的遙感工作流程通常依賴顯式分割或檢測方法,這些方法難以處理需要對空間上下文、領域知識和隱含用戶意圖進行推理的復雜隱式查詢。受此啟發,我們提出了一項新任務——地理空間像素推理,該任務允許隱…

CRMEB標準版PHP移動應用微信開放配置及商城后臺配置教程(附步驟)

APP配置內容主要圍繞微信開放平臺里的移動應用來配置;開發平臺地址為:https://open.weixin.qq.com/ 1. 登錄開發平臺創建【移動應用】點擊創建移動應用 2. 進入創建頁面后根據頁面提示填寫對應信息 在是否上架的地方可以先選擇否&#xff1b; 3.填寫平臺信息 根據自身需求勾選…

jQuery 從入門到實踐:基礎語法、事件與元素操作全解析

個人主頁&#xff1a;?喜歡做夢 歡迎 &#x1f44d;點贊 ?關注 ??收藏 &#x1f4ac;評論 目錄 ?編輯 ??定義 &#x1f353;引入依賴 ?編輯??語法 &#x1f351;基礎語法 &#x1f351;選擇器 &#x1f351;jQuery事件 ??操作 &#x1f350;添加操作…

野火STM32Modbus主機讀取寄存器/線圈失敗(二)-解決CRC校驗錯誤

文章目錄前情提要問題背景CRC校驗失敗問題現象原始問題數據問題分析1. CRC校驗算法驗證2. 手動計算驗證問題解決思路問題解決根本原因解決方式1解決方式2重新編譯測試前情提要 在自己的開發板上移植了野火的modbus主機程序并嘗試使用。 問題背景 我使用STM32顯示板作為Modbu…

從協作機器人到智能協作機器人:工業革命的下一跳

從協作機器人到智能協作機器人&#xff1a;工業革命的下一跳 文章目錄從協作機器人到智能協作機器人&#xff1a;工業革命的下一跳摘要1?? 協作機器人&#xff08;Cobot&#xff09;&#xff1a;工業柔性化的催化劑核心特點典型應用2?? 智能機器人&#xff1a;賦予機器“思…

49個Docker自動化腳本:覆蓋全場景運維,構建高可用容器體系

一、容器生命周期管理&#xff08;1-25&#xff09;&#xff1a;從創建到自愈的全流程自動化 1. 自動化容器創建腳本&#xff08;可復用配置&#xff09; 適用場景&#xff1a;快速創建標準化容器&#xff08;如Nginx、Redis&#xff09;&#xff0c;無需重復編寫docker run命令…

Linux(二) | 文件基本屬性與鏈接擴展

個人主頁-愛因斯晨 文章專欄-Linux 最近學習人工智能時遇到一個好用的網站分享給大家&#xff1a; 人工智能學習 文件屬性 看懂文件屬性 在Linux中我們可以使用ll或者ls-l命令來顯示一個文件的屬性以及文件所屬的用戶和組。如&#xff1a; rootVM-24-17-ubuntu:~# cd / rootV…

MaxCompute MaxFrame | 分布式Python計算服務MaxFrame(完整操作版)

MaxCompute MaxFrame評測 | 分布式Python計算服務MaxFrame&#xff08;完整操作版&#xff09;前言MaxCompute MaxFrame服務開通開通 MaxCompute 服務開通 DataWorks 服務資源準備創建 DataWorks 工作空間創建 MaxCompute 項目創建MaxCompute數據源綁定數據源或集群創建MaxComp…

[機械結構設計-48]:機械工程師的崗位要求

機械工程師的崗位要求涵蓋學歷、專業知識、技能水平、工作經驗、軟件應用、綜合能力、溝通協作、職業規范與持續學習等多個維度&#xff0c;具體如下&#xff1a;學歷要求&#xff1a;通常要求本科及以上學歷&#xff0c;專業背景為機械工程、自動化、材料工程等相關專業。部分…

3446. 按對角線進行矩陣排序

Problem: 3446. 按對角線進行矩陣排序 文章目錄思路解題過程復雜度Code思路 發現每條對角線行號減列號是一個定值。 設ki-jn&#xff0c;i0,jn-1時&#xff0c;k1&#xff1b;im-1&#xff0c;j0時&#xff0c;kmn-1。 解題過程 遍歷對角線&#xff0c;找出最小和最大列&#x…