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(),
));
}
}
}