当前位置: 首页 > news >正文

有关网站建设的标题怎样做团购网站

有关网站建设的标题,怎样做团购网站,浦东网站制作,酒店网站制作策划目录 前言官方唯一标识符建议使用广告 ID使用实例 ID 和 GUID不要使用 MAC 地址标识符特性常见用例和适用的标识符 解决方案DeviceIdANDROID_IDMac地址UUID补充 总结 前言 从 Android 10 开始#xff0c;应用必须具有 READ_PRIVILEGED_PHONE_STATE 特许权限才能访问设备的不可… 目录 前言官方唯一标识符建议使用广告 ID使用实例 ID 和 GUID不要使用 MAC 地址标识符特性常见用例和适用的标识符 解决方案DeviceIdANDROID_IDMac地址UUID补充 总结 前言 从 Android 10 开始应用必须具有 READ_PRIVILEGED_PHONE_STATE 特许权限才能访问设备的不可重置标识符包含 IMEI 和序列号。 而这个权限是系统权限也就是说一般应用将无法再获取IMEI 和序列号 受影响的方法包括 Build getSerial() TelephonyManager getImei()getDeviceId()getMeid()getSimSerialNumber()getSubscriberId() 如果您的应用没有该权限但您仍尝试查询不可重置标识符的相关信息则平台的响应会因目标 SDK 版本而异 如果应用以 Android 10 或更高版本为目标平台则会发生 SecurityException。如果应用以 Android 9API 级别 28或更低版本为目标平台则相应方法会返回 null 或占位符数据如果应用具有 READ_PHONE_STATE 权限。否则会发生 SecurityException。 google也给出了一个解决方案 许多使用场景都不需要不可重置的设备标识符。例如如果您的应用将不可重置的设备标识符用于广告跟踪或用户分析目的请为这些特定使用场景使用 Android 广告 ID。要了解详情请参阅唯一标识符的最佳做法。 这里大部分方案对国内无效比如广告ID需要google play的服务但是国内的手机上都阉割掉了。所以我们只能参考一些可用的方案。 官方唯一标识符建议 这部分我们一起来看官方唯一标识的建议 使用广告 ID 国内就不要考虑了需要依赖google play服务 使用实例 ID 和 GUID 只对单一应用有效卸载了就变了不可取。 不要使用 MAC 地址 MAC 地址具有全局唯一性无法由用户重置在恢复出厂设置后也不会变化。因此一般不建议使用 MAC 地址进行任何形式的用户标识。运行 Android 10API 级别 29和更高版本的设备会报告不是设备所有者应用的所有应用的随机化 MAC 地址。 在 Android 6.0API 级别 23到 Android 9API 级别 28中无法通过第三方 API 使用 Wi-Fi 和蓝牙等本地设备 Mac 地址。WifiInfo.getMacAddress() 方法和 BluetoothAdapter.getDefaultAdapter().getAddress() 方法都返回 02:00:00:00:00:00。 此外在 Android 6.0 到 Android 9 版本中您还必须拥有下列权限才能访问通过蓝牙和 Wi-Fi 扫描获得的附近外部设备的 MAC 地址 方法/属性所需权限WifiManager.getScanResults()ACCESS_FINE_LOCATION 或 ACCESS_COARSE_LOCATIONBluetoothDevice.ACTION_FOUNDACCESS_FINE_LOCATION 或 ACCESS_COARSE_LOCATIONBluetoothLeScanner.startScan(ScanCallback)ACCESS_FINE_LOCATION 或 ACCESS_COARSE_LOCATION 所以mac是仅次于DeviceId的靠谱的标识不过android 6.0之后获取不到了。不过有其他方法完善见后面。 标识符特性 一堆废话 常见用例和适用的标识符 也是一堆废话要么就是国内无法使用不过提到了SSAID。 SSAID即ANDROID_ID(Settings.Secure.ANDROID_ID)在8.0系统迎来改变具体如下 对于在 OTA 之前安装到某个版本 Android 8.0API 级别 26的应用除非在 OTA 后卸载并重新安装否则 ANDROID_ID 的值将保持不变。要在 OTA 后在卸载期间保留值开发者可以使用密钥/值备份关联旧值和新值。 对于安装在运行 Android 8.0 的设备上的应用ANDROID_ID 的值现在将根据应用签署密钥和用户确定作用域。应用签署密钥、用户和设备的每个组合都具有唯一的 ANDROID_ID 值。因此在相同设备上运行但具有不同签署密钥的应用将不会再看到相同的 Android ID即使对于同一用户来说也是如此。 只要签署密钥相同并且应用未在 OTA 之前安装到某个版本的 OANDROID_ID 的值在软件包卸载或重新安装时就不会发生变化。 即使系统更新导致软件包签署密钥发生变化ANDROID_ID 的值也不会变化。 可以看到8.0之后ANDROID_ID是与应用签名关联的同签名的应用共用相同的ANDROID_ID而且卸载重装不会变化。 而8.0之前ANDROID_ID是与设备关联的当设备首次启动时系统会随机生成一个64位的数字并以16进制字符串的形式保存到手机系统中当手机恢复出厂设置后Android ID会被重置这是Android ID与Device ID的主要区别。当然还有其他bug比如有些厂家获取为null之类的。 所以ANDROID_ID是可以考虑的选择之一后面细说。 解决方案 想要一个行为获取稳定的DeviceId是不可能的我们需要多个行为结合处理。 DeviceId 首先就是传统的DeviceId在Android 10一下还是很稳定的。 ANDROID_ID 在Android 8.0之后就可以考虑用ANDROID_ID来代替DeviceId了。 Settings.System.getString(BaseApp.getAppContext().getContentResolver(), Settings.Secure.ANDROID_ID);这样可以做一个版本判断低于10.0(或8.0)获取DeviceId否则获取ANDROID_ID Mac地址 如果上面两步获取的还是null那么可以使用mac地址但是mac由于6.0之后无法通过WifiInfo.getMacAddress()获取了所以我们需要处理一下代码如下 public static String getMac(Context context) {String mac ;if (context null) {return mac;}if (Build.VERSION.SDK_INT 23) {mac getMacBySystemInterface(context);} else {mac getMacByJavaAPI();if (TextUtils.isEmpty(mac)){mac getMacBySystemInterface(context);}}return mac;}TargetApi(9) private static String getMacByJavaAPI() {try {EnumerationNetworkInterface interfaces NetworkInterface.getNetworkInterfaces();while (interfaces.hasMoreElements()) {NetworkInterface netInterface interfaces.nextElement();if (wlan0.equals(netInterface.getName()) || eth0.equals(netInterface.getName())) {byte[] addr netInterface.getHardwareAddress();if (addr null || addr.length 0) {return null;}StringBuilder buf new StringBuilder();for (byte b : addr) {buf.append(String.format(%02X:, b));}if (buf.length() 0) {buf.deleteCharAt(buf.length() - 1);}return buf.toString().toLowerCase(Locale.getDefault());}}} catch (Throwable e) {}return null; }private static String getMacBySystemInterface(Context context) {if (context null) {return ;}try {WifiManager wifi (WifiManager) context.getSystemService(Context.WIFI_SERVICE);if (checkPermission(context, Manifest.permission.ACCESS_WIFI_STATE)) {WifiInfo info wifi.getConnectionInfo();return info.getMacAddress();} else {return ;}} catch (Throwable e) {return ;} }可以看到6.0即23以下直接获取否则先通过NetworkInterface获取获取不到再通过原方法获取。 目前来看这一步还是能稳定获取的。 UUID 兜底行为。因为需要我们手动生成且每次生成的都不一样。 UUID.randomUUID().toString()所以必须生成一次保存起来。这样就有一个问题如果保存到应用内部存储卸载后重装一定要重新生成这样就无法判断是同一设备了。 所以最好将其保存到外部存储保证卸载重装后还能读取到上次的值。 这样一般情况下是最稳定的除非手动删除该文件。 所以最好的方案就是将上面四个方案融合在一起一个个兜底。目前来看各手机厂商的指导方案也就这几个方案。 补充 除了上面的方案还有移动安全联盟信通院牵头提供的sdk可以获取几种设备标识符大部分国内厂商都支持。 不过需要申请使用还没测试过。 总结 通过上面分析可以看到官方确实给出了不少替代方案但是大部分都由于国内的限制而无法使用。所以国内基本上都是通过依次获取DeviceId、ANDROID_ID、MAC、UUID的方式来得到一个唯一id流程大致如下 #mermaid-svg-XtgtGgE8S0ilzScY {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-XtgtGgE8S0ilzScY .error-icon{fill:#552222;}#mermaid-svg-XtgtGgE8S0ilzScY .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-XtgtGgE8S0ilzScY .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-XtgtGgE8S0ilzScY .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-XtgtGgE8S0ilzScY .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-XtgtGgE8S0ilzScY .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-XtgtGgE8S0ilzScY .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-XtgtGgE8S0ilzScY .marker{fill:#333333;stroke:#333333;}#mermaid-svg-XtgtGgE8S0ilzScY .marker.cross{stroke:#333333;}#mermaid-svg-XtgtGgE8S0ilzScY svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-XtgtGgE8S0ilzScY .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-XtgtGgE8S0ilzScY .cluster-label text{fill:#333;}#mermaid-svg-XtgtGgE8S0ilzScY .cluster-label span{color:#333;}#mermaid-svg-XtgtGgE8S0ilzScY .label text,#mermaid-svg-XtgtGgE8S0ilzScY span{fill:#333;color:#333;}#mermaid-svg-XtgtGgE8S0ilzScY .node rect,#mermaid-svg-XtgtGgE8S0ilzScY .node circle,#mermaid-svg-XtgtGgE8S0ilzScY .node ellipse,#mermaid-svg-XtgtGgE8S0ilzScY .node polygon,#mermaid-svg-XtgtGgE8S0ilzScY .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-XtgtGgE8S0ilzScY .node .label{text-align:center;}#mermaid-svg-XtgtGgE8S0ilzScY .node.clickable{cursor:pointer;}#mermaid-svg-XtgtGgE8S0ilzScY .arrowheadPath{fill:#333333;}#mermaid-svg-XtgtGgE8S0ilzScY .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-XtgtGgE8S0ilzScY .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-XtgtGgE8S0ilzScY .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-XtgtGgE8S0ilzScY .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-XtgtGgE8S0ilzScY .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-XtgtGgE8S0ilzScY .cluster text{fill:#333;}#mermaid-svg-XtgtGgE8S0ilzScY .cluster span{color:#333;}#mermaid-svg-XtgtGgE8S0ilzScY div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-XtgtGgE8S0ilzScY :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 不存在 不存在 不存在 存在 存在 存在 DeviceId? ANDROID_ID? MAC? 生成UUID 返回 你可能感兴趣 Android 13发布一起来看看有哪些新功能 详细解读Android中的事件分发机制
http://www.hkea.cn/news/14305609/

相关文章:

  • 杭州网站建设网页制作商城项目
  • 网站建设与网络营销珠海室内设计学校
  • 网站开发对算法有要求么互联网内容服务商有哪些
  • 网站设计的优点利用分类信息网站做推广
  • 龙采哈尔滨建站公司怎样做app
  • 免费模板网站知乎个人网站 icp 代理
  • 广州定制型网站建设大连企业信息
  • 做恋爱方面的网站外贸流程图片
  • 网站素材模板个人型网站开站费用
  • 学习吧网站网站主色调简介
  • 建设网站松岗做微信平台图片网站
  • 织梦源码网站模板网站设计方案怎么做
  • 做检索网站如何建淘客网站
  • 网页美工制作网站网站验证码原理
  • 在网上做效果图赚钱的网站如今做哪些网站能致富
  • 帝国网站地图模板邯郸哪做网站
  • 如何快速优化网站排名网站的目的和意义
  • 绵阳网站建设软件有哪些西安做视频网站公司
  • 做网站准备的资料北京网站建设工作室哪家好
  • 网站一键生成手机网站特价锦州网站建设
  • 摄影婚纱网站建设网站快捷按钮以什么方式做
  • 专门找人做软件的网站扬州做网站
  • 做英语趣味教具的网站网站服务器申请
  • 深圳网站设计哪家强个人博客自我介绍
  • 衡阳网站建设公司哪家好电脑可以做网站主机么
  • 网站项目建设策划书搜索百度
  • 湖南微信网站公司电话教师兼职做网站
  • 万江专业网站快速排名无锡百度seo优化
  • 有服务器和域名怎么做网站wordpress nextpage
  • 上海企业网站模板建站平台平面设计和电商设计的区别