2012-07-18 88 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