在 Flutter 中 - 从 Web 浏览器中的 PayPal 完成交易页面返回后,如何将用户推送到应用程序中的“谢谢”页面
Posted
技术标签:
【中文标题】在 Flutter 中 - 从 Web 浏览器中的 PayPal 完成交易页面返回后,如何将用户推送到应用程序中的“谢谢”页面【英文标题】:In Flutter - How do I push user to a "Thank-you" page in the app after returning from PayPal completed transaction page in web browser 【发布时间】:2019-12-11 14:38:16 【问题描述】:我的 Flutter 应用要求在应用外部的网络浏览器中通过 PayPal 进行付款。付款完成后,用户将返回应用程序并推送感谢页面。
我正在使用 _launchURL 从应用程序内启动网络浏览器,并使用以下示例 PayPal url 来定义付款。
https://www.paypal.com/cgi-bin/webscr?cmd=_xclick&business=email@domain.com¤cy_code=USD&amount=123.99&return=http://example.com&item_name=Document+Studio
使用 SystemChannels.lifecycle.setMessageHandler 我应该能够测试应用程序何时从 Web 浏览器返回 (AppLifecycleState.resumed)。但是如何从 Web 浏览器捕获返回 URL (http://example.com) 或其他一些值,以确认它来自交易完成页面并且应该被推送到应用程序感谢页面?
有没有办法将值从浏览器传回应用程序?
我的另一个想法是使用 Uni_links 来“深层链接”应用程序中的感谢页面,并将其作为 PayPal url 中的返回 url 参数?
我对解决方案有点迷茫,而且只是新手,所以任何建议/指导都将不胜感激。
【问题讨论】:
【参考方案1】:我假设您正在使用这个 _launchURL。做你想做的事,创建一个ThankYou 类并以下列方式调用它。您可能需要在调用ThankYou 屏幕之前检查结果值。我没有使用足够的 url 功能来知道它返回什么,如果有的话。可能是 null,某种 int,比如 404 url not found,也可能是 String?
import 'ThankYou.dart';
_launchURL() async
const url = 'https://flutter.io';
if (await canLaunch(url))
await launch(url).then((resultingValue)
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => ThankYou()));
);
else
throw 'Could not launch $url';
【讨论】:
我检查了 url_launcher 库,它说 launch() 函数返回一个布尔值。所以你会测试: if ( resultsValue == true ) Navigator...... pub.dev/documentation/url_launcher/latest/url_launcher/… 这解决了当用户从浏览器返回应用程序时将用户发送到ThankYou页面的问题。但是,即使用户在完成 PayPal 付款之前返回,它也会始终将用户返回到感谢页面。有没有办法捕获/设置返回的 url,以便我们知道用户从哪里返回?上面的 PayPal url 应该在成功时返回“example.com”。有没有办法捕获这个或另一种方法来处理这个问题?感谢 E.Bradford 的帮助 我不熟悉 PayPal 的 API,但我认为它提供了一种安全的技术来发布交易数据,例如 API 密钥、密码、金额等。因此,请研究 PayPal 编程 API 并查看特别是关于如何将交易发布到 Paypal 以及它将返回什么数据。从概念上讲,它返回的数据将被捕获在 resultsValue 变量中。我认为您实际上使用了错误的技术来调用 PayPal _launchUrl 非常初级。我建议改用 Flutter 库 Dio。更适合这项任务。 您可以在这里找到 Dio:github.com/flutterchina/dio 一旦您对 Dio 感到满意,然后转到 PayPal API 界面。以上是关于在 Flutter 中 - 从 Web 浏览器中的 PayPal 完成交易页面返回后,如何将用户推送到应用程序中的“谢谢”页面的主要内容,如果未能解决你的问题,请参考以下文章
浏览器和应用栏中的后退按钮在 Flutter Web 开发中不起作用