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

如何在Android与iOS中通过含加密数据的短信唤起应用

嘿,恭喜你iOS端已经顺利跑通了!下面我给你详细整理Android端的实现步骤,以及两端的完整落地方案,确保短信唤起和加密数据处理都稳稳的:

完整实现方案(iOS + Android)

iOS端(已验证可行,补充细节确认)

你当前的配置已经没问题,这里再帮你确认几个关键节点,避免后续踩坑:

  • URL Scheme配置:在Info.plist中已正确添加CFBundleURLSchemes,值为com.app.myapp,确保没有拼写错误
  • 数据处理逻辑:在SceneDelegate(iOS 13+)或AppDelegate中,通过以下方式提取加密数据:
    // SceneDelegate示例
    func scene(_ scene: UIScene, openURLContexts URLContexts: Set<UIOpenURLContext>) {
        guard let url = URLContexts.first?.url else { return }
        // 提取query部分,也就是你的加密数据
        if let encryptedData = url.query {
            // 这里处理加密数据,比如解密、跳转对应页面等
            handleEncryptedData(encryptedData)
        }
    }
    
  • 测试验证:可以用Xcode模拟器测试,执行命令:
    xcrun simctl openurl booted com.app.myapp://?test_encrypted_data_123
    

Android端实现步骤

Android端需要通过配置Intent Filter来让系统识别你的URL Scheme,具体操作如下:

1. Manifest配置

在你的主Activity(或者专门处理唤起的Activity)的<activity>标签内添加以下intent-filter:

<activity android:name=".MainActivity">
    <!-- 其他配置保持不变 -->
    <intent-filter>
        <action android:name="android.intent.action.VIEW" />
        <category android:name="android.intent.category.DEFAULT" />
        <category android:name="android.intent.category.BROWSABLE" />
        <!-- 指定你的URL Scheme -->
        <data android:scheme="com.app.myapp" />
    </intent-filter>
</activity>

注意:如果你的应用有多个Activity,建议把这个Intent Filter加到专门处理深链接的Activity,避免干扰主流程。

2. 提取加密数据

在Activity的onCreate或者onNewIntent方法中,获取并处理加密数据:

// onCreate中处理首次唤起
override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    intent?.let { handleDeepLink(it) }
}

// onNewIntent中处理应用后台时的唤起
override fun onNewIntent(intent: Intent?) {
    super.onNewIntent(intent)
    intent?.let { handleDeepLink(it) }
}

private fun handleDeepLink(intent: Intent) {
    val data = intent.data
    data?.let { uri ->
        // 提取query部分,也就是你的加密数据(因为链接格式是com.app.myapp://?<encrypted data>)
        val encryptedData = uri.query
        encryptedData?.takeIf { it.isNotEmpty() }?.let {
            // 这里处理加密数据,比如解密、跳转对应页面
            processEncryptedData(it)
        }
    }
}

3. 测试验证

可以通过adb命令测试:

adb shell am start -a android.intent.action.VIEW -d "com.app.myapp://?test_encrypted_data_123" com.app.myapp

注意:替换com.app.myapp为你的应用包名。

两端通用注意事项

  • 加密数据兼容性:确保加密数据不包含URL非法字符(比如空格、特殊符号),如果有需要提前做URL编码,接收端再解码
  • 异常处理:添加空值判断,避免因加密数据为空或格式错误导致崩溃
  • 短信链接识别:
    • iOS系统短信默认会识别URL Scheme链接,无需额外配置
    • Android大部分默认短信应用也能识别,但部分第三方短信应用可能需要用户手动点击“打开链接”或授权,建议在用户引导中说明
  • 长度限制:你提到加密数据不超过120字符,完全在URL Query的长度限制范围内,无需担心截断问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 10:09:14