-1

在我的 Android 应用程序中,我需要将用户的联系人链接到我们的 DB 用户帐户,以便用户可以单击特定联系人,该应用程序会将其转换为我们的内部用户 ID(如果存在),从而使沟通更加轻松和友好。

我考虑过 SMS OTP 来验证电话号码(电话号码 -> 内部用户 ID),但结果非常昂贵(估计每个月有 150k-300k 新用户)。我们的用户遍布全球。费用为每月 15,000 美元至 40,000 美元。不是我们负担得起的。

还在查看从以下位置获取用户的电话号码:

  • Google People API - 需要特殊权限,并且只提供未经验证的“关于我”电话号码。
  • Google Account API - 无法获取电话号码
  • Google 登录 SSO - 无法获取电话号码
  • Facebook 登录 SSO - 无法获取电话号码(已弃用)
  • WhatsApp 的 AccountKit(通过 WhatsApp 的 OTP) - 已弃用
  • WhatsApp API - 非常昂贵,在某些情况下与 SMS 相似,甚至不超过 SMS
  • 从 SIM 卡中提取- 不可靠,大部分不工作,未经验证,可以伪造

SMS OTP 是否有任何便宜的替代方案来获取经过验证的电话号码?

谢谢!

4

1 回答 1

1

有一个便宜的 hack(免费)可供您使用,但它可以被用户伪造,假设用户可以控制输入的电话号码。

因此,只有当您对在某些情况下怀有恶意的高级用户感到满意时,您才应该使用它。

这里的想法是 SMS 发送的成本将转移到用户而不是您的服务器。如今,在大多数国家/地区,一条短信都是免费的,或者在其中一些国家/地区非常便宜,因此“可能会收取运营商费用”之类的免责声明应该涵盖您。

您需要SMS Retriever API根据教程实现流程,但是当它说从您的服务器发送 SMS 时,您应该让用户从他们自己的设备发送该 SMS:

Intent intent = new Intent( Intent.ACTION_VIEW, Uri.parse( "sms:" + inputNumber)); 
                    intent.putExtra( "sms_body", otpContents); 
                    startActivity(intent);

或者,SmsManager如果您的应用有权发送短信,则使用。

SMS Retriever 流程​​的其余部分应该像教程中那样发生,允许您的应用程序验证用户输入的号码是否已由用户发送和接收。

于 2021-01-24T13:28:27.510 回答