我正在使用电容器 v3 测试版,在 web 和 iOS 中工作没有问题,但无法运行 android 应用程序。构建完成,但运行应用程序时出现此错误:
E/Capacitor/Console: File: http://localhost/vendor-es2015.js - Line 41296 - Msg: ERROR Error: Uncaught (in promise): Error: "Storage" plugin is not implemented on android
Error: "Storage" plugin is not implemented on android
Run Code Online (Sandbox Code Playgroud)
为了解决这个错误,我删除了存储插件并替换为离子/存储插件。但是当我使用其他插件(例如键盘)时,会出现错误消息,指出键盘插件未在 android 上实现。
所以我认为 Android 构建或项目配置存在一些问题。
这些是我的 package.json 中的 de node 依赖项
"@capacitor/android": "^3.0.0-beta.6",
"@capacitor/core": "^3.0.0-beta.1",
"@capacitor/storage": "^0.3.1",
Run Code Online (Sandbox Code Playgroud)
还有我的capacitor.config.json文件
{
"appId": "net.flowww.me",
"appName": "FLOWwwMe",
"bundledWebRuntime": false,
"npmClient": "npm",
"webDir": "www",
"cordova": {}
}
Run Code Online (Sandbox Code Playgroud)
iOS 版本适用于此配置。
我们在 nx monorepo 中使用 Angular,我们已经在其中使用 Capacitor 2.4 半年了。目前我们只使用安卓平台。现在,我们需要升级到 Capacitor 3.0。应用程序本身再次运行,但是,只要我使用任何插件,我总是会收到以下异常:ERROR Error: "Device" plugin is not implemented on android
这对于我尝试使用的每个插件都是一样的。所以,如果我使用存储插件,我只会为“存储”得到相同的例外。我详细地遵循了电容器迁移指南 ( https://capacitorjs.com/docs/v3/updating/3-0 ),但我不知道我哪里出错了。一般来说,只要我将使用电容器插件的任何代码注释掉,该应用程序现在就可以工作。使用插件的代码在升级之前确实有效。
根据迁移指南,我import '@capacitor/core';在 main.ts 文件中添加了,虽然我也尝试将它放在 app.module.ts 中,但也没有成功。我已经按照此处的建议为整个应用程序(根)和 nx-capacitor 应用程序(用@nxtend-capacitor 添加的电容器应用程序)安装了每个插件https://nxtend.dev/docs/capacitor/getting-started/ . 我还更新了 package.json 文件的电容器 cli、电容器核心和电容器 android 版本。此外,根据android升级指南,我还更新了gradle和android gradle插件。我也相应地更新了 Android 变量。
老实说,我对 Capacitor 没有太多经验或深入了解,我知道 Capacitor 3 到目前为止仍处于 Beta 阶段。但是,也许有人已经偶然发现了这个问题并找到了解决方案。我也不确定,这个问题是否可能是通过将这种 monorepo 方法与 nx. 有人在使用 Nx monorepo 时将 Capacitor 升级到 3.0 吗?
作为参考,这是电容器应用程序的当前 package.json:
{
"name": "app-cap",
"dependencies": {
"@capacitor-community/electron": "^1.3.2",
"@capacitor/android": "^3.0.0-rc.0",
"@capacitor/app": "^0.3.6",
"@capacitor/camera": "^0.4.3",
"@capacitor/cli": …Run Code Online (Sandbox Code Playgroud) 我正在努力为我的 NextJS 13 应用程序使用Capacitor ,该应用程序使用新的App router。
在使用 NextJS13 项目的新“/app”结构构建应用程序时,是否可以以某种方式创建“out”文件夹和“index.html”?
我阅读了Capacitor 文档并看过类似这样的博客,但没有成功。
我为 Ionic 和 Capacitor 构建了一个 Capacitor 插件,并将其发布到 NPM - 称之为它test1。然后我在我的 Ionic 5 项目中使用它并通过以下方式成功添加一个新的 Android 项目:
ionic build
ionic cap add android
ionic cap sync
Run Code Online (Sandbox Code Playgroud)
测试了一下,它有效。然后我尝试通过以下方式添加 iOS:
ionic build
ionic cap add ios
Run Code Online (Sandbox Code Playgroud)
然后我收到以下错误:
`[!] No podspec found for `Test1` in `../../node_modules/test1```
Run Code Online (Sandbox Code Playgroud)
但它失败了。我不明白为什么,因为Test1Plugin.podspec根目录中有一个具有相关依赖项的文件和一个ios/Podfile具有相关依赖项的文件。我还确保这两个文件都发布到 npm。
我尝试将文件名更改.podspec为Test1.podspec,但这是完全相同的问题。
我很困惑,希望有人能给我一些指示,因为我已经在这方面有一段时间并尝试了一切。
我需要分享一个 PDF 文件。我使用 CapacitorJS 来实现本机功能。
let shareRet = await Share.share({
title: 'See cool stuff',
text: 'Really awesome thing you need to see right meow',
url: 'http://ionicframework.com/',
dialogTitle: 'Share with buddies'
});
Run Code Online (Sandbox Code Playgroud)
这是从例子中得来的。但我的数据是 base64 字符串。有没有办法以附件形式分享?
我发现了很多相关问题,但没有关于Capacitor的具体问题。
当涉及到Capacitor时,我们是否需要添加 GoogleService-Info.plist 到:
ios/App或者ios/App/App这是一个离子电容器角度项目,我试图在其中构建一个电容器插件,以便我只能为所需的页面/屏幕禁用屏幕截图。
我getWindow().setFlags(WindowManager.LayoutParams.FLAG_SECURE, WindowManager.LayoutParams.FLAG_SECURE);在 MainActivity 内部onCreate()方法中使用过,它可以工作,但它禁用了整个应用程序的屏幕截图,这不是预期的结果。
MainAcitivity.java:
public class MainActivity extends BridgeActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_SECURE, WindowManager.LayoutParams.FLAG_SECURE);
// Initializes the Bridge
this.init(savedInstanceState, new ArrayList<Class<? extends Plugin>>() {{
// Additional plugins you've installed go here
// Ex: add(TotallyAwesomePlugin.class);
add(Contacts.class);
add(Screenshot.class);
}});
}
}
Run Code Online (Sandbox Code Playgroud)
现在我有电容器插件“screenshot-plugin”,其中我有两种方法可以“设置”和“清除”项目中特定页面/屏幕的标志。
截图.java:
@NativePlugin
public class Screenshot extends Plugin {
@PluginMethod
public void echo(PluginCall call) {
String value = call.getString("value");
JSObject ret = new JSObject();
ret.put("value", value);
call.success(ret);
}
@PluginMethod
public …Run Code Online (Sandbox Code Playgroud) 我正在使用电容器 3.0 通过 React 构建本机 iOS 应用程序。该应用程序的用户应首先登录。
我希望用户的登录由 Microsoft Azure ActiveDirectory B2C 处理,并按照本教程进行设置: https ://learn.microsoft.com/en-us/azure/active-directory/develop/tutorial-v2-react
此外,Microsoft 还提供了 Microsoft 身份验证库(MSAL,https://github.com/AzureAD/microsoft-authentication-library-for-js/blob/dev/lib/msal-browser/docs/login-user.md),登录时会重定向到由 microsoftonline.com 管理的屏幕以获取用户名和密码。这是微软的标准登录界面,可以定制品牌,但我没有做出这样的改变。只需使用标准的 MS UI。
此重定向在 Web/桌面浏览器中运行良好,因为它会在同一页面中打开 Microsoft 登录屏幕,而无需打开新的浏览器窗口。
但是,当从 Capacitor 构建的 iOS 应用程序内访问登录时,用户会被带到外部浏览器进行登录,这会破坏用户体验。当常规 React Web 浏览器(非 Capacitor)不是这种情况时,关于为什么 Capacitor 会启动浏览器进行登录,有什么想法吗?
我想添加插件ios-swipe-back,但不幸的是它 \xe2\x80\x99s 导致 Android 上出现问题。
我不需要 android 上的 xe2x80x99t 插件,但是只要我想重新同步,从 gradle 手动删除它就会重新创建它
\n有没有办法只为 1 个平台指定插件?
\n我看到了科尔多瓦的这个,但不知道电容器是否有类似的东西
\n\n谢谢
\n我正在使用此插件在 Ionic React/Capacitor 项目中实现 Google Play 游戏服务。
但是,当我调用 时GameServices.showLeaderboard("abcdefghijklmnopqr");,logcat 显示以下内容:
05-09 07:44:51.544 15437 15524 V Capacitor/Plugin: To native (Capacitor plugin): callbackId: 129018517, pluginId: GameServices, methodName: showLeaderboard
05-09 07:44:51.544 15437 15524 V Capacitor: callback: 129018517, pluginId: GameServices, methodName: showLeaderboard, methodData: {}
05-09 07:44:51.545 15437 15502 W GameServices: showLeaderboard called without providing leaderboardId
Run Code Online (Sandbox Code Playgroud)
正如你所看到的,它methodData是空的。
我完全不了解 java(因此我使用 Capacitor),但这是我能找到的唯一一段看起来远程相关的代码,android\src\main\java\GameServices.java在 GitHub 链接中。
@PluginMethod()
public void showLeaderboard(final PluginCall call) {
final String leaderboardId = call.getString("leaderboardId");
if (leaderboardId == …Run Code Online (Sandbox Code Playgroud) 我使用电容器 3 创建了一个新应用程序,在这个应用程序中我使用文件系统来执行一些功能。我创建了一个服务来处理与文件系统相关的所有内容,但是当我使用这些功能时遇到了一些问题。
当使用 Android 11 使用该函数创建目录时,mkdir()出现以下错误:
Unable to create directory, unknow reason.
同样在 Android 11 上,当我尝试仅使用它创建文件时,writeFile()它会返回以下错误:
FILE_NOTCREATED
对于 Android 10 及更低版本,该mkdir()函数可以正常工作,但该writeFile()函数会导致应用程序崩溃而不会出现任何错误。另外,如果我尝试更改Diretory.ExternalStorage为Diretory.External我可以在 Android 11 中创建一个目录,但在写入文件时它仍然会崩溃。
使用 Android 11,我尝试编写一个txt包含简单字符串和小型 Base64 字符串的文件。使用时Diretory.External我可以在新文件中写入base64字符串,但是使用时Diretory.ExternalStorage我收到FILE_NOTCREATED错误。
我完成了所有配置并按照文档中的步骤进行设置AndroidManifest.xml。
已经在不同 Android 版本的模拟器和手机上进行了多项测试。
测试用writeFile()
Android 11
base64 + Diretory.External = success
string + Diretory.External = crash
base64 + Diretory.ExternalStorage = error
string + ExternalStorage …Run Code Online (Sandbox Code Playgroud) capacitor ×11
capacitor-plugin ×11
android ×3
java ×2
azure-ad-b2c ×1
ionic5 ×1
javascript ×1
next.js ×1
next.js13 ×1
podspec ×1
reactjs ×1