将插件升级至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("操作成功");
+ }
+}