如何在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
相关产品推荐
相关产品推荐

