示例-RN接口实际使用示例
<pre><code>import React from 'react';
import {NativeModules, Button, View, Platform, NativeEventEmitter} from 'react-native';
// 引入原生网络模块
const RNNetworkManager = NativeModules.RNNetworkManager;
// 引入原生设备模块
const RNDevice = NativeModules.RNDevice;
// 引入原生日志模块
const RNLogger = NativeModules.RNLogger;
// 引入原生蓝牙模块
const RNBluetooth = NativeModules.RNBluetooth;
// MQTT或蓝牙数据订阅推送
const RNDeviceDataUpdater = NativeModules.RNDeviceDataUpdater;
// 从原生网络模块引入授权常量
const { authorization, username, host } = RNNetworkManager.getConstants();
// 数据订阅推送
const dataUpdater = new NativeEventEmitter(NativeModules.RNDeviceDataUpdater);
const APITester = ({ navigation, route }) =&gt; {
// 原生设备模块相关
// 访问原生网络模块引入的常量, 当前有 authorization 及 登录的username
console.log('====== 网络模块引入的常量 ====== \n');
console.log(`authorization ${authorization} and uid ${username} host ${host}`);
const aDeviceTest = () =&gt; {
// 当前是否是有网络连接
RNDevice.isCurrentedToNetwork((isCurrentedToNetwork, error) =&gt; {
if (error) {
console.error(`当前是否是有网络连接 Error found! ${error}`);
} else {
console.log(`当前是否是有网络连接: ${isCurrentedToNetwork}`)
}
});
// 当前是否是使用WiFi网络
RNDevice.isCurrentConnectToWiFi((isCurrentConnectToWiFi, error) =&gt; {
if (error) {
console.error(`当前是否是使用WiFi网络 Error found! ${error}`);
} else {
console.log(`当前是否是使用WiFi网络: ${isCurrentConnectToWiFi}`)
}
});
// 获取当前系统连接的WiFi名称
RNDevice.currentWiFiName((wifiName, error) =&gt; {
if (error) {
console.error(`当前系统连接的WiFi名称 Error found! ${error}`);
} else {
console.log(`当前系统连接的WiFi名称: ${wifiName}`)
}
});
}
// 原生网络模块 网络API相关
const aApiTest = async () =&gt; {
try {
/*
api 测试 设备参数接口03
postMygroServer 即为请求mygro的服务器 仅为-北美为ces.growatt.com 或者ces-eu.growatt.com 为全球其它地区, 具体选择那个服务器,原生app根据用户信息自行判断
/imqtt/app/deviceInfo 为请求的path
sn': 'XCM0DCG00Q' 为请求的参数, 原生app会在此参数基础上增加lan或language,uid或userId以及Authorization字段
注意: response回调为原生非主线程
更多api请参考 便携电源api文档 http://20.6.1.98:4999/web/#/19/710
*/
const response = await RNNetworkManager.postMygroServer(
'/imqtt/app/deviceInfo',
{'sn': 'XCM0DCG00Q'},
);
console.log('====== response ====== \n');
console.log(JSON.stringify(response, null, 4));
} catch (e) {
console.log('====== error ====== \n');
console.error(e);
}
}
/*
MQTT或蓝牙数据订阅推送
此方法iOS暂未实现停止订阅推送的功能
*/
const aDataUpdaterTest = () =&gt; {
console.log('====== mqtt推送的数据 ====== \n');
dataUpdater.addListener('SUBSCRIBE', (data) =&gt; console.log(data))
RNDeviceDataUpdater.startUpdate('XCM0DCG00Q', '3')
// RNDeviceDataUpdater.stopUpdate()
// dataUpdater.removeEventListener('SUBSCRIBE', '');
}
// 原生日志模块 示例
const aLoggerTest = () =&gt; {
/*
下行记录用户将 XCM0DCG00Q 设备的DC开关打开的操作
记录会在app打开的时候,由原生集中上传到服务器
更多设置项参考:http://20.6.1.98:4999/web/#/19/714
*/
RNLogger.addDeviceOperateRecord('XCM0DCG00Q', 'dcSwitch', '1');
}
// 原生蓝牙模块
const aBluetoothTest = () =&gt; {
}
const onPressTestAPI = async () =&gt; {
Platform.OS === 'android'
? aApiTest()
: aApiTest();
};
const onPressTestDevice = () =&gt; {
Platform.OS === 'android'
? aDeviceTest()
: aDeviceTest();
};
return (
&lt;View&gt;
&lt;Button
title=&quot;点击发送api示例请求&quot;
color=&quot;#841566&quot;
onPress={onPressTestAPI}
/&gt;
&lt;Button
title=&quot;点击查询设备信息&quot;
color=&quot;#841544&quot;
onPress={onPressTestDevice}
/&gt;
&lt;Button
title=&quot;点击订阅MQTT示例&quot;
color=&quot;#121533&quot;
onPress={aDataUpdaterTest}
/&gt;
&lt;Button
title=&quot;点击进行蓝牙连接-待实现&quot;
color=&quot;#843433&quot;
onPress={onPressTestAPI}
/&gt;
&lt;/View&gt;
);
};
export default APITester;
</code></pre>