将插件升级至 Capacitor 3.0
对于需要升级到 Capacitor 3 的插件,这里列出了一些必要的和推荐的改动项。
核心 API 规划
当前核心团队在修改 Capacitor 内部实现时,很难避免对插件造成影响。由于 Capacitor 2 中大部分类和方法的 iOS/Android 实现都是公开的,我们观察到部分插件存在不符合预期的 API 使用情况。
在 Capacitor 3 开发过程中,我们将评估这个问题并创建官方的插件公共 API,相关文档将在此处发布。
Android 部分
使用新的 @CapacitorPlugin 注解
@NativePlugin 注解已弃用,推荐改用新的 @CapacitorPlugin 注解以支持新版权限 API。
name 属性保持不变。移除了 requestCodes 和 permissionRequestCode 属性。permissions 属性需要替换为 @Permission 注解列表,每个注解包含一组 manifest 字符串及其对应的 alias(在实现新版权限 API 前可暂不设置别名)。
-@NativePlugin(
+@CapacitorPlugin(
     name = "FooBar",
-    requestCodes = {
-        FooBarPlugin.REQUEST_SOME_METHOD,
-        FooBarPlugin.REQUEST_SOME_OTHER_METHOD
-    },
-    permissionRequestCode = FooBarPlugin.REQUEST_ALL_PERMISSIONS,
-    permissions = { Manifest.permission.FOO, Manifest.permission.BAR }
+    permissions = {
+        @Permission(strings = { Manifest.permission.FOO }, alias = "foo"),
+        @Permission(strings = { Manifest.permission.BAR }, alias = "bar")
+    })
 )
 public class FooBarPlugin extends Plugin {
     static final int REQUEST_SOME_METHOD = 10051;
     static final int REQUEST_SOME_OTHER_METHOD = 10052;
Android 请求码调整
Capacitor 3.0 实现了 AndroidX Activity Result API 并移除了手动定义的请求码。现在应该使用 @ActivityCallback 或 @PermissionCallback 注解提供回调方法,而非覆盖 handleOnActivityResult 或 handleRequestPermissionsResult。启动新 Activity 或权限请求时可以引用这些回调。
-static final int IMAGE_REQUEST = 10052;
 @PluginMethod
 public void chooseImage(PluginCall call) {
     Intent intent = new Intent(Intent.ACTION_PICK);
     intent.setType("image/*");
-    startActivityForResult(call, intent, IMAGE_REQUEST);
+    startActivityForResult(call, intent, "chooseImageResult");
 }
+@ActivityCallback
+private void chooseImageResult(PluginCall call, ActivityResult result) {
+    if (result.getResultCode() == Activity.RESULT_CANCELED) {
+        call.reject("Activity canceled");
+    } else {
+        Intent data = result.getData();
+        // 处理返回数据
+        call.resolve("Success!");
+    }
+}