1. 程式人生 > >通過Safari瀏覽器獲取iOS裝置UDID(裝置唯一識別符號)

通過Safari瀏覽器獲取iOS裝置UDID(裝置唯一識別符號)

通過Safari與mobileconfig獲取iOS裝置UDID(裝置唯一識別符號)

科普:U D I D (Unique Device Identifier),唯一標示符,是iOS裝置的一個唯一識別碼,每臺iOS裝置都有一個獨一無二的編碼,UDID其實也是在裝置量產的時候,生成隨機的UUID寫入到iOS裝置硬體或者某一塊儲存器中,所以變成了固定的完全不會改變的一個標識,用來區別每一個唯一的iOS裝置,包括 iPhones, iPads, 以及 iPod touches

隨著蘋果對程式內獲取UDID封殺的越來越嚴格,私有api已經獲取不到UDID,Mac地址等資訊,繼而出現了使用鑰匙串配合uuid等等方法變相實現

由於近期專案需求是裝置授權的形式使用軟體,使用鑰匙串等方法不完全能解決問題,因為重置或重做系統都會清除uuid然後重新存入,所以想到了用safari的方式獲取裝置真實的UDID

一、通過蘋果Safari瀏覽器獲取iOS裝置UDID步驟

蘋果公司允許開發者通過IOS裝置和Web伺服器之間的某個操作,來獲得IOS裝置的UDID(包括其他的一些引數)。以為為簡要概述:
1、在你的Web伺服器上建立一個.mobileconfig的XML格式的描述檔案;
2、使用者在所有操作之前必須通過某個點選操作完成.mobileconfig描述檔案的安裝;
3、伺服器需要的資料,比如:UDID,需要在.mobileconfig描述檔案中配置好,以及伺服器接收資料的URL地址;
4、當用戶裝置完成資料的手機後,返回提示給客戶端使用者;

二、.mobileconifg
在這篇文章中,主要講如何獲得識別符號。其實還可以獲取更多資訊,以下是一個獲得UDID示例.mobileconfig配置

 <!--參考:https://developer.apple.com/library/ios/documentation/NetworkingInternet/Conceptual/iPhoneOTAConfiguration/ConfigurationProfileExamples/ConfigurationProfileExamples.html-->
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
    <dict>
        <key>PayloadContent</key>
        <dict>
            <key>URL</key>
            <string>http://dev.skyfox.org/udid/receive.php</string> <!--接收資料的介面地址-->
            <key>DeviceAttributes</key>
            <array>
                <string>UDID</string>
                <string>IMEI</string>
                <string>ICCID</string>
                <string>VERSION</string>
                <string>PRODUCT</string>
            </array>
        </dict>
        <key>PayloadOrganization</key>
        <string>dev.skyfox.org</string>  <!--組織名稱-->
        <key>PayloadDisplayName</key>
        <string>查詢裝置UDID</string>  <!--安裝時顯示的標題-->
        <key>PayloadVersion</key>
        <integer>1</integer>
        <key>PayloadUUID</key>
        <string>3C4DC7D2-E475-3375-489C-0BB8D737A653</string>  <!--自己隨機填寫的唯一字串-->
        <key>PayloadIdentifier</key>
        <string>dev.skyfox.profile-service</string>
        <key>PayloadDescription</key>
        <string>本檔案僅用來獲取裝置ID</string>   <!--描述-->
        <key>PayloadType</key>
        <string>Profile Service</string>
    </dict>
</plist>

你需要填寫回調資料的URL和PayloadUUID。該PayloadUUID僅僅是隨機生成的唯一字串,用來標識唯一

注意:mobileconfig下載時設定檔案內容型別Content Type為:application/x-apple-aspen-config

HTTPS伺服器上的檔案

當訪問mobileconfig檔案不能直接下載時,可能就需要設定mime content type了,application/x-apple-aspen-config,

設定content type大體上兩種方法

1.伺服器容器設定

.htaccess增加如下配置

<IfModule mod_mime.c>
        AddType application/x-apple-aspen-config .mobileconfig
</IfModule>

2.php等動態語言直接設定

header('Content-type: application/x-apple-aspen-config; chatset=utf-8');
header('Content-Disposition: attachment; filename="company.mobileconfig"');
echo $mobileconfig;

三、iOS裝置安裝.mobileconfig描述檔案

新建一個用於下載mobileconfig的網頁,這裡我命名為udid.php

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 <meta content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0,user-scalable=no" name="viewport" id="viewport" />
<title>獲取您的UDID</title>
<body>
<div id="content">

UUDI:<input style="" name="" value="$udid" /> 

<a class="buttons" href="udid.mobileconfig" target="_blank">1.點選獲取您的UDID</a>

<a class="buttons" href="yourapp://?function=valid&uuid=$udid">2.驗證ipa</a>

</div>
</body>
</html>

下面的介面就是使用者通過瀏覽器點選開始安裝時的介面,使用者點選“Install/安裝”開始安裝,下面的mobileconfig檔案是沒有簽名的,所以會顯示“Unsigned/未簽名”紅色提示,並且安裝的時候還會多出一部警告介面;
在這裡插入圖片描述

四、伺服器接收返回資料並顯示

設定好mobileconfig檔案中的URL,並且下載安裝mobileconfig之後,iOS裝置會POST XML資料流給你的mobileconfig檔案,PayloadContent節點中設定的URL。

以下是返回資料的格式

    <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
    <plist version="1.0">
      <dict>
        <key>IMEI</key>
        <string>12 123456 123456 7</string>
        <key>PRODUCT</key>
        <string>iPhone8,1</string>
        <key>UDID</key>
        <string>b59769e6c28b73b1195009d4b21cXXXXXXXXXXXX</string>
        <key>VERSION</key>
        <string>15B206</string>
      </dict>
    </plist>

使用xml等解析庫解析資料後,直接把需要的UDID等裝置資訊傳到顯示頁面即可(本文複用了index.php)。

receive.php

<?php
$data = file_get_contents('php://input');
//這裡可以進行xml解析
//header("Location: http://dev.skyfox.org/udid?data=".rawurlencode($data)); //有人說必須得目錄形式才會安裝成功
header('HTTP/1.1 301 Moved Permanently');  //這裡一定要301跳轉,否則裝置安裝會提示"無效的描述檔案"
header("Location: http://dev.skyfox.org/udid/index.php?".$params);
?>

index.php

<?php
$UDID =  $_GET['UDID'] ? $_GET['UDID'] : $_POST['UDID'];
?>

UDID:<input style="width:300px;" name="" value="<?php echo $UDID;?>" /> 

值得注意的是重定向一定要使用301重定向,有些重定向預設是302重定向,這樣就會導致安裝失敗,裝置安裝會提示"無效的描述檔案

相關推薦

通過Safari瀏覽器獲取iOS裝置UDID(裝置唯一識別符號)

通過Safari與mobileconfig獲取iOS裝置UDID(裝置唯一識別符號) 科普:U D I D (Unique Device Identifier),唯一標示符,是iOS裝置的一個唯一識別碼,每臺iOS裝置都有一個獨一無二的編碼,UDID其實也是在裝

通過UDP廣播獲取網路中所有裝置ip地址

說明: 原始碼使用說明,先在需要獲取IP地址的主機上執行server端程式,然後在需要搜尋主機的Pc上執行client端程式 本文是windows版,VC++,在VS2010環境下除錯成功。有時候需要搜尋網路中的裝置,機器,伺服器等,這就要要用到UDP廣播的方式,傳送廣播命令,廣播給網路中的每一個主機,該

windows C++ 通過UDP廣播獲取網路中所有裝置ip地址

說明: 原始碼使用說明,先在需要獲取IP地址的主機上執行server端程式,然後在需要搜尋主機的Pc上執行client端程式 本文是windows版,VC++,在VS2010環境下除錯成功。有時候需要搜尋網路中的裝置,機器,伺服器等,這就要要用到UDP廣

通過瀏覽器標識識別 開啟頁面裝置iOS 還是Android

  var userAgentInfo = navigator.userAgent.toLowerCase();                 //alert('手機標示'+userAgentInfo); &

獲取iOS裝置唯一標識

轉自:https://www.cnblogs.com/fdyjm/p/7125710.html UDID 在之前的版本是可以被使用的,iOS5及以後,被蘋果禁止使用了(棄用了)。雖然,這個UDID用得很廣泛,但是,不得不說的是,它在慢慢的遠離開發者,不能在考慮使用UDID了。至於這個標示符是

U3D獲取IOS裝置所在時區、是否安裝指定APP、判斷真機還是模擬器

  unity是無法直接獲取ios裝置資訊的,但是unity可以與IOS程式碼進行互動,這就可以完成你想要實現的功能了。   直接上程式碼: CheckCountry.h檔案: #import <Foundation/Foundation.h> @interface CheckCountry

Android裝置通過NTRIP協議獲取差分資料實現高精度定位

轉載自http://www.jianshu.com/p/7b93952febc0 專案背景 最近在做一個Android的APP專案中有個功能,需要用到Ntrip協議從差分伺服器獲取差分資料,並將差分資料通過藍芽傳送至高精度手持裝置(華信TR502接收機)之後返回固定解的高精度定位資料(NMEA0813協

獲取iOS裝置唯一標示

        在產品的需求中,很多情況下我們需要獲取裝置的唯一標示,那麼獲取裝置的唯一標示的方式有哪幾種呢,在這裡做一下總結;我們通常都說UDID、UUID、IDFA、CFUUID、NSUUID等

iOS7獲取裝置UDID、IMEI、ICCID、序列號、Mac地址等資訊

在iOS7之前, 可以方便的使用 [[UIDevice currentDevice] uniqueIdentifier] 來獲取裝置的UDID,但是在iOS7之後這個方法不再適用。 你可以用[[UIDevicecurrentDevice]valueForKey:@"un

iOS怎樣獲取裝置唯一識別符號

Vindor標示符 (IDFV-identifierForVendor) Vendor是CFBundleIdentifier(反轉DNS格式)的前兩部分。來自同一個運營商的應用執行在同一個裝置上,此屬性的值是相同的;不同的運營商應用執行在同一個裝置上值不同。 經測試,只要裝置上有一個tencent的app,

使用電腦的Safari遠端除錯ios裝置的HTML頁面

在iPhone上開啟 設定---》Safari---》高階---》Web檢查器 設定為開啟狀態 iPhone連線電腦 只能是mac 開啟手機中的cordova或者UIWebView的專案的介面 在Mac中把Safari偏好設定中把選單欄中的開發選項

css在ios和android裝置上的相容性問題(移動裝置不同核心瀏覽器樣式相容性)筆記

position屬性帶來的浮動問題: 專案案例: 網宿流量微信公眾號活動紅包抽獎頁面; 問題描述: 在input被獲取焦點時,螢幕上position屬性值為absolute的元素,包含input,會被

獲取iOS裝置上崩潰日誌(Crash Log)的方法

我們常常會遇到iPhone手機或者iPad平板上執行APP崩潰的問題,有時候開啟某個APP,卻一下子“閃退”了。有的再次進入就正常了,有些可能就再也進不去了。 對於開發者來說,這個絕對是頭疼的問題。因為這些日誌可能存在於用的裝置裡面。那麼如何獲取到iOS裝置崩潰日誌呢?

如何獲取 iOS 裝置唯一 ID

CFUUID 每次呼叫 CFUUIDCreate 系統都會返回一個全新的唯一 ID. 如果想永久儲存這個 ID,需要自己處理,可以一次獲取後,存在 NSUserDefaults,Keychain,Pasteboard 等,下次再從這其中取出。 - (NS

最新獲取iOS裝置型號大全(包括iphone7,iphone7 Plus)

獲取iOS裝置型號,找了一圈發現一般寫的都不夠全,自己完善了一下。 呼叫記得加上標頭檔案: #import <sys/utsname.h> + (NSString*)deviceSt

獲取裝置UDID裝置資訊

<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> &

獲取裝置UDID

我們用Ad Hoc 打包應用之後,上傳到應用託管平臺,如果想讓別人安裝測試,那麼則需要將使用者的UDID新增到蘋果開發者賬戶裡面。 最近發現了一種簡單的方法,可以在手機不連線電腦的情況下獲取裝置的UDID。 用裝置掃描以上二維碼,在safir中開啟

UIDevice的orientation方法,獲取ios裝置方向不準確問題

使用 UIDeviceOrientation deviceOrientation = [UIDevice currentDevice].orientation方法,獲取當前裝置的方向,第一次使用的時候,總是返回0 可以使用 下邊這個方法獲取,  UIInterfaceOri

iOS獲取當前app的裝置名稱和版本號等內容

NSDictionary *infoDictionary = [[NSBundle mainBundle] infoDictionary]; CFShow(infoDictionary); /

獲取iOS裝置唯一標識 uuid

獲取uuid 介紹一個輕量級iOS安全框架:SSKeyChain    詳細介紹:http://blog.sina.com.cn/s/blog_93f39bc20101a44t.html SSKeyChains對蘋果安全框架API進行了簡單封裝,支援對儲存在鑰匙串中密碼、賬戶進行訪問,包括讀取、