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

Flutter Android端Apple SignIn的redirectUri配置问题

Android端Apple登录(sign_in_with_apple)redirectUri配置与后端处理指南

核心逻辑说明

Android端Apple登录依赖WebView完成授权流程,授权成功后Apple服务器会跳转到你指定的redirectUri。这个Uri的核心作用是引导用户从WebView回到你的Flutter应用,直接配置未做跳转处理的后端URL会出现“页面找不到”,本质是后端没有处理这个跳转请求。

服务器端redirectUrl必须实现的功能

  • 接收Apple返回的code(授权码)、state(防CSRF参数)等回调参数
  • 必须将用户重定向回你的Flutter应用,通过深度链接/应用链接实现
  • 可选但推荐:后端先验证Apple授权码的有效性,再跳转回应用(提升安全性)

结合Django的具体实现步骤

1. 配置Flutter应用的深度链接

在Android项目的AndroidManifest.xml中添加Intent Filter,确保应用能被深度链接唤起:

<intent-filter>
    <action android:name="android.intent.action.VIEW" />
    <category android:name="android.intent.category.DEFAULT" />
    <category android:name="android.intent.category.BROWSABLE" />
    <!-- 自定义scheme示例,可替换为你的应用专属scheme -->
    <data android:scheme="yourapp" />
    <!-- 若使用应用链接(更安全),需配置assetlinks.json,示例如下 -->
    <!-- <data android:scheme="https" android:host="yourdomain.com" android:pathPrefix="/apple-login-callback" /> -->
</intent-filter>

2. Django后端实现回调接口

编写视图函数处理Apple的回调,并重定向到深度链接:

from django.http import HttpResponseRedirect

def apple_login_callback(request):
    # 获取Apple返回的核心参数
    code = request.GET.get('code')
    state = request.GET.get('state')
    
    # 可选:验证state参数(需与前端发起登录时生成的state一致,防止CSRF攻击)
    # if state != request.session.get('apple_login_state'):
    #     return HttpResponseBadRequest("Invalid state")
    
    # 重定向回Flutter应用,携带授权码等参数
    deep_link = f"yourapp://apple-login-callback?code={code}&state={state}"
    return HttpResponseRedirect(deep_link)

在urls.py中配置路由:

from django.urls import path
from .views import apple_login_callback

urlpatterns = [
    # ...其他路由
    path('apple-login-callback/', apple_login_callback, name='apple-login-callback'),
]

3. 配置sign_in_with_apple的redirectUri

将webAuthenticationOptions中的redirectUri设为Django后端的回调URL,例如:

final credential = await SignInWithApple.getAppleIDCredential(
  scopes: [
    AppleIDAuthorizationScopes.email,
    AppleIDAuthorizationScopes.fullName,
  ],
  webAuthenticationOptions: WebAuthenticationOptions(
    // 替换为你的后端回调URL
    redirectUri: Uri.parse('https://yourdomain.com/apple-login-callback/'),
  ),
);

同时,在Apple开发者后台的Service IDs配置中,将这个后端URL添加到Return URLs列表。

关键注意事项

  • Apple开发者后台的Service ID必须正确配置Return URLs,否则授权后会跳转失败
  • 前端发起登录时需生成并传递state参数,后端必须验证该参数以防范CSRF攻击
  • 若使用应用链接(而非自定义scheme),需在你的域名根目录放置assetlinks.json文件并配置验证

内容的提问来源于stack exchange,提问作者1ManStartup

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 15:17:15