范大德 4e3f1c7cb8 feat(事件系统): 重构事件处理逻辑并添加通用事件触发功能
重构事件数据结构,将 eventName 改为 type 并优化参数传递方式
添加通用 fireEvent 方法支持多种事件类型触发
更新文档说明新增的 uploadLog 事件
2026-01-16 12:01:46 +08:00

ShutoApi Cordova Plugin

这是一个Cordova插件用于在前端和原生代码之间进行通信特别是提供了后台触发前端导航的功能。

安装

cordova plugin add /path/to/cordova-shuto-api

API参考

方法

close()

关闭当前功能或视图。

cordova.plugins.ShutoApi.close(
    function() {
        console.log('Close success');
    },
    function(error) {
        console.error('Close error:', error);
    }
);

getUserInfo()

获取用户信息。

cordova.plugins.ShutoApi.getUserInfo(
    function(userInfo) {
        console.log('User info:', userInfo);
    },
    function(error) {
        console.error('Get user info error:', error);
    }
);

事件

navigate

当后台需要前端导航到指定路由时触发。

事件数据:

  • route: 需要导航到的路由路径
  • params: 导航参数(可选,对象类型)

uploadLog

当后台需要前端上传日志时触发。

事件监听示例

基本用法

// 监听导航事件
cordova.plugins.ShutoApi.addEventListener('navigate', function(data) {
    console.log('需要导航到:', data.route);
    console.log('导航参数:', data.params);
    
    // 在这里实现前端导航逻辑
    // 例如如果使用Vue Router:
    // router.push({ path: data.route, query: data.params || {} });
    
    // 例如如果使用React Router:
    // history.push(data.route, data.params || {});
    
    // 例如如果使用React Router v6:
    // navigate(data.route, { state: data.params || {} });
});

// 监听日志上传事件
cordova.plugins.ShutoApi.addEventListener('uploadLog', function() {
    console.log('触发日志上传');
    
    // 在这里实现日志上传逻辑
    // 例如,发送到日志服务器
    // uploadToLogServer();
});

移除事件监听

// 定义事件处理函数
function handleNavigate(data) {
    console.log('需要导航到:', data.route);
    // 处理导航逻辑
}

// 添加事件监听
cordova.plugins.ShutoApi.addEventListener('navigate', handleNavigate);

// 移除事件监听
cordova.plugins.ShutoApi.removeEventListener('navigate', handleNavigate);

原生代码使用

iOS

在iOS原生代码中可以通过以下方式触发事件

// 假设你有一个ShutoApi实例
ShutoApi* pluginInstance = [[ShutoApi alloc] init];

// 触发导航事件 - 无参数调用
[pluginInstance navigateToRoute:@"/home/dashboard" parameters:nil];

// 触发导航事件 - 带参数调用
NSDictionary* params = @{
    @"userId": @"12345",
    @"showDetails": @YES
};
[pluginInstance navigateToRoute:@"/user/profile" parameters:params];

// 触发日志上传事件
[pluginInstance fireEvent:@"uploadLog" parameters:nil];

Android

在Android原生代码中可以通过以下方式触发事件

// 假设你有一个ShutoApi实例
ShutoApi pluginInstance = new ShutoApi();

try {
    // 触发导航事件 - 无参数调用
    pluginInstance.navigateToRoute("/home/dashboard", null);

    // 触发导航事件 - 带参数调用
    JSONObject params = new JSONObject();
    params.put("userId", "12345");
    params.put("showDetails", true);
    pluginInstance.navigateToRoute("/user/profile", params);

    // 触发日志上传事件
    pluginInstance.fireEvent("uploadLog", null);
} catch (JSONException e) {
    e.printStackTrace();
}

注意事项

  1. 确保在使用事件监听之前Cordova设备已经准备就绪。可以在deviceready事件后进行初始化:
document.addEventListener('deviceready', function() {
    // 在这里设置事件监听
    cordova.plugins.ShutoApi.addEventListener('navigate', function(data) {
        // 处理导航事件
    });
}, false);
  1. 当不再需要事件监听时,记得移除它,以避免内存泄漏。

  2. 事件监听是持久化的,只要插件处于活动状态,就会保持监听。

Description
No description provided
Readme 123 KiB
Languages
Objective-C 52%
Java 36.1%
JavaScript 11.9%