将插件升级至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注解提供回调方法,这些回调可在启动新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("用户取消操作");
+    } else {
+        Intent data = result.getData();
+        // 处理返回数据
+        call.resolve("操作成功");
+    }
+}