能不能拿到我在安卓系统里收到的手机号码?我们正在尝试通过发送SMS并从运营商那里获取来验证用户的手机号码,但下一步涉及到通过读取SMS进行身份验证。我们面临的问题是,如果我从任何其他移动设备发送相同的消息,则无法验证发起SMS号码。它盲目地读取短信。
发布于 2020-02-29 19:47:42
使用SMS Retriever API获取发送者的手机号码将是一个很好的选择,以避免错误的SMS检索。但不幸的是,您无法获得发送者的手机号码的短信,您已经检索到此接口到现在的。此功能可能会在未来的版本中提供。
但是如果你已经有了OTP验证机制,那也没什么好担心的,因为...
BONUS
谷歌还发布了一个名为SMS用户同意API的新API,它可以通过一次点击自动填写OTP。幸运的是,这个API还提供了发送者的手机号码过滤功能。这意味着,如果你的短信提供商从一个特定的手机号码向你发送短信,你可以在你的代码中指定它,它将只读取从该手机号码接收的短信。
参考:
短信检索器接口:https://developers.google.com/identity/sms-retriever/overview
短信用户同意接口:https://developers.google.com/identity/sms-retriever/user-consent/overview
发布于 2020-03-04 23:56:26
我实际上在我的项目中实现了它。
我的.xml (清单) ->中有一个广播接收器
android:name=".messaging.SmsReceiver"
android:enabled="true"
android:exported="true"
android:permission="android.permission.BROADCAST_SMS">
<intent-filter android:priority="999">
<action android:name="android.provider.Telephony.SMS_RECEIVED"/>
</intent-filter>
</receiver>
and you can get it doing this in the onReceive method:
String format = "";
List<String> contents = new ArrayList<>();
for (int i = 0; i < pdus.length; i++) {
SmsMessage message;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
format = bundle.getString("format");
message = getFromPdu(pdus, format, i);
} else {
message = getFromPdu(pdus, i);
}
contents.add(Strings.emptyToNull(CharMatcher.whitespace().trimFrom(message.getMessageBody())));
sourceNumber = message.getDisplayOriginatingAddress();
} https://stackoverflow.com/questions/54702908
复制相似问题