Flutter - 展示新版付费墙编辑工具付费墙
如果您已使用付费墙编辑工具自定义了付费墙,则无需在移动应用代码中手动渲染即可将其展示给用户。此类付费墙同时包含了展示内容和展示方式。
本指南仅适用于新版付费墙编辑工具付费墙,需要 SDK v3.2.0 或更高版本。针对不同版本付费墙编辑工具设计的付费墙及远程配置付费墙,展示流程有所不同。
- 如需展示旧版付费墙编辑工具付费墙,请参阅 Flutter - 展示旧版付费墙编辑工具付费墙。
- 如需展示远程配置付费墙,请参阅 渲染由远程配置设计的付费墙。
Adapty Flutter SDK 提供两种展示付费墙的方式:
-
独立页面
-
嵌入式组件
以独立页面方式展示
要将付费墙作为独立页面展示,请对由 createPaywallView 方法创建的 view 调用 view.present() 方法。每个 view 只能使用一次。如需再次展示付费墙,请再次调用 createPaywallView 创建新的 view 实例。
在未重新创建的情况下复用同一 view 可能会导致 AdaptyUIError.viewAlreadyPresented 错误。
try {
await view.present();
} on AdaptyError catch (e) {
// handle the error
} catch (e) {
// handle the error
}
想了解 Adapty SDK 如何集成到移动应用中的真实示例?请查看我们的示例应用,其中展示了完整的配置过程,包括显示付费墙、完成购买以及其他基本功能。
关闭付费墙
当需要以编程方式关闭付费墙时,使用 dismiss() 方法:
try {
await view.dismiss();
} on AdaptyError catch (e) {
// handle the error
} catch (e) {
// handle the error
}
显示对话框
在 Android 上展示付费墙视图时,请使用此方法替代原生警告对话框。在 Android 上,常规警告会出现在付费墙视图后面,导致用户无法看到。此方法可确保在所有平台上正确地在付费墙上方显示对话框。
try {
final action = await view.showDialog(
title: 'Close paywall?',
content: 'You will lose access to exclusive offers.',
primaryActionTitle: 'Stay',
secondaryActionTitle: 'Close',
);
if (action == AdaptyUIDialogActionType.secondary) {
// User confirmed - close the paywall
await view.dismiss();
}
// If primary - do nothing, user stays
} catch (e) {
// handle error
}
配置 iOS 展示样式
通过向 present() 方法传递 iosPresentationStyle 参数来配置付费墙在 iOS 上的展示方式。该参数接受 AdaptyUIIOSPresentationStyle.fullScreen(默认值)或 AdaptyUIIOSPresentationStyle.pageSheet 值。
try {
await view.present(iosPresentationStyle: AdaptyUIIOSPresentationStyle.pageSheet);
} on AdaptyError catch (e) {
// handle the error
} catch (e) {
// handle the error
}
嵌入至组件层级
要将付费墙嵌入现有的组件树中,请直接在 Flutter 组件层级中使用 AdaptyUIPaywallPlatformView 组件。
AdaptyUIPaywallPlatformView(
paywall: paywall, // The paywall object you fetched
onDidAppear: (view) {
},
onDidDisappear: (view) {
},
onDidPerformAction: (view, action) {
},
onDidSelectProduct: (view, productId) {
},
onDidStartPurchase: (view, product) {
},
onDidFinishPurchase: (view, product, purchaseResult) {
},
onDidFailPurchase: (view, product, error) {
},
onDidStartRestore: (view) {
},
onDidFinishRestore: (view, profile) {
},
onDidFailRestore: (view, error) {
},
onDidFailRendering: (view, error) {
},
onDidFailLoadingProducts: (view, error) {
},
onDidFinishWebPaymentNavigation: (view, product, error) {
},
)
要使 Android 平台视图正常工作,请确保您的 MainActivity 继承自 FlutterFragmentActivity:
class MainActivity : FlutterFragmentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
}
}