1. 程式人生 > >iOS應用開發中的裝置標識

iOS應用開發中的裝置標識

對於iOS應用開發者來說,蘋果所提供的官方後臺系統實際上就是iTunes Connect了。通過iTunes Connect我們建立應用記錄,提交應用給蘋果稽核,釋出應用,通過iTunes Connect我們可以配置銀行卡收錢( 這個很重要:) ),我們可以看到應用的下載量和收據資料報表。

但總體來說iTunes Connect提供的功能還比較有限,而且基本不能定製(除非你能說服蘋果)。

對於應用釋出後的跟蹤和資料收集,很多時候是iTunes Connect之外的事情,甚至有些開發者對於閃退日誌收集等也拋棄了iTunes Connect的crash report。那麼一個識別具體裝置的標誌,或者說能夠區分不同裝置的方法就顯得很重要。這篇文章我簡要整理一下。

大家可以明確一點,為了保護使用者隱私,蘋果並沒開放太多API給開發者,使得裝置的資料追蹤變得越來越難。

IMEI、IMSI、ICCID這類在iTunes Mac客戶端可以直接看到的東西,現在都不要想著能通過API在程式中獲取到。

0. UDID

在iOS6.1及之前,我們可以再UIKit.framework的UIDevice類中看到一個屬性,那就是uniqueIdentifier,也就是我們通常所提到的UDID。

但這個屬性的聲明後面,有NS_DEPRECATED_IOS(2_0, 5_0),意思就是5.0開始就是deprecated的了,是過時的,不建議再繼續使用。

到了iOS SDK的7.0版本,在UIDevice類中,就再也找不到這個uniqueIdentifier屬性了。而且蘋果方面明確表示在2013年5月份之後不再對此支援。即使使用老版本的SDK,也不一定能通過蘋果稽核,聽說有人還嚐到過Rejected的苦頭。

1. identifierForVendor (IDFV)

貌似也有人簡略為IDFV,這是蘋果安撫大家的一個UDID的替代品,也是UIDevice類的屬性。

按照蘋果的文件說明,這個IDFV在同一裝置上的所有同Vendor應用得到的ID是相同的,而不同的裝置就有不同的IDFV。當這個裝置上,同Vendor的所有應用都被解除安裝掉之後,不能保證同一裝置再次安裝這個Vendor的應用時,得到同樣的ID。

簡單來說,如果一個裝置上只裝了你一個應用,解除安裝掉再裝ID也許就不同了。這樣,對於唯一裝置的定義就和原來UDID的很不同。這點並不令廣大開發者感到滿意。

2. MAC地址

如上所述,identifierForVendor不是很令大家滿意,於是各種民間方法就出現了。一個方案就是用MAC地址。

學過計算機網路課程的同學們應該瞭解,要先完成底層網路通訊實現MAC地址是必須有的,而這個在網絡卡製造時要保證全球唯一的,一個裝置通常一個網絡卡就夠用了,所以這個在一定程度上可以作為裝置標識。

於是乎,拿出了各種底層庫,做各種計算,拿到一個MAC地址字串。

下面這段是網路上比較流行的:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 - (NSString *) macAddress { int                 mib[6]; size_t              len; char                *buf; unsigned char       *ptr; struct if_msghdr    *ifm; struct sockaddr_dl  *sdl; mib[0] = CTL_NET; mib[1] = AF_ROUTE; mib[2] = 0; mib[3] = AF_LINK; mib[4] = NET_RT_IFLIST; if ((mib[5] = if_nametoindex("en0")) == 0) { printf("Error: if_nametoindex error\n");

相關推薦

iOS應用開發裝置標識

對於iOS應用開發者來說,蘋果所提供的官方後臺系統實際上就是iTunes Connect了。通過iTunes Connect我們建立應用記錄,提交應用給蘋果稽核,釋出應用,通過iTunes Connect我們可以配置銀行卡收錢( 這個很重要:) ),我們可以看到應用的

.Net語言 APP開發平臺——Smobiler學習日誌:在手機應用開發如何實現跳轉地圖

demo hand 操作 窗體 clas com ps1 ati void 一、目標樣式 我們要實現上圖中的效果,需要如下的操作: 二、跳轉地圖代碼 VB: Private Sub Button1_Click(sender As Object, e As Ev

Java應用開發的SQL註入攻擊

包括 安全防護 sql註入 什麽 由於 應用程序 輸入數據 數據庫防火墻 進行 1. 什麽是SQL註入攻擊? SQL註入攻擊是黑客對數據庫進行攻擊的常用手段之一。隨著B/S模式應用開發的發展,使用這種模式編寫應用程序的程序員越來越多。但是由於程序員的水平及經驗參差不齊,相當

Android應用開發三種常見的圖片壓縮方法

Android應用開發中三種常見的圖片壓縮方法,分別是:質量壓縮法、比例壓縮法(根據路徑獲取圖片並壓縮)和比例壓縮法(根據Bitmap圖片壓縮)。 一、質量壓縮法 private Bitmap compressImage(Bitmap image) { ByteArrayOutput

[UWP]在應用開發安全使用檔案資源

在WPF或者UWP應用開發中,有時候會不可避免的需要操作檔案系統(建立檔案/目錄),這時候有幾個坑是需要大家注意下的。 建立檔案或目錄時的非法字元檢測 在Windows系統中,我們建立檔案時會注意到,某些特殊字元是不可以用作檔名輸入的。 那麼,同樣的,如果你的應用可以提供給使用者建立檔案/目錄的功能

應用開發,網易雲音樂如何兼顧質量和效益

在應用開發中,質量和效益是非常關鍵的因素。網易雲音樂作為使用者人數突破4億,成就移動音樂傳奇的應用,是如何在開發中兼顧質量和效益的?網易雲音樂Android負責人樑建將為您解讀。 框架賦能 典型的開發框架從上往下分為三層,分別是業務層、服務層、能力層,三者之間是垂直依賴的關係,且業務層之間的水平模組不互相依

iOS開發遇到的小知識點

1.純程式碼寫collectionViewCell 如上所述,近期我一直使用純程式碼寫工程,在建立collectionViewCell時遇到了一個小問題。 純程式碼在tableViewCell中我們使用下面的方法來新增子檢視。 - (instancetype)initWithStyle:(UITa

iOS 應用開發覆盤(一)

從iOS開發轉到Java Web開發有幾年了,最近覆盤一下iOS開發,找一個專案練練手,順便和大家一起分享一下iOS開發的實際操作。對想要做iOS開發的人相信會有一定的幫助。 一、開發環境 iOS開發的話肯定要有蘋果的電腦(黑蘋果有一堆問題,不是很推薦),經濟條件允許的話

iOS應用開發覆盤(二)

上一節我們介紹了iOS工程的搭建和真機除錯的方法。這一節開始介紹列表介面的開發,列表是app裡面最常用的控制元件,沒有之一。 首先我們在工程裡建立介面控制器,繼承UIViewController如下圖所示,UIViewController是iOS介面控制器的基類,封裝了一個

移動應用開發AppID、AppKey、AppSecret到底是什麼?

AppID:應用的唯一標識 AppKey:公匙(相當於賬號) AppSecret:私匙(相當於密碼) token:令牌(過期失效) 使用方法 1. 向第三方伺服器請求授權時,帶上AppKey和AppSecret(需存在伺服器端) 2. 第三方伺服器驗證AppKey

iOS應用開發攻略》試讀樣章

[size=large][b]內容簡介:[/b][/size] 本書涵蓋了應用開發及構建優雅解決方案的必備知識,包括編寫通用的啟動畫面和嵌入式Web瀏覽器;構建複雜表檢視;使應用或遊戲活靈活現的填充、變換和動畫;通過手勢、轉換和自定義控制元件改善UI;用基本技術知識避免

web應用開發中文亂碼問題

web應用中中文亂碼問題 在java程式中,出現中文亂碼問題的原因的根源在於java程式和其他儲存媒介互換資料時,兩者編碼方案不同。 常見的中文字元編碼: GB2312-80 GB2312是簡體漢字標準字元編碼方案,是基於區位碼設計的。收錄了常用的簡體

解決android開發裝置offline的問題

現在應該經常會遇到了。因為現在各類想在你的手機上偷摸兒安裝各種玩意兒的玩意兒多了:)         這個算伏筆。 我遇到的情況開始看起來很詭異:啟動電腦,啟動eclipse,開啟DDMS,一切正常。但是隻要在命令列下用adb命令,Eclipse中立馬顯示裝置“off

iOS應用開發基礎(四)基礎知識(資料儲存和多執行緒)

本文可能涉及很多零碎的知識點,其中包括iOS應用開發的相關基礎知識。以後會針對每個條目在進行深入研究,這裡只是先做一個相關知識的概述總結。 iOS的資料儲存 大多數iOS程式其功能總結為:提供一套介面,幫助使用者管理特定資料。在這個過程中,不同物件各司其

IOS應用開發-圖片處理(拉伸圖片 建立縮圖 解決圖片旋轉的問題 圖片編碼及上傳 將圖片寫入磁碟)

在做專案時我們經常要對圖片進行一些處理,以達到效能優化或滿足需求。常見的情形有以下幾種 //http://stackoverflow.com/questions/5427656/ios-uiimagepickercontroller-result-image-orien

IOS開發使用KVO觀測屬性變化

不久前在開發中,有一個只有內部方法才能修改的變數,我就用readonly來修飾。 @property(nonatomic, readonly, getter=isShouldRequestMsg) BOOL shouldRequestMsg; 但是當值發生變化的時候,想

劉偉Derick-IOS應用開發(iPhone iPad 應用、遊戲)瀟灑的程式設計師

儲存圖片到photo library與儲存video到photo library的API差不多,但也有所不同。圖片是可以直接把資料寫入photo library,而video需要先把資料存到臨時檔案然後,然後通過臨時檔案的路徑去轉存到photo library。我們直接來看相

31、你瞭解Java應用開發的注入攻擊嗎?

安全是軟體開發領域永遠的主題之一,隨著新技術浪潮的興起,安全的重要性愈發凸顯出來,對於金融等行業,甚至可以說安全是企業的生命線。不論是移動裝置、普通 PC、小型機,還是大規模分散式系統,以及各種主流作業系統,Java 作為軟體開發的基礎平臺之一,可以說是無處不在,自然也就成為安全攻擊的首要

Android應用開發保持手機螢幕常亮的方法

如果你開發一個手機App,某一個功能要執行某個操作比較費時,那麼我們的選擇是採用執行緒來做,然後通過一個handler來發送訊息給管理介面的執行緒來重新整理介面。但是時間太長的話,會發現手機螢幕不亮了,儘管你的App沒有退出,但是那個執行的執行緒它也不工作了,除非你按下p

元資料(metadata)在企業應用開發的作用

元資料(metadata)介紹:Metadata(元資料),它是“關於資料的資料”(data about data),近年來在軟體設計中Metadata有廣泛的應用。在程式設計中,元資料不是被處理的物件