uniapp如何接入原生接口

在uniapp中如何调用Android和iOS的原生接口?需要引入哪些模块或插件?能否提供具体的代码示例和配置步骤?如果遇到兼容性问题该怎么解决?

2 回复

使用HBuilderX创建uni-app项目,在manifest.json中配置原生插件路径。通过uni.requireNativePlugin调用原生模块,支持Android/iOS。需注意平台差异和权限配置。


在 UniApp 中接入原生接口主要通过 条件编译插件机制 实现,支持调用 Android(Java/Kotlin)和 iOS(Objective-C/Swift)的原生功能。以下是具体方法:

1. 使用条件编译调用平台特定 API

在 UniApp 中,可通过 uni.getSystemInfoSync().platform 判断平台,并调用对应的原生 API(如 HTML5+ API):

// 示例:调用振动功能
plus.vibrate.vibrate(500); // 仅 App 端生效

2. 编写原生插件(关键步骤)

Android 端步骤:

  1. 创建 Module
    在 Android Studio 中创建 Android Library 模块,实现扩展功能。
  2. 编写 Java 代码
    继承 UniModule 类,使用 @UniJSMethod 注解暴露方法:
    public class MyModule extends UniModule {
        @UniJSMethod
        public void showToast(JSONObject options, UniJSCallback callback) {
            String message = options.optString("message");
            Toast.makeText(mUniSDKInstance.getContext(), message, Toast.LENGTH_LONG).show();
            callback.invoke("Toast shown: " + message);
        }
    }
    
  3. 注册插件
    assets/dcloud_uniplugins.json 中添加配置:
    {
      "plugins": [
        {
          "type": "module",
          "name": "my-toast",
          "class": "com.example.MyModule"
        }
      ]
    }
    

iOS 端步骤:

  1. 创建类继承 DCUniModule
    使用 WX_EXPORT_METHOD 宏暴露方法:
    #import "DCUniModule.h"
    [@interface](/user/interface) MyToastModule : DCUniModule
    [@end](/user/end)
    
    [@implementation](/user/implementation) MyToastModule
    WX_EXPORT_METHOD([@selector](/user/selector)(showToast:callback:))
    - (void)showToast:(NSDictionary *)options callback:(UniModuleKeepAliveCallback)callback {
        NSString *message = [options objectForKey:@"message"];
        UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"提示" message:message preferredStyle:UIAlertControllerStyleAlert];
        // 显示 Alert
        if (callback) callback(@{@"result": @"success"}, NO);
    }
    [@end](/user/end)
    
  2. 注册插件
    Podfile 中引入模块,并确保类被正确加载。

3. 在 UniApp 中调用插件

使用 uni.requireNativePlugin 调用自定义插件:

// 在 Vue 或 nvue 页面中使用
const myToast = uni.requireNativePlugin('my-toast');
myToast.showToast({
  message: 'Hello Native!'
}, (result) => {
  console.log(result);
});

注意事项:

  • 平台差异:Android 和 iOS 需分别开发插件,注意系统 API 差异。
  • 调试:使用 HBuilderX 真机调试,确保原生环境正常。
  • 文档参考:查阅 UniApp 官方文档中的 NativePlugin 开发指南 获取详细示例。

通过以上步骤,即可在 UniApp 中灵活调用原生功能,扩展应用能力。

回到顶部