【发布时间】:2019-12-14 20:27:34
【问题描述】:
我在将 PayPal 集成到 webview_flutter 时遇到了一个奇怪的问题。 这似乎与 WebView 有关,因为当我在 iOS Safari 或 Chrome 中打开它时,它工作正常。
我的问题是,在 PayPal 订阅过程的某个阶段(准确地说是最后一步),PayPal 窗口一直处于“处理中”。
首先,让我展示一下我的 WebView 部分:
WebView(
initialUrl: builtURL,
javascriptMode: JavascriptMode.unrestricted,
onWebViewCreated: (WebViewController webViewController) {
_controller = webViewController;
},
javascriptChannels: Set.from(
[
JavascriptChannel(
name: 'OnApprove',
onMessageReceived: (JavascriptMessage message) async {
}),
JavascriptChannel(
name: 'OnSuccess',
onMessageReceived: (JavascriptMessage message) {
}),
JavascriptChannel(
name: 'OnCancel',
onMessageReceived: (JavascriptMessage message) {
}),
JavascriptChannel(
name: 'OnError',
onMessageReceived: (JavascriptMessage message) {
}),
],
),
)
我使用 Javascript 通道能够从 JavaScript 调用我的 Dart 代码中的函数。
一切正常,我可以看到我的 PayPal 按钮,如下所示:
我也可以点击(按下)它们。
我可以在 Paypal 上登录,所有这些步骤都运行良好。
这很好,但是让我来告诉你,在我按下“同意并订阅”之后会发生什么(只是最后一步的行为很奇怪):
正在开始处理...
这就是它在 iOS 上卡住的地方(只是说...):
在 Android 上它会进入一个空白屏幕:
现在,我可以无限等待,什么都不会发生 - 它只是停留在每个平台的相应屏幕上。
如前所述,如果我在这些设备上的浏览器中打开它,它确实可以正常加载并正确完成 PayPal 流程,并返回到主 WebView 屏幕。
以前有人见过吗? 跟支付宝打开的“弹窗”有关系吗?
需要注意的是,如果我按右上角的“X”关闭 PayPal 弹出窗口,它仍然会触发“onCancel”事件 - 所以它不像被卡住 - 也许它只是无法加载页面什么的……
任何帮助将不胜感激!
编辑 1: 我设法在 Safari 中调试 WebView,这是我收到的错误消息。这些错误消息是有道理的。特别是 SAMEORIGIN 问题。也许这就是它最有可能失败的原因。 这是输出:
可能有人知道如何使用 WebView 解决这个问题吗? 提前致谢!
【问题讨论】:
标签: flutter dart android-webview wkwebview paypal-subscriptions