NativeModules--bridge

Java类型
Boolean – Boolean
Integer – Number
Double – Number
Float – Number
String – String
Callback – function
ReadableMap – Object
ReadableArray – Array
以Talkingdata为例:
1.初始化项目
Android
1)创建一个java类(导包 alt/option + enter) ComTalkingdataModule.java
公开方法:@ReactMethod-桥接方法的返回类型始终是void,React Native桥是异步的,因此将结果传递给JavaScript的唯一方法是使用回调或发射事件;

package com.reactlibrary;

import android.content.Context;
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 com.facebook.react.bridge.Callback;
import com.analytics.Agent;

import java.util.Map;

public class ComTalkingdataModule extends ReactContextBaseJavaModule {

  private final ReactApplicationContext reactContext;

  public ComTalkingdataModule(ReactApplicationContext reactContext) {
    super(reactContext);
    this.reactContext = reactContext; // 上下文
  }

  @Override
  public String getName() {
    return "ComTalkingdataModule";  // 返回类的名称,用于JS调用 NativeModules.ComTalkingdataModule
  }

  /**
  * 注册talkingdata
  * @param talkingDataKey 当前注册的key 
  */
  @ReactMethod
  public void registerTalkingData(String talkingDataKey, Integer hostUrlType) {

    Agent.init(reactContext, talkingDataKey, hostUrlType,
         new IThirdPartyAgent() {
             @Override
             public boolean onPageStart(Context context, String pageId) {
                  return true;
             }
             @Override
             public boolean onPageEnd(Context context, String pageId) {
                  return true;
             }
             @Override
             public boolean onEvent(Context context, String eventId, String label, Map args) {
                  return true;
             }
             @Override
              public boolean onError(Context context, Throwable throwable) {
                  return true;
              }
              @Override
              public void setReportUncaughtExceptions(boolean report) {

              }
         });
  }

  /**
  * 开始页面追踪
  *  @param pageId 当前页面的ID
  *  @param refPageID string 来源页页面ID
  *  @param param  NSDictionary  该页面需要传递的其他参数,具体的传递规则见"商城app埋点"Excel文档
  */
  @ReactMethod
  public void startTackPageWithPageId(String pageId, String refPageID, ReadableMap param) {
    Agent.onPageStart(new PageBaseArg<Object>(pageId, param));
  }

  /**
  * 结束页面追踪
  * @param pageId 当前页面的ID
  * @param refPageID string
  * @param param NSDictionary 该页面需要传递的其他参数
  */
  @ReactMethod
  public void endTracPageWithPageId(String pageId, String refPageID, ReadableMap param) {
      Agent.onPageEnd(new PageBaseArg<Object>(pageId, param));
  }

  /**
  * 记录事件的数据
  * @param eventId 当前的事件ID
  * @param pageID 当前页面ID
  * @param refPageID string 来源页页面ID
  * @param businessParam 需要传递的业务相关的参数(具体传递规则详见“商城app埋点”的Excel文档)
  */
  @ReactMethod
  public void postEventWithEventId(String eventId, String pageID, String refPageID, ReadableMap businessParam) {
      Agent.onEvent(new EvenBaseArg(eventId, pageID, businessParam));
  }

   /**
   * 上传
   */
   @ReactMethod
   public void uploadLocalSessionDataFile() {
        Agent.report();
   }
}

2)注册模块 ComTalkingdataPackage.java


package com.reactlibrary;

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

import com.facebook.react.ReactPackage;
import com.facebook.react.bridge.NativeModule;
import com.facebook.react.bridge.ReactApplicationContext;
import com.facebook.react.uimanager.ViewManager;
import com.facebook.react.bridge.JavaScriptModule;
public class ComTalkingdataPackage implements ReactPackage {
    @Override
    public List<NativeModule> createNativeModules(ReactApplicationContext reactContext) {
      return Arrays.<NativeModule>asList(new ComTalkingdataModule(reactContext));
    }

    // Deprecated from RN 0.47
    public List<Class<? extends JavaScriptModule>> createJSModules() {
      return Collections.emptyList();
    }

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

第二步:配置app
1)android > setting.gradle

include ':react-native-talkingData'
project(':react-native-talkingData').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-talkingData/android')

2)android > app > build.gradle

dependencies{
	compile project(':react-native-talkingData')
}

3)android > app > src > main > java > com > MainApplication.java // 初始化

import com.reactlibrary.ComTalkingdataPackage;
public class MainApplication extends YApplication {
 	public final ReactNativeHost mReactNativeHost = new ReactNativeHost(this) {
 		@Override
    	 protected List<ReactPackage> getPackages() {
			return Arrays.<ReactPackage>asList(
				new MainReactPackage(),
				new ComTalkingdataPackage(),
			);
		}

		@Override
   		 public void onCreate() {
			mReactInstanceManager.registerAdditionalPackages(Arrays.<ReactPackage>asList(
					new ComTalkingdataPackage(),
			));
		}
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值