通过移动浏览器检索IMEI号码/ SIM卡号码/手机号码

时间:2011-09-14 08:22:12

标签: android

以下是该场景: 我有一个通过移动浏览器访问的Web应用程序。 每当用户点击我的应用页面中可通过网络浏览器访问的链接时,我都需要检测移动设备IMEI和SIMI。这是为了跟踪具有相同SIM的相同设备并提供他/她的下一级访问。无法使用loginid跟踪用户,因为我的页面中没有用户登录类型的选项。

问题是如何通过移动浏览器为特定移动设备获取唯一设备ID / SIM ID。 目前我专注于基于Android的移动设备。但目标是使其成为设备的通用。

大多数想法的焦点是,浏览器对手机及其应用程序的访问权限是什么?

  1. 我们可以通过浏览器链接以下列方式打开本地应用:

    <a href="productcateory://<productid>/<customerid>">Get Details</a> 
    
  2. 此处productcateory将唯一标识本地应用并调用它。但它的单向沟通。如何从调用点返回一些响应并动态填充一些隐藏的表单字段。

    1. 通过网页脚本,我们可以在客户端计算机本地存储一些数据并在以后检索它。但范围有限,无法连接到IMEI或IMSI号码。

    2. 有没有办法从网页上获取移动浏览器应用程序的钩子(记住它就像任何其他移动应用程序一样)并通过我页面中的脚本获取ID详细信息?

    3. html5在这方面是否提供了任何选项?我知道HTML5中有一个localstorage标签,可以在客户端位置存储一个id并稍后检索它。但这仅限于相同的设备和相同的移动浏览器,这也是获得imei / imsi号码的不同解决方案

    4. 如果没有要求用户在设备上安装本地应用或浏览器插件,请告诉我是否有其他选项?

      〜inkriti

5 个答案:

答案 0 :(得分:9)

由于很好的理由,网络浏览器无法访问移动电话的IMEI或IMSI号码,而没有开发团队没有预料到的那些卑鄙的黑客攻击。

Android浏览器也不支持插件。

您唯一的选择是创建原生应用。这个答案有一些对您有用的信息:Programmatically obtain the phone number of the Android phone。然而,它并不是一个完美的解决方案。

我还会问你为什么要访问用户的电话号码?如果它只是跟踪会话只是使用javascript生成一个唯一的ID并将其存储在cookie中。

答案 1 :(得分:0)

TelephonyManager tm = (TelephonyManager)getSystemService(TELEPHONY_SERVICE); 
String number = tm.getLine1Number();

并将以下权限添加到您的AndroidManifest.xml文件

<uses-permission android:name="android.permission.READ_PHONE_STATE"/> 

您也可以使用getDefault()函数:

String phoneNumber = TelephonyManager.getDefault().getLine1Number();

但这又取决于数字在SIM卡上的编码方式。这将返回与设置 - >关于手机相同的内容。 如果未知

,则可能为null

答案 2 :(得分:0)

唯一可靠的方法是编写应用程序并让它发送短信,然后在该端跟踪号码;假设订户启用了SMS /文本服务。这不适用于非手机(平板电脑)。

这不重要,也不是必要的,跟踪设备(IMEI)可能是非法的;只需跟踪订户。

答案 3 :(得分:0)

最初的问题可能已经结束,但是对于任何人(比如我自己)的未来参考,遇到这个问题的方法就像是双因素注册,通过文本确认。最接近获取IMEI(不可能没有本机应用程序)将是让用户注册并包含文本确认 - 大多数情况下手机号码将是唯一的,只有在更换设备时才是唯一的,并且一些假设可以是从客户端做出来猜测他们拥有什么设备,你甚至可以更进一步,并要求他们识别他们的设备的制造商/操作系统,如果你是关心独特的。但是在大多数用例中,手机号码确认将完成工作

答案 4 :(得分:-3)

TelephonyManager tm = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
// get IMEI
String imei = tm.getDeviceId();
String phone = tm.getLine1Number();

或试试这个

private String getMyPhoneNumber(){
    TelephonyManager mTelephonyMgr;
    mTelephonyMgr = (TelephonyManager)
        getSystemService(Context.TELEPHONY_SERVICE); 
    return mTelephonyMgr.getLine1Number();
}

private String getMy10DigitPhoneNumber(){
    String s = getMyPhoneNumber();
    return s.substring(2);
}

但它并非总是可靠的,例如非电话设备。您还需要添加权限“android.permission.READ_PHONE_STATE”。