【问题标题】:SMS Based Validation for Android - Closing the SMS window after sending基于 SMS 的 Android 验证 - 发送后关闭 SMS 窗口
【发布时间】:2013-09-19 23:13:34
【问题描述】:

我正在寻找一些关于开发应用内 SMS 验证解决方案的快速反馈,作为我的 Android 应用注册过程的一部分。我团队中处理这个问题的人似乎遇到了麻烦。

免责声明:我自己不是开发人员,只有基本的编码知识。

基本上应该是这样的:

  1. 用户输入电话号码

  2. 用户选择“通过短信验证号码”按钮

  3. SMS 撰写窗口已启动。消息字段已预先填充 验证码。使用 Twilio 预填充的收件人号码 连接到我的服务器的电话号码

  4. 一旦用户点击发送,短信窗口应该会自动关闭 成功发送消息后,将它们返回到我的应用程序 注册过程,它将等待接收 来自服务器的响应或每隔一段时间检查它是否有 允许(即电话号码已验证)移动到下一个 注册阶段。

问题出在第 4 步,因为我的开发人员表示他没有与消息传递应用程序绑定的对象,因此他无法在其上调用函数...这是我的编码知识不足的地方,所以我想听听其他人如何(或将如何)解决这个问题。我确定这是可以解决的。

谢谢!

【问题讨论】:

  • 我花了相当多的时间来尝试实现这一点,并且仅在要么让 SMS 编写器预填充数据获得成功它在发送后返回到我的应用程序。将其设置为返回到我的应用程序总是会阻止作曲家预先填充。我希望你能顺利解决这个问题,并期待奇迹出现,但我很确定我已经用尽了所有可用的选项,但无济于事。
  • 这是它的错误:code.google.com/p/android/issues/detail?id=58153 有趣的是,他们声明这仅在 Jelly Bean 4.3 之后发生。如果情况确实如此,那么如果用户使用的是以前的版本,那么您可能可以有条件地按照您(和我)想要的方式运行它,然后仅在 4.3 设备上将其发送到应用程序内。
  • 我的开发人员实际上只是想出了一个似乎可行的解决方案。由于我们在技术上无法控制另一个应用程序(在这种情况下是短信编写器),我们所做的只是让我们的应用程序在发送消息后在短信编写器之上重新打开。我很好奇是否有人认为这会导致任何不良行为或问题,因为它似乎工作得很好。
  • 您如何检测到消息已发送,以便您的应用知道重新打开?

标签: android sms


【解决方案1】:

不要使用短信应用意图,而只是在您的应用中发送

PendingIntent pi = PendingIntent.getActivity(ccc, 0, new Intent(), 0);
SmsManager sms = SmsManager.getDefault();
sms.sendTextMessage(phoneNumber, null, message, pi, null);

【讨论】:

  • 我相信我们最初是走这条路的,但在相当多的设备上遇到了问题。这是一个描述我们遇到的相同问题的线程:stackoverflow.com/questions/8852625/…。似乎没有人就发生这种情况的可能原因提出任何想法,并且由于这是我注册过程的一部分,我不想冒失去用户的风险。
  • 这是我在我的应用程序中使用的,但有一个巨大的警告,用户非常怀疑发送 SMS 的权限,特别是因为在较新的设备上它伴随着一个显眼的金币图标以及“这可能会花费你的钱”的注释。
  • 好吧,这是您真正拥有的唯一选择,因为您无法控制消息传递应用程序。返回您的应用的唯一方法是用户必须从那里手动点击返回按钮
  • 严格来说并非如此。请参阅:stackoverflow.com/questions/3375561/… 问题在于,如果您尝试预填充 SMS 字段,则无法正确观察到这些意图额外内容。 SMS 显示为空白。 (虽然如果您点击发送,它会发送您指定的消息,但没有用户会意识到这一点。)
  • @goto10 这正是我们在尝试解决问题时所经历的。很奇怪,它不会在 SMS 字段中显示信息,即使信息确实存在。
【解决方案2】:

我遇到了同样的问题。你应该能够用这样的代码做你想做的事(从下面的链接复制):

private void launchSMSActivity(final CharSequence phoneNumber) {
    Intent smsIntent = new Intent(Intent.ACTION_VIEW);
    smsIntent.setType("vnd.android-dir/mms-sms");
    smsIntent.setData(Uri.fromParts("sms", phoneNumber.toString(), null));
    smsIntent.putExtra("sms_body", mMessageWithPattern);
    smsIntent.putExtra("exit_on_sent", true);
    smsIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    startActivityForResult(smsIntent, SEND_SMS);
}

但是,4.3 中显然存在一个错误,导致消息字段显示为空白。点击发送仍然会发送消息。错误在这里:https://code.google.com/p/android/issues/detail?id=58153

鉴于此,您可以选择根据 tyczj 的回答在应用内发送,但请记住,这样做需要向您的应用添加 SMS 权限。当用户获得权限确认对话框时,它将出现在顶部,并显示可能会花费他们金钱的通知。许多恶意应用程序使用此权限来增加用户的电话费,因此许多用户对此表示怀疑。

您也可以选择仅在 4.3 设备上的应用内发送短信,并使用上面的代码在所有其他设备上按照您想要的方式发送短信。这并不能解决权限问题,除非您发布两个 APK - 一个用于未经许可的 4.3 之前的设备,一个用于 4.3 的有许可的设备。最后一个选项是我现在正在为我自己的应用考虑的。

【讨论】:

    猜你喜欢
    • 2010-12-28
    • 1970-01-01
    • 2010-10-07
    • 2011-07-24
    • 2022-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多