.NET MAUI iOS中使用WebAuthenticator实现Facebook登录时,OAuth无法重定向到自定义URI Scheme的问题
我之前在做.NET MAUI iOS项目手动实现Facebook OAuth登录时也碰到过一模一样的问题,折腾了好一阵才摸清楚各个坑,给你分享几个排查和解决的关键点:
先检查iOS项目的Info.plist配置
这是最容易出问题的地方,你必须确保已经正确注册了自定义URI Scheme。打开项目的Info.plist,添加CFBundleURLTypes数组配置,示例如下(把myapp换成你自己的Scheme前缀,com.yourcompany.yourapp换成你的应用Bundle ID):<key>CFBundleURLTypes</key> <array> <dict> <key>CFBundleURLSchemes</key> <array> <string>myapp</string> </array> <key>CFBundleURLName</key> <string>com.yourcompany.yourapp</string> </dict> </array>另外保险起见,把你的Scheme也加到
LSApplicationQueriesSchemes数组里,让应用能正常识别这个自定义Scheme:<key>LSApplicationQueriesSchemes</key> <array> <string>myapp</string> </array>核对Facebook开发者后台的重定向URI配置
一定要在Facebook开发者后台的应用设置里,把你的完整重定向URI(比如myapp://fb-login)添加到「有效的OAuth重定向URI」列表中。这里必须完全匹配,大小写、斜杠、后缀一个都不能错,Facebook对这个的校验非常严格,漏加或者写错直接就会导致重定向失败。检查WebAuthenticator的调用代码
调用WebAuthenticator.Default.AuthenticateAsync时,传入的callbackUri必须和你所有配置的完全一致,而且要注意Facebook OAuth请求的参数格式:var authUri = new Uri($"https://www.facebook.com/v18.0/dialog/oauth?client_id=你的应用ID&redirect_uri=myapp://fb-login&response_type=code&scope=public_profile,email"); var callbackUri = new Uri("myapp://fb-login"); var authResult = await WebAuthenticator.Default.AuthenticateAsync(authUri, callbackUri);这里推荐用
response_type=code的授权码流程,比token流程在iOS上更稳定,能避免WebKit拦截参数的问题。调试时的小细节
如果你用真机调试,要确保应用的签名配置正确,Info.plist的修改已经同步到了签名的权限中;如果是模拟器,修改配置后最好清理项目、重启模拟器,避免缓存导致配置不生效。
内容来源于stack exchange

