You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter集成Fitbit OAuth2.0授权后触发PlatformException(CANCELED)异常排查

Flutter集成Fitbit OAuth2.0授权后触发PlatformException(CANCELED)异常排查

看起来你已经走完了Fitbit授权的大半流程,明明在Fitbit账户里能看到App已经获得授权,但回调回到App时却触发了CANCELED异常,拿不到授权码,这种情况确实挺闹心的。我帮你梳理几个最可能的问题点,按顺序排查试试:

1. 先确认Fitbit开发者后台的回调地址是否完全匹配

这是最常见的坑!Fitbit后台配置的Redirect URI必须和你代码里的redirectUri完全一致,包括大小写、符号、scheme和host,一点都不能错。你代码里的redirectUri是com.joola.onefiftyplushealth://device-callback,去Fitbit开发者后台检查一下,是不是一模一样?如果后台填的是http开头或者少了device-callback,肯定会导致回调失败。

2. 验证授权URL的有效性

你已经打印了authUrl,把这个URL复制到手机浏览器里打开,手动完成Fitbit登录和授权,看看浏览器地址栏跳转后的URL里有没有code参数:

  • 如果能看到code,说明Fitbit的授权流程没问题,问题出在App接收回调的环节;
  • 如果看不到code,那说明你的授权URL参数有问题,比如scope编码错误、client_id填错了,再仔细核对一下这些参数。

3. 检查Android深层链接的Intent Filter配置

你的Manifest里的Intent Filter看起来基本正确,但有几个细节可以再确认:

  • 确保没有其他Activity也注册了com.joola.onefiftyplushealth这个scheme,否则回调请求可能被其他Activity拦截;
  • 可以尝试把Intent Filter的android:label改成和你的App相关的名称(比如android:label="OneFiftyPlusHealth"),虽然这个不是核心问题,但有时候会影响系统对链接的识别;
  • 确认你的MainActivity的launchMode是singleTop(你已经设置了),这个模式适合接收回调,不会创建新的Activity实例,避免回调丢失。

4. 调整FlutterWebAuth2的调用参数

试试在authenticate方法里添加popup: false参数,有些Android设备上默认的popup模式可能会导致回调无法正确传递到App:

final result = await FlutterWebAuth2.authenticate(
  url: authUrl,
  callbackUrlScheme: "com.joola.onefiftyplushealth",
  popup: false, // 添加这个参数
);

5. 排查版本兼容性问题

你用的是flutter_web_auth_2: ^4.1.0,可以尝试升级到最新版本,看看是不是版本里的已知bug导致的回调失败。另外,也可以检查一下Flutter SDK的版本,确保和插件版本兼容。

如果以上步骤都试过还是不行,可以试试清空App的缓存、重新安装App,或者换个测试设备试试,有时候系统缓存也会导致深层链接异常。

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.08 12:13:11