将插件升级至 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!");
+ }
+}