Xamarin.Forms打开浏览器获取响应数据 实现Steam无后端OpenID iOS登录
适配iOS平台的Steam OpenID登录无后端实现方案
一、Xamarin.Essentials组件获取响应数据的可行性
- Xamarin.Essentials没有内置WebView组件,自带的
Browser组件仅负责打开系统浏览器,无法直接读取网页响应内容,但同库的WebAuthenticator组件完全适配你的场景,可以直接获取登录完成后的返回数据。 - 如果你选择自行嵌入Xamarin.Forms WebView或iOS原生WKWebView,也可以通过监听页面跳转事件拦截回调参数,拿到所需业务数据。
二、无后端实现应用回调的配置步骤
你不需要搭建后端服务,通过自定义URL Scheme绑定回调地址即可实现登录完成后直接跳转回你的应用,具体操作如下:
1. 配置iOS应用自定义URL Scheme
打开iOS项目的Info.plist文件,添加URL类型条目,配置URL Schemes为自定义字符串(例如你示例中的MYAPP,建议全小写避免兼容性问题)。
2. 修改Steam OpenID请求参数
将原有请求中的openid.realm和openid.return_to字段替换为你自定义Scheme的地址,示例如下:
https://steamcommunity.com/openid/login?openid.claimed_id=http://specs.openid.net/auth/2.0/identifier_select&openid.identity=http://specs.openid.net/auth/2.0/identifier_select&openid.mode=checkid_setup&openid.ns=http://specs.openid.net/auth/2.0&openid.realm=myapp://&openid.return_to=myapp://signin/
注意:
openid.realm和openid.return_to的前缀必须和你配置的URL Scheme完全一致,否则Steam会校验失败,无法完成跳转。
3. 两种方式获取返回数据
方式1:使用WebAuthenticator(推荐)
这是最简单的实现方案,无需自行处理WebView逻辑:
- 调用
WebAuthenticator.AuthenticateAsync方法,传入修改后的Steam登录地址和回调地址new Uri("myapp://signin/") - 登录完成后方法会直接返回
WebAuthenticatorResult对象,你可以直接从中读取所有OpenID返回的业务参数,包括Steam ID、验证状态等你需要的信息。
方式2:自行嵌入WebView实现
如果需要自定义登录页样式,可以采用该方案:
- 给WebView绑定
Navigating事件 - 在事件回调中判断当前跳转地址是否为你的回调地址
myapp://signin/,如果匹配则取消跳转,直接从URL的Query参数中解析所有返回的业务数据即可。
内容的提问来源于stack exchange,提问作者lightyears99
相关产品推荐
相关产品推荐

