📅  最后修改于: 2023-12-03 15:36:34.367000             🧑  作者: Mango
SMS User Consent API 是一个 Android 平台提供的新功能,它可以允许开发者在用户明确许可的情况下读取和验证接收的短信内容。这个 API 为开发者提供了一种限制 SMS 自动填充漏洞并向用户显示更安全的验证方式的新途径。
要使用 SMS User Consent API 进行 SMS 验证,必须包括以下步骤:
在 AndroidManifest.xml 文件中添加以下权限:
<uses-permission android:name="android.permission.READ_SMS" />
同时在代码中请求访问权限:
if (checkSelfPermission(Manifest.permission.READ_SMS) != PackageManager.PERMISSION_GRANTED) {
requestPermissions(new String[]{Manifest.permission.READ_SMS}, PERMISSION_REQUEST_READ_SMS); // PERMISSION_REQUEST_READ_SMS 是自定义的请求码
}
通过以下代码请求用户许可:
private void requestSMSPermission() {
SmsRetriever.getClient(this).startSmsUserConsent(null /* 显示用的文本,可为空值 */);
}
此时用户会收到一条短信,该短信包含一个应用程序哈希码。应用程序哈希码用于将应用程序与需要验证的短信内容联系起来。
在等待用户允许的过程中,您可以使用以下代码在后台读取短信:
IntentFilter filter = new IntentFilter(SmsRetriever.SMS_RETRIEVED_ACTION);
registerReceiver(smsBroadcastReceiver, filter);
这里需要注意,您需要提供一个广播接收器来处理接收到的短信,该接收器应该包含以下代码用于提取短信中的哈希码:
if (SmsRetriever.SMS_RETRIEVED_ACTION.equals(intent.getAction())) {
Bundle extras = intent.getExtras();
if (extras == null) {
return;
}
Status smsRetrieverStatus = (Status) extras.get(SmsRetriever.EXTRA_STATUS);
switch (smsRetrieverStatus.getStatusCode()) {
case CommonStatusCodes.SUCCESS:
String consentIntent = (String) extras.get(SmsRetriever.EXTRA_CONSENT_INTENT);
startIntentSenderForResult(conversionIntentToDevice(consentIntent).getIntentSender(),
SMS_CONSENT_CODE, null, 0, 0, 0);
break;
case CommonStatusCodes.TIMEOUT:
break;
}
}
收到哈希码后,你可以将它与你的服务端验证短信的哈希码进行比较,来验证该短信是否为您的应用程序所期望的短信。
通过本文,你可以了解到如何使用 SMS User Consent API 在 Android 中进行 SMS 验证。如果您的应用程序需要进行 SMS 验证,本功能将提供给开发人员最新的工具,以更安全和更可靠的方式满足其需求。