@capacitor/app
App API 负责处理应用的高级状态和事件。例如,当应用进入和离开前台时,该 API 会发出事件,处理深度链接,打开其他应用,并管理持久化的插件状态。
安装
npm install @capacitor/app
npx cap sync
iOS
要能够通过自定义协议打开应用,您需要先注册该协议。您可以通过编辑 Info.plist
文件并添加以下行来实现。
<key>CFBundleURLTypes</key>
<array>
<dict>
<key>CFBundleURLName</key>
<string>com.getcapacitor.capacitor</string>
<key>CFBundleURLSchemes</key>
<array>
<string>mycustomscheme</string>
</array>
</dict>
</array>
Android
要能够通过自定义协议打开应用,您需要先注册该协议。您可以通过在 AndroidManifest.xml
的 activity
部分添加以下行来实现。
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="@string/custom_url_scheme" />
</intent-filter>
custom_url_scheme
的值存储在 strings.xml
中。当添加 Android 平台时,@capacitor/cli
会添加应用的包名作为默认值,但 可以通过编辑 strings.xml
文件来替换。
示例
import { App } from '@capacitor/app';
App.addListener('appStateChange', ({ isActive }) => {
console.log('应用状态发生变化。是否处于活动状态?', isActive);
});
App.addListener('appUrlOpen', (data) => {
console.log('应用通过 URL 打开:', data);
});
App.addListener('appRestoredResult', (data) => {
console.log('恢复的状态:', data);
});
const checkAppLaunchUrl = async () => {
const { url } = await App.getLaunchUrl();
console.log('应用通过 URL 打开:' + url);
};
配置
属性 | 类型 | 描述 | 默认值 | 始于 |
---|---|---|---|---|
disableBackButtonHandler | boolean | 禁用插件的默认返回按钮处理。仅适用于 Android。 | false | 7.1.0 |
示例
在 capacitor.config.json
中:
{
"plugins": {
"App": {
"disableBackButtonHandler": true
}
}
}
在 capacitor.config.ts
中:
/// <reference types="@capacitor/app" />
import { CapacitorConfig } from '@capacitor/cli';
const config: CapacitorConfig = {
plugins: {
App: {
disableBackButtonHandler: true,
},
},
};
export default config;
API
exitApp()
getInfo()
getState()
getLaunchUrl()
minimizeApp()
toggleBackButtonHandler(...)
addListener('appStateChange', ...)
addListener('pause', ...)
addListener('resume', ...)
addListener('appUrlOpen', ...)
addListener('appRestoredResult', ...)
addListener('backButton', ...)
removeAllListeners()
- 接口
- 类型别名
exitApp()
exitApp() => Promise<void>
强制退出应用。这应仅与 Android 的 backButton
处理程序结合使用,以便在导航完成时退出应用。
Ionic 自身会处理此操作,因此如果您使用 Ionic,则无需调用此方法。
始于: 1.0.0
getInfo()
getInfo() => Promise<AppInfo>
返回有关应用的信息。
返回值:
Promise<AppInfo>
始于: 1.0.0
getState()
getState() => Promise<AppState>
获取当前应用状态。
返回值:
Promise<AppState>
始于: 1.0.0
getLaunchUrl()
getLaunchUrl() => Promise<AppLaunchUrl | undefined>
获取应用启动时使用的 URL(如果有)。
返回值:
Promise<AppLaunchUrl>
始于: 1.0.0
minimizeApp()
minimizeApp() => Promise<void>
最小化应用。
仅适用于 Android。
始于: 1.1.0
toggleBackButtonHandler(...)
toggleBackButtonHandler(options: ToggleBackButtonHandlerOptions) => Promise<void>
在运行时启用或禁用插件的返回按钮处理。
仅适用于 Android。
参数 | 类型 |
---|---|
options |
|
始于: 7.1.0
addListener('appStateChange', ...)
addListener(eventName: 'appStateChange', listenerFunc: StateChangeListener) => Promise<PluginListenerHandle>
监听应用或活动状态的变化。
在 iOS 上,当原生的 UIApplication.willResignActiveNotification 和 UIApplication.didBecomeActiveNotification 事件触发时,此事件会被触发。 在 Android 上,当 Capacitor 的 Activity 的 onResume 和 onStop 方法被调用时,此事件会被触发。 在 Web 上,当文档的 visibilitychange 事件触发时,此事 件会被触发。
参数 | 类型 |
---|---|
eventName | 'appStateChange' |
listenerFunc |
|
返回值:
Promise<PluginListenerHandle>
始于: 1.0.0
addListener('pause', ...)
addListener(eventName: 'pause', listenerFunc: () => void) => Promise<PluginListenerHandle>
监听应用或活动暂停时的事件。
在 iOS 上,当原生的 UIApplication.didEnterBackgroundNotification 事件触发时,此事件会被触发。 在 Android 上,当 Capacitor 的 Activity 的 onPause 方 法被调用时,此事件会被触发。 在 Web 上,当文档的 visibilitychange 事件触发且 document.hidden 为 true 时,此事件会被触发。
参数 | 类型 |
---|---|
eventName | 'pause' |
listenerFunc | () => void |
返回值:
Promise<PluginListenerHandle>
始于: 4.1.0
addListener('resume', ...)
addListener(eventName: 'resume', listenerFunc: () => void) => Promise<PluginListenerHandle>
监听应用或活动恢复时的事件。
在 iOS 上,当原生的 UIApplication.willEnterForegroundNotification 事件触发时,此事件会被触发。 在 Android 上,当 Capacitor 的 Activity 的 onResume 方法被调用时,此事件会被触发,但仅在 resume 事件首先触发之后。 在 Web 上,当 文档的 visibilitychange 事件触发且 document.hidden 为 false 时,此事件会被触发。
参数 | 类型 |
---|---|
eventName | 'resume' |
listenerFunc | () => void |
返回值:
Promise<PluginListenerHandle>
始于: 4.1.0
addListener('appUrlOpen', ...)
addListener(eventName: 'appUrlOpen', listenerFunc: URLOpenListener) => Promise<PluginListenerHandle>
监听应用打开 URL 的事件。这既处理自定义 URL 方案链接,也处理您的应用处理的 URL(iOS 上的通用链接和 Android 上的应用链接)。
参数 | 类型 |
---|---|
eventName | 'appUrlOpen' |
listenerFunc |
|
返回值:
Promise<PluginListenerHandle>
始于: 1.0.0
addListener('appRestoredResult', ...)
addListener(eventName: 'appRestoredResult', listenerFunc: RestoredListener) => Promise<PluginListenerHandle>
如果应用启动时带有先前持久化的插件调用数据,例如在 Android 上当活动返回到已关闭的应用时,此调用将返回应用启动时携带的任何数据,转换为插件调用的结果形式。
在 Android 上,由于低端设备的内存限制,如果您的应用启动了一个新活动,操作系统可能会终止您的应用以减少内存消耗。
例如,这意味着相机 API(它启动一个新活动来拍照)可能无法将数据返回给您的应用。
为避免这种情况,Capacitor 在启动时存储所有恢复的活动结果。您应该为 appRestoredResult
添加一个监听器,以便处理在您的应用未运行时传递的任何插件调用结果。
一旦您有了该结果(如果有),您可以更新 UI 以恢复用户的逻辑体验,例如导航或选择正确的标签页。
我们建议每个使用依赖于外部活动(例如相机)的插件的 Android 应用都处理此事件和过程。
参数 | 类型 |
---|---|
eventName | 'appRestoredResult' |
listenerFunc |
|
返回值:
Promise<PluginListenerHandle>
始于: 1.0.0
addListener('backButton', ...)
addListener(eventName: 'backButton', listenerFunc: BackButtonListener) => Promise<PluginListenerHandle>