Flutter iOS - 重定向在第 3 方网站或我的自定义重定向页面中停滞

问题描述 投票:0回答:1

描述

使用 oauth2_client 包 连接到 第 3 方 API 。因此,我创建了一个自定义客户端,设置了一个网络服务器(因为第 3 方 API 要求重定向 URL 为 HTTPS),并配置了我认为正确的文件。这是尝试这一周的坚实一周,我已经走到了尽头,不知道下一步该研究什么,或者这是否是一个错误?我对此表示怀疑,但这是一个很大的障碍。

行为:我正在使用 oauth2 的隐式授权流程。单击第 3 方身份验证时,在我单击“授权”后,它会挂在第 3 方应用程序网站上。

我也遵循了一些 flutter-ios 文档来进行深度链接。使用“xcrun simctl openurl booted”进行测试 https://www.insightsforynab.com/oauth/redirect.html”工作正常,它重定向到我的应用程序。

在添加与 iOS 的真正深度链接之前,它通过了第 3 方身份验证页面,但随后浏览器将在我的 redirect.html 页面保持打开状态。

我的重定向 URL 已在第 3 方网站上正确标记:

我只想在他们进行身份验证后关闭该死的浏览器😂我可以在第 3 方网站上看到他们正在接收来自我的虚拟用户的身份验证请求并适当地添加它。只是无法完全冲过终点线。

我的问题:

  • 我错过了什么?
  • 如何使用 flutter 调试应用内浏览器?网络调用似乎在实际应用程序之外,因此我无法使用 DevTools 网络查看器查看它们

代码片段:

flutter 按钮组件调用 oauth helper:

TextButton(
              onPressed: () async {
                AccessTokenResponse resp = await oAuth2Helper.fetchToken();
                //print(resp.accessToken);
              },

第三方 API 的自定义客户端 --

import "package:oauth2_client/oauth2_client.dart";

class YNABClient extends OAuth2Client {
  YNABClient({required String redirectUri, required String customUriScheme})
      : super(
            authorizeUrl:
                'https://app.youneedabudget.com/oauth/authorize', //3rd party API
            tokenUrl:
                'https://app.youneedabudget.com/oauth/authorize', //3rd party API
            redirectUri: redirectUri,
            customUriScheme: customUriScheme);
}

使用 https 作为 customUriScheme 和我自己在网络服务器上的重定向文件来实例化客户端。然后调用 oauth 帮助程序并发送自定义客户端。在这里使用隐式授权流程--

YNABClient client = YNABClient(
    redirectUri: 'https://www.insightsforynab.com/oauth/redirect.html',
    customUriScheme: 'https');

OAuth2Helper oAuth2Helper = OAuth2Helper(
  client,
  grantType: OAuth2Helper.IMPLICIT_GRANT,
  clientId: APIKeys.clientKey,
);

iOS info.plist(与 androidManifest.xml 类似)--

<key>CFBundleURLTypes</key>
    <array>
        <dict>
            <key>CFBundleTypeRole</key>
            <string>Editor</string>
            <key>CFBundleURLName</key>
            <string>www.insightsforynab.com/oauth/redirect.html</string>
            <key>CFBundleURLSchemes</key>
            <array>
                <string>https</string>
            </array>
        </dict>
    </array>
<key>FlutterDeepLinkingEnabled</key>
<true/>

iOS runner.entitlements(启用深层链接)

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>com.apple.developer.associated-domains</key>
    <array>
        <string>applinks:insightsforynab.com</string>
    </array>
</dict>
</plist>

我的网络服务器上的 Apple 应用程序站点关联文件:

{
  "applinks": {
    "apps": [],
    "details": [
      {
        "appID": "[team-id].com.insights-for-ynab",
        "paths": [ "/oauth/redirect.html"]
      }
    ]
  }
}
flutter dart oauth-2.0 deep-linking flutter-ios
1个回答
0
投票

我也遇到同样的问题。如果您找到任何解决方案,请帮助我

© www.soinside.com 2019 - 2024. All rights reserved.