2012-07-18 112 views
3

我正在製作一個接收推送通知的iOS應用程序。一切都設置正確,我已經使它已經工作。我測試它的方式是在發送通知的.php文件中手動輸入我自己手機的設備令牌。我知道我需要建立一個存儲所有設備令牌的SQL數據庫。我也知道我必須在Xcode的dedRegisterForRemoteNotificationWithDeviceToken中「調用」這個網站。我知道如何做到這一切,但我不知道如何爲數據庫中的實際標記創建字段,以及如何正確解析它。如何在iOS數據庫上存儲iOS設備令牌?

如果我記得沒錯,當我NSLog出我的設備令牌時,我得到類似「< xxxx xxxx xxxx xxxx>」。我想我必須解析這是「xxxxxxxxxxxxxxxx」。

我敢肯定我會弄清楚這一點..我的主要問題是,什麼類型的應該是令牌列? INT? VARCHAR?我可以告訴它,這是一個十六進制的某種,但我不知道如何去在數據庫中..

我想設立表(TokenID int AUTO_INCREMENT,令牌(? ?) 獨特);

我不需要用戶或任何東西..只是令牌(TokenID是我的標準程序..)。這是一種「新聞」 - 爲一個領域指定的通知。任何人都知道我的令牌值應該是什麼類型?也許還如何從 「< X-X-X>」 解析爲 「XXX」

回答

0

什麼BINARY(32) NOT NULL UNIQUE

1

正確的方法是將值存儲爲BINARY(32)並使用MySQL函數UNHEX和HEX來存儲和檢索值。

INSERT INTO devices SET devicetoke=UNHEX('$token'), ... 

UPDATE devices SET badgecount=badgecount+1 WHERE devicetoken=UNHEX('$token') 

SELECT HEX(devicetoken) AS token FROM devices WHERE ... 
+1

詳細說明?資源? – Sti 2015-05-17 04:59:50

+1

將值存儲爲CHAR類型需要64個字節,並可能導致文本編碼轉換。 一個十六進制字符可以存儲在4位中。需要64 x 4位= 256位/ 8位= 32個字節的存儲空間。 BINARY允許快速比較,無需任何轉換。 – pizzamonster 2015-05-17 10:19:51