在ReactNative中使用umeng统计以及埋点

前言

今天在学习reactnative使用友盟添加埋点时候发现视频有些方法过时了,在这里记录下最新方法。

1.申请友盟账号

首先去友盟官网申请个账号,并添加app获取Appkey

image.png

2.选择集成方式

在工程build.gradle配置脚本中buildscript和allprojects段中添加【友盟+】sdk 新maven仓库地址。如下图。

maven { url 'http://dl.bintray.com/umsdk/release' }

官方为https,下载失败了,于是改成了http

// Top-level build file where you can add configuration options common to all sub-projects/modules.

buildscript {
    repositories {
        maven { url 'http://dl.bintray.com/umsdk/release' }
    }
}
allprojects {
    repositories {
        maven { url 'http://dl.bintray.com/umsdk/release' }
    }
}

创建Module

为了实现模块化开发,新建一个Module,名为trackshare,可以自己定义。

1.添加权限

在trackshare Module中找到AndroidManifest.xml文件,并添加权限:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.trackshare">
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
    <uses-permission android:name="android.permission.READ_PHONE_STATE"/>
    <uses-permission android:name="android.permission.INTERNET"/>
</manifest>
2.添加依赖

在trackshare Module的build.gradle中添加依赖

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
    implementation 'androidx.appcompat:appcompat:1.1.0'
    implementation 'androidx.core:core-ktx:1.0.2'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'androidx.test.ext:junit:1.1.0'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.1'
    api  'com.umeng.umsdk:analytics:8.0.0'
    api  'com.umeng.umsdk:common:2.0.0'
    implementation "com.facebook.react:react-native:+"  // From node_modules
}

同时记得下载依赖,最后将trackshare添加到app Module的依赖中,这样就可以传到app中


image.png

初始化

在MainActivity.java中进行初始化以及重写onCrate()方法

import com.umeng.analytics.MobclickAgent;
 @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //以及发送间隔
        MobclickAgent.setSessionContinueMillis(1000);
        //统计的场景,此方法已经被抛弃
       // MobclickAgent.setScenarioType(this,MobclickAgent.EScenarioType.E_DUM_NORMAL);
  }
public void onResume() {
      super.onResume();
      MobclickAgent.onResume(this);
  }
  public void onPause() {
      super.onPause();
      MobclickAgent.onPause(this);
  }

开发JS Bridge

1.添加AnalyticsModule.java

友盟在github仓库umeng/React_Native_Compent
中已经提供相应的js Bridge,我们只需要将## React_Native_Compent/android/app/src/main/java/com/umeng/soexample/invokenative/AnalyticsModule.java导入到自己项目中即可
在E:\react\Github_RN\android\trackshare\src\main\java\com\example\trackshare\org中新建AnalyticsModule类,将代码拷贝进来即可。因为依赖react-native,所以我们需要在trackshare Module中的build.gradle添加react-native依赖

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
    implementation 'androidx.appcompat:appcompat:1.1.0'
    implementation 'androidx.core:core-ktx:1.0.2'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'androidx.test.ext:junit:1.1.0'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.1'
    api  'com.umeng.umsdk:analytics:8.0.0'
    api  'com.umeng.umsdk:common:2.0.0'
    implementation "com.facebook.react:react-native:+"  // From node_modules
}
2.添加TrackShareReactPackage.java

在trackshare\src\main\java\com\example\trackshare\org创建TrackShareReactPackage.java

package com.example.trackshare.org;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;

import com.facebook.react.ReactPackage;
import com.facebook.react.bridge.JavaScriptModule;
import com.facebook.react.bridge.NativeModule;
import com.facebook.react.bridge.ReactApplicationContext;
import com.facebook.react.shell.MainReactPackage;
import com.facebook.react.uimanager.ViewManager;

/**
 * Created by wangfei on 17/8/28.
 */

public class TrackShareReactPackage implements ReactPackage {

    @Override
    public List<ViewManager> createViewManagers(ReactApplicationContext reactContext) {
        return Collections.emptyList();
    }

    /**
     * 如需要添加本地方法,只需在这里add
     *
     * @param reactContext
     * @return
     */
    @Override
    public List<NativeModule> createNativeModules(
            ReactApplicationContext reactContext) {
        List<NativeModule> modules = new ArrayList<>();
        modules.add(new AnalyticsModule(reactContext));
        return modules;
    }
}
3.调用TrackShareReactPackage

在MainApplication.java中调用TrackShareReactPackage

@Override
        protected List<ReactPackage> getPackages() {
          @SuppressWarnings("UnnecessaryLocalVariable")
          List<ReactPackage> packages = new PackageList(this).getPackages();
            packages.add(new TrackShareReactPackage());
          return packages;
        }

这样TrackShareReactPackage就可以供reactnative使用

4.添加TrackShare.java

在trackshare\src\main\java\com\example\trackshare\org添加TrackShare.java

package com.example.trackshare.org;

import android.annotation.TargetApi;
import android.content.Context;
import android.os.Build;
import android.provider.SyncStateContract;

import com.umeng.commonsdk.BuildConfig;
import com.umeng.commonsdk.UMConfigure;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
public class TrackShare {
    /**
     * 注意: 即使您已经在AndroidManifest.xml中配置过appkey和channel值,
     * 也需要在App代码中调用初始化接口(如需要使用AndroidManifest.xml中配置好的appkey和channel值,UMConfigure
     * .init调用中appkey和channel参数请置为null)。
     *
     * @param context
     */
    public static void init(Context context) {
        initRN("react-native", "1.0");
        //接口一共五个参数,其中第一个参数为Context,第二个参数为友盟Appkey,第三个参数为channel,第四个参数为应用类型(手机或平板),第五个参数为push的secret(如果没有使用push,可以为空)
        UMConfigure.init(context, "5e129a8fcb23d2b684000af9", "official", UMConfigure.DEVICE_TYPE_PHONE, null);
        UMConfigure.setLogEnabled(BuildConfig.DEBUG);
    }

    @TargetApi(Build.VERSION_CODES.KITKAT)
    private static void initRN(String v, String t) {
        Method method = null;
        try {
            Class<?> config = Class.forName("com.umeng.commonsdk.UMConfigure");
            method = config.getDeclaredMethod("setWraperType", String.class, String.class);
            method.setAccessible(true);
            method.invoke(null, v, t);
        } catch (NoSuchMethodException | InvocationTargetException | IllegalAccessException | ClassNotFoundException e) {
            e.printStackTrace();
        }
    }
}

以上方法用来初始化接口

reactnative添加埋点

创建AnalyticsUtil.js文件

const {NativeModules} = require('react-native');
module.exports = NativeModules.UMAnalyticsModule;

在需要埋点的项目中引用AnalyticsUtil.js并添加埋点

import AnalyticsUtil from '../util/AnalyticsUtil'

 renderRightButton(){
    const {theme}=this.props;
    return <TouchableOpacity
      onPress={()=>{
        AnalyticsUtil.onEvent("SearchButtonClick");
        NavigatorUtil.gotoPage({theme},'SearchPage')}}
    >
      <View style={{marginRight:8,padding:5}}>
        <Ionicons
          name={'ios-search'}
          size={24}
          style={
            {
              marginRight:8,
              color:'white',
              alignSelf:'center'
            }
          }
        >
        </Ionicons>
      </View>
    </TouchableOpacity>
  }

效果

image.png

image.png

总结

对于android还是很懵逼的,不得不说搞reactnative还是很需要原生app同事的支持,接下来将利用umeng实现第三方登录以及分享等功能,觉得文章有用欢迎赞赏,谢谢!

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,560评论 4 361
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,104评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,297评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,869评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,275评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,563评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,833评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,543评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,245评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,512评论 2 244
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,011评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,359评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,006评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,062评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,825评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,590评论 2 273
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,501评论 2 268

推荐阅读更多精彩内容

  • 前言:今天记录一下常用的Git命令 先介绍一下Git的操作区域 工作区:我们正在修改,删除,添加代码的区域 暂存区...
    大lan猫阅读 204评论 0 0
  • 对于一位全职妈妈,在照顾家人的生活中,总是关注着各种食物的营养搭配,细数每种良好的生活习惯,都想每个人都有个健康的...
    伍零柒阅读 125评论 0 1
  • 女儿计划周二去看朋友家新买的猫,准备做一盒饼干带过去,正好家里新买的面包机等着她开工,所以昨天下午自己去就近的人人...
    ivy_gu阅读 325评论 0 0
  • 走遍德国第二单元自学笔记 今日内容: 1. 词汇 2. 冠词&代词 3. 名词的单复数 4. 形容词(做定语、表语...
    绵羊小如阅读 325评论 0 1