国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

神策(Android)- 集成基礎埋點的整個過程

這篇具有很好參考價值的文章主要介紹了神策(Android)- 集成基礎埋點的整個過程。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

記得最早以前都是用友盟全家桶,埋點是用友盟,推送也是用友盟;但是近倆年我參與開發(fā)的app,埋點都是用神策、推送都是用極光私服,分享都是去對應集成對應平臺的SDK

神策篇

  • 神策(Android)- 集成基礎埋點的整個過程
  • 神策(Android)- 在曝光采集基礎上學習項目架構

一切以 官方文檔 為準,因為隨著版本升級,集成文檔或許多多少少會有一些變動,此篇僅記錄我集成神策基礎埋點的整個過程

基礎配置

基礎配置:涵蓋 AGP 和 Sdk 的引入

  • 關于如何在 AGP 8.0+ 版本中使用插件以及插件的常用配置,請參考 SDK 插件說明。
  • Android Plugin 需要 Android Gradle Plugin 3.2.0+,否則會導致元素點擊事件和 Fragment 的頁面瀏覽事件無法觸發(fā),App 和 H5 打通功能受影響。
  • 插件與 SDK 版本依賴關系:
    神策(Android)- 集成基礎埋點的整個過程,Android進階之路,三方平臺集成,Android,神策,埋點,集成神策

官方配置

project 級別的 build.gradle 文件中添加 android-gradle-plugin2 依賴:

buildscript {
    repositories {
		mavenCentral()
        jcenter()
    }
    dependencies {
		// 添加 gradle 3.2.0+ 依賴
        classpath 'com.android.tools.build:gradle:3.5.3'
        // 添加神策分析 android-gradle-plugin2 依賴
        classpath 'com.sensorsdata.analytics.android:android-gradle-plugin2:3.5.3'
    }
}

主 module(app)build.gradle 文件中應用 com.sensorsdata.analytics.android 插件依賴:

apply plugin: 'com.android.application'
// 應用 com.sensorsdata.analytics.android 插件
apply plugin: 'com.sensorsdata.analytics.android'

dependencies {
}

主 modulebuild.gradle 文件中添加 SDK 依賴

apply plugin: 'com.android.application'
// 應用 com.sensorsdata.analytics.android 插件
apply plugin: 'com.sensorsdata.analytics.android'

dependencies {
   // 添加 Sensors Analytics SDK 依賴
   implementation 'com.sensorsdata.analytics.android:SensorsAnalyticsSDK:6.6.7'
}

推薦版本(截止 2023.6.30)

神策(Android)- 集成基礎埋點的整個過程,Android進階之路,三方平臺集成,Android,神策,埋點,集成神策


項目配置

當前項目使用的是kts,非groovy,倆者使用可能稍有區(qū)別

build.gradle(project)

@file:Suppress("UnstableApiUsage", "DSL_SCOPE_VIOLATION")

buildscript {
    dependencies {
        classpath("com.android.tools.build:gradle:7.4.0")
        classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:1.7.21")
        classpath("com.sensorsdata.analytics.android:android-gradle-plugin2:3.5.4")
    }
}

plugins {
	//若是感覺某個無用,可自行刪除
    alias(libs.plugins.android.application) apply false
    alias(libs.plugins.android.library) apply false
    alias(libs.plugins.kotlin.jvm) apply false
    id("org.jetbrains.kotlin.android") version "1.7.21" apply false
}

build.gradle(主 module(app)

plugins {
    id("haapp.android.application")
    id("com.sensorsdata.analytics.android")
}

build.gradle(module)

哪個模塊做相關的初始化操作,就在哪個模塊引入 SDK

dependencies {
    implementation("com.sensorsdata.analytics.android:SensorsAnalyticsSDK:6.6.8")
}

初始化SDK

主要涵蓋 官方SDK初始化項目初始化的基礎封裝

官方初始化

一般金融行業(yè)的app會涉及合規(guī)的問題,需要確認用戶授權后才可使用;
延遲初始化 SDK 會導致全埋點采集不準確和可視化全埋點、點擊分析功能異常,若 App 有合規(guī)需求,可參考 Android 合規(guī)步驟。

ApplicationonCreate() 方法中同步調用 SensorsDataAPI.startWithConfigOptions() 初始化 SDK:

String SA_SERVER_URL = "數(shù)據(jù)接收地址";

// 初始化配置
SAConfigOptions saConfigOptions = new SAConfigOptions(SA_SERVER_URL);
// 開啟全埋點
saConfigOptions.setAutoTrackEventType(SensorsAnalyticsAutoTrackEventType.APP_CLICK |
                SensorsAnalyticsAutoTrackEventType.APP_START |     
                SensorsAnalyticsAutoTrackEventType.APP_END |       
                SensorsAnalyticsAutoTrackEventType.APP_VIEW_SCREEN)
				//開啟 Log
				.enableLog(true);
/**
 * 其他配置,如開啟可視化全埋點
 */
// 需要在主線程初始化神策 SDK
SensorsDataAPI.startWithConfigOptions(this, saConfigOptions);

SDK 共需要四個權限:
神策(Android)- 集成基礎埋點的整個過程,Android進階之路,三方平臺集成,Android,神策,埋點,集成神策

SDK 為簡化集成步驟,默認在 AndroidManifest.xml 中注冊了以上四個權限。如果想要去除 SDK 注冊的權限,可以使用 tools:node="remove" 配置。關于 tools:node="remove" 的詳細說明可參考谷歌 官方文檔,配置代碼參考:

<uses-permission android:name="android.permission.READ_PHONE_STATE" tools:node="remove" />

項目初始化

我只用了直接初始化的API(很有限),關于更多的API可以前往 基礎 API 功能介紹

可以直接寫在 Application 中,這里是封裝了一個管理類,可以直接在 Application 中調用 SensorManger.initSetting(context)對應的serviceUrl 地址(上報服務器)需要在神策后臺查看一下,也可以讓我方運營、神策運營告知一下,因為測試上報的服務器有所不同

import android.app.Activity
import android.app.Application
import android.content.Context
import com.sensorsdata.analytics.android.sdk.SAConfigOptions
import com.sensorsdata.analytics.android.sdk.SensorsAnalyticsAutoTrackEventType
import com.sensorsdata.analytics.android.sdk.SensorsDataAPI
import com.sensorsdata.analytics.android.sdk.core.business.exposure.SAExposureConfig
import org.json.JSONObject
import java.util.concurrent.Executors


internal object SensorManger {

	// 埋點數(shù)據(jù)對應的上報服務器,都是需要運營 或 神策方提供
    // 測試
    private const val serviceUrl = "https://xx.com.cn:8888"
    // 生產
    // private const val serviceUrl = "https://xx.com.cn"

    fun initSetting(application: Application) {
            init(application)
    }

    fun initSetting(activity: Activity) {
            init(activity)
    }

    private fun init(context: Context) {
        // 開啟全埋點 其他配置,如開啟可視化全埋點 需要在主線程初始化神策 SDK
        SensorsDataAPI.startWithConfigOptions(context, SAConfigOptions(serviceUrl).apply {
            // 開啟全埋點
            autoTrackEventType = SensorsAnalyticsAutoTrackEventType.APP_START or
                    SensorsAnalyticsAutoTrackEventType.APP_END
            // 打開 SDK 的日志輸出功能
            enableLog(BuildVariants.isDebug())
            // 開啟 App 打通 H5
            enableJavaScriptBridge(true)
            // 傳入 true 代表開啟推送點擊事件自動采集
            enableTrackPush(true)
        })
        trackAppInstall(context)
    }

    /**
     * 記錄激活事件
     */
    private fun trackAppInstall(context: Context) {
        try {
            val properties = JSONObject()
            //這里的 DownloadChannel 負責記錄下載商店的渠道,值應傳入具體應用商店包的標記。如果沒有為不同商店打多渠道包,則可以忽略該屬性的代碼示例。
            properties.put("DownloadChannel", getChannelName(context))
            // 觸發(fā)激活事件
            // 如果您之前使用 trackInstallation() 觸發(fā)的激活事件,需要繼續(xù)保持原來的調用,無需改為 trackAppInstall(),否則會導致激活事件數(shù)據(jù)分離。
            SensorsDataAPI.sharedInstance().trackAppInstall(properties)
        } catch (e: Exception) {
            e.printStackTrace()
        }
    }

    /**
     * 獲取渠道名,獲取不到默認"android"
     */
    private fun getChannelName(context: Context?): String {
        var channelName: String? = null
        try {
            val packageManager: PackageManager? = context?.packageManager
            val applicationInfo: ApplicationInfo? = packageManager?.getApplicationInfo(
                context.packageName,
                PackageManager.GET_META_DATA
            )
            channelName = applicationInfo?.metaData?.get("CHANNEL_ID").toString()
        } catch (e: Exception) {
            e.printStackTrace()
        }
        return channelName ?: "android"
    }

    private val executor by lazy { Executors.newSingleThreadExecutor() }

    private fun execute(inv: () -> Unit) {
        executor.execute {
            try {
                inv.invoke()
            } catch (throwable: Throwable) {
                Timber.e(throwable)
            }
        }
    }

    fun track(eventName: String, properties: Map<String, String?>) = execute {
        val jsonObject = JSONObject()
        properties.entries.forEach {
            jsonObject.put(it.key.string(), it.value.string())
        }
        SensorsDataAPI.sharedInstance().track(eventName, jsonObject)
    }
}

配置 Scheme

Scheme 是什么?

  • 是一種頁面內跳轉協(xié)議
  • 通過定義自己的scheme協(xié)議,可以非常方便跳轉app中的各個頁面
  • 通過scheme協(xié)議,服務器可以定制化告訴App跳轉到APP內部頁面

在使用神策系統(tǒng)中的 Debug 實時查看、App 點擊分析、可視化全埋點等需要掃碼的功能時,需要給某一個 Activity 配置 scheme,配置后掃碼即可拉起該 Activity 頁面并且與神策系統(tǒng)建立連接使用相關功能。

官方配置

Sdk 5.2.2及以上版本

AndroidManifest 文件中,配置以下 Activity,并將 scheme 的值替換為您項目中的值

<!-- Android 12 需添加 android:exported="true"-->
<activity android:name="com.sensorsdata.analytics.android.sdk.dialog.SchemeActivity"
android:configChanges="orientation|screenSize"
android:exported="true"
android:launchMode="singleTask">
        <intent-filter>
                <action android:name="android.intent.action.VIEW" />
                <category android:name="android.intent.category.BROWSABLE" />
                <category android:name="android.intent.category.DEFAULT" />
                <data android:scheme="您項目的 scheme" />
        </intent-filter>
</activity>

Sdk 5.2.2以下版本

獲取 Scheme 后,在 AndroidManifest 文件中的 Activity 標簽內配置 Scheme,以 MainActivity 為例:

<activity android:name=".MainActivity">
<!-- 在 MainActivity 中配置 Scheme-->
	<intent-filter>
		<action android:name="android.intent.action.VIEW" />
		<category android:name="android.intent.category.BROWSABLE" />
		<category android:name="android.intent.category.DEFAULT" />
		<data
			android:scheme="您項目的 Scheme 值" />
	</intent-filter>
</activity> 

項目配置

對應的scheme地址需要在神策后臺查看一下,也可以讓我方運營、神策運營告知一下

神策(Android)- 集成基礎埋點的整個過程,Android進階之路,三方平臺集成,Android,神策,埋點,集成神策

AndroidManifest

    <!-- Android 12 需添加 android:exported="true"-->
    <activity
        android:name="com.sensorsdata.analytics.android.sdk.dialog.SchemeActivity"
        android:configChanges="orientation|screenSize"
        android:exported="true"
        android:launchMode="singleTask">
        <intent-filter>
            <action android:name="android.intent.action.VIEW" />

            <category android:name="android.intent.category.BROWSABLE" />
            <category android:name="android.intent.category.DEFAULT" />
            <!-- 測試 -->
            <data android:scheme="l77777" />
            <!-- 生產 -->
            <!--<data android:scheme="l66666" />-->
        </intent-filter>
    </activity>

打通APP和H5

版本要求

  • Android SDK v4.0.8 及以上版本
  • Android 插件 v3.2.4 及以上版本

初始化 SDK 時,進行如下配置,即可開啟 App 打通 H5 功能

// 開啟 App 打通 H5
saConfigOptions.enableJavaScriptBridge(boolean isSupportJellyBean);

isSupportJellyBean:是否支持 API level 16 及以下的版本。

打通功能通過 WebView 的 addJavascriptInterface() 方法實現(xiàn),但在 API level 16 及以下的版本,addJavascriptInterface() 方法有安全漏洞,因此請謹慎使用。

打通功能需要 App 和 H5 同時開啟才可以生效,H5 開啟方法請 參考 App 打通 H5。

  • X5 內核打通,在初始化后添加 SensorsDataAPI.sharedInstance().showUpX5WebView(WebView,true);
  • UC 內核的 WebView 除了上述代碼,還需要在插件配置中添加:addUCJavaScriptInterface = true 這個選項,在主 module 級別的 build.gradle 文件中添加我們的擴展如下;
sensorsAnalytics{
	addUCJavaScriptInterface=true
}

因為項目中正好有這個需求,所以在我們初始化的時候已經開啟了這個功能

神策(Android)- 集成基礎埋點的整個過程,Android進階之路,三方平臺集成,Android,神策,埋點,集成神策


實踐封裝

這兒只做簡單封裝說明吧,有興趣的可以去 神策(Android)- 在曝光采集基礎上學習項目架構 看一下

StatisticsEvent 單例工具 - 方便調用

object StatisticsEvent {

    /**
     * 神策埋點:測試
     */
    @JvmStatic
    fun test(param1: String?) {
        StatisticsService.service.test(param1)
    }
}

StatisticsService 抽象類 - 統(tǒng)計方法

ServiceManager 相關講解可以去 在曝光采集基礎上學習項目架構 看一下,這里就不重復講究了

interface StatisticsService {

	// 這里是實例化該Service,因為Hilt原因,采用了注入方式;可自行改為
    companion object {
        @JvmStatic
        val service: StatisticsService by lazy { ServiceManager.queryStatisticsService() }
    }

    // 測試
    fun test(param1: String?)
 }

StatisticsServiceImpl 具體類 - 方法實現(xiàn)

internal class StatisticsServiceImpl @Inject constructor() : StatisticsService {

    override fun track(eventName: String?, properties: MutableMap<String, String?>.() -> Unit) {
        track(eventName, mutableMapOf<String, String?>().apply(properties))
    }

    override fun track(eventName: String?, properties: Map<String, String?>) {
        if (eventName.isNullOrEmpty()) return
        SensorManger.track(eventName, properties)
    }
    
    /**
     * 神策埋點:測試
     */
    override fun test(param1: String?) {
        val properties = mutableMapOf<String, String>()
        properties["param1"] = "下雨天"
        SensorManger.track(EventName.test, properties)
    }
}

EventName 事件名稱管理

internal object EventName {
    const val test: String = "運營提供的埋點事件名稱"     // 測試
  }

興趣環(huán)節(jié)

StatisticsService 中海油另一種獲取接口實例的方式(主要用到了反射,先獲取實例,然后通過ARouter傳遞回去)

    companion object {
        @JvmStatic
        val service: StatisticsService? by lazy { ServiceManager.getService(StatisticsService::class.java) }
    }

ServiceManager 獲取Service文章來源地址http://www.zghlxwxcb.cn/news/detail-527658.html

import com.alibaba.android.arouter.launcher.ARouter

class ServiceManager {
    companion object {

        @JvmStatic
        fun <T> getService(service: Class<out T>): T {
            return ARouter.getInstance().navigation(service)
        }

        @JvmStatic
        fun getService(path: String): Any {
            return ARouter.getInstance().build(path).navigation()
        }
    }
}

到了這里,關于神策(Android)- 集成基礎埋點的整個過程的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!

本文來自互聯(lián)網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • 深度挖掘.c到.exe的整個過程,透過現(xiàn)象看本質

    深度挖掘.c到.exe的整個過程,透過現(xiàn)象看本質

    在ANSI C的任何一種實現(xiàn)中,存在兩個不同的環(huán)境。 第1種是翻譯環(huán)境,在這個環(huán)境中源代碼被轉換為可執(zhí)行的機器指令。 從 .c 到.exe的過程中需要依賴翻譯環(huán)境 第2種是執(zhí)行環(huán)境,它用于實際執(zhí)行代碼 編譯過程其實又被細分為三個環(huán)節(jié),即預編譯,編譯和匯編 組成一個程序的

    2024年02月03日
    瀏覽(17)
  • 深入了解Android藍牙Bluetooth【基礎+進階】

    也可以說是藍牙技術。所謂藍牙(Bluetooth)技術,實際上是一種短距離無線電技術,是由愛立信公司公司發(fā)明的。利用“藍牙”技術,能夠有效地簡化掌上電腦、筆記本電腦和移動電話手機等移動通信終端設備之間的通信,也能夠成功地簡化以上這些設備與因特網Internet之間的通

    2024年02月05日
    瀏覽(31)
  • 從您輸入網站 URL 到其在屏幕上完成加載的整個過程

    以下是從輸入網站 URL 到其在屏幕上完成加載的整個過程: 1. 用戶輸入網站 URL(例如,http://www.example.com)并按下“Enter”鍵。 2. 網絡協(xié)議根據(jù) URL 中的信息確定要訪問的服務器 IP 地址。 3. 網絡協(xié)議建立與該服務器的 TCP 連接。 4. 網絡協(xié)議通過 HTTP 請求向服務器發(fā)送請求。

    2024年02月07日
    瀏覽(24)
  • Android基礎到進階UI祖父級 ViewGroup介紹+實用

    Android基礎到進階UI祖父級 ViewGroup介紹+實用

    int sizeHeight = MeasureSpec.getSize(heightMeasureSpec); int modeWidth = MeasureSpec.getMode(widthMeasureSpec); int modeHeight = MeasureSpec.getMode(heightMeasureSpec); // 如果是warp_content情況下,記錄寬和高 int width = 0; int height = 0; //記錄每一行的寬度,width不斷取最大寬度 int lineWidth = 0; //每一行的高度,累加至h

    2024年04月16日
    瀏覽(18)
  • Android 60問60答 (一篇復習整個Android)

    Android 60問60答 (一篇復習整個Android)

    廠商開發(fā)平臺: los 黑莓(blackBerry) 第三方私有平臺:第三方開發(fā)供移動設備廠商使用 WindowsMobile 免費開源平臺: Android Symbian 充當用戶和設備之間的接口。 管理所用活動內存和資源共享 充當設備上所安裝的應用的主機 常由硬件制造商使用,因為它提供一個硬件抽象層,可

    2024年02月11日
    瀏覽(9)
  • Android高級UI進階之路(七)——SVG基礎使用(繪制中國地圖)

    Android高級UI進階之路(七)——SVG基礎使用(繪制中國地圖)

    Android高級UI進階之路(一) —— View的基礎知識 Android高級UI進階之路(二) —— 深入理解Android8.0 View的觸摸事件分發(fā)機制 Android高級UI進階之路(三) —— 理解View的工作原理及自定義View入門 Android高級UI進階之路(四) —— Paint渲染濾鏡xfermode使用 Android高級UI進階之路(五) —— Canva

    2024年02月05日
    瀏覽(31)
  • Android-高級-UI-進階之路-(七)-SVG-基礎使用-+-繪制中國地圖

    Android-高級-UI-進階之路-(七)-SVG-基礎使用-+-繪制中國地圖

    輸入搜索動畫 利用在線繪制 SVG 圖標網站 制作搜索圖標 可以自己隨意搗鼓繪制,繪制好了之后點擊視圖-源代碼,將 SVG 代碼復制出來保存成 search_svg.xml 在線轉換 svg2vector 點擊空白或者直接將 SVG 拖拽指定區(qū)域進行轉換 將轉換好的 Android 格式的 vector 導入 AS 開始制作動畫關聯(lián)

    2024年03月20日
    瀏覽(34)
  • 全球首個 AI 超級工程師:擁有全棧技能,一個指令就能完成整個開發(fā)過程

    全球首個 AI 超級工程師:擁有全棧技能,一個指令就能完成整個開發(fā)過程

    全球首位AI軟件工程師Devin是由初創(chuàng)公司Cognition推出的,它被認為是世界上第一個完全自主的AI軟件工程師[2][15]。Devin具備強大的編程和軟件開發(fā)能力,能夠在多個方面協(xié)助或完全獨立地完成軟件開發(fā)任務[15]。它的核心能力包括自學新語言、開發(fā)迭代App、自動Debug等[8][10],并且

    2024年04月09日
    瀏覽(18)
  • Android模板設計模式之 - 構建整個應用的BaseActivity

    Android模板設計模式之 - 構建整個應用的BaseActivity

    模式的定義 定義一個操作中的算法的框架,而將一些步驟延遲到子類中。使得子類可以不改變一個算法的結構即可重定義該算法的某些特定步驟。 模式的使用場景 1.多個子類有公有的方法,并且邏輯基本相同時。 2.重要、復雜的算法,可以把核心算法設計為模板方法,周邊

    2024年02月13日
    瀏覽(21)
  • 百度二面是什么級別的,Unity進階技巧 - RectTransform詳解,android開發(fā)需要哪些基礎

    百度二面是什么級別的,Unity進階技巧 - RectTransform詳解,android開發(fā)需要哪些基礎

    三、Pivot和Anchor的結合 在了解了Pivot和Anchor分別是什么后,我們就來看看Unity是如何使用這個兩個東西來控制UI的布局 第1種情況:兩個錨點重合時我們先來看看兩個錨點重合時的情況,這種情況是我們最常用也是最容易理解的方式 我們將Anchor錨點放在黑框的正中間,然后將

    2024年04月12日
    瀏覽(21)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包