React Native结合Strapi发重置密码邮件时href自定义协议链接无法点击
问题原因
该问题核心是邮件客户端/服务商拦截自定义URL协议导致的,你观察到的href=3D"xxx"属于正常现象,不是URL格式错误:
- 邮件传输过程中会用quoted-printable编码处理特殊字符,
3D就是=符号的编码形式,客户端解析的时候会自动还原,不会影响链接的正常识别。 - 几乎所有主流移动端邮件客户端(包括iOS自带邮件、安卓自带邮件、Gmail、QQ邮箱等)为了防范安全风险,都会默认拦截非通用协议的链接,仅允许
http、https、mailto、tel这类公开通用协议的链接可点击,你使用的自定义app://协议不在白名单内,自然会被去掉可点击属性,显示为普通文本。
解决方案
推荐两种兼容性较高的替代方案:
- 使用HTTPS跳转页过渡
把邮件内的重置链接替换为你的业务服务的HTTPS地址,示例格式:https://你的业务域名/reset-password?token=<%= TOKEN %>,用户点击链接后打开的跳转页可做两层逻辑:- 移动端访问时,尝试唤起你的App的自定义协议,唤起失败则引导用户下载安装App
- 桌面端访问时,可引导用户用移动端操作,或直接提供网页端重置密码的入口
- 配置系统级关联链接
针对iOS配置通用链接(Universal Links)、针对安卓配置应用链接(App Links),这两种方案都是用HTTPS域名和你的App做官方关联,生成的重置链接本身就是HTTPS格式,不会被邮件客户端拦截,用户点击后会直接跳转到你的App内的重置密码页面,体验更流畅。
内容的提问来源于stack exchange,提问作者Cyanide
相关产品推荐
相关产品推荐

