实现push,iOS时的同步

时间:2013-05-09 14:51:01

标签: ios asynchronous synchronization push-notification udid

我有一个与我的应用程序同步的非常特殊的问题,我想与您分享并获得一些希望能帮助我解决它的想法。

我正在开发一个基本上做两件事的应用程序:

1)在AppDelegate注册推送通知。

2)在ViewController中打开webView并加载URL。加载的URL的格式总是如下所示:http://.www.thisIsMyUrl.com/UDID,其中UDID是用户唯一标识符。

didRegisterForRemoteNotificationsWithDeviceToken:我正在注册一个令牌,在我收到它之后,在这个函数中我向我的服务器发出一个http请求,我发送推送令牌和UDID。

因此,在didRegisterForRemoteNotificationsWithDeviceToken的{​​{1}}和AppDelegate中我正在检索UDID并按照我的描述使用它。

直到上周的一切都完美无缺。但是现在Apple决定拒绝任何使用UDID的应用程序。因此,我的方法是使用CFUUID创建一个唯一的标识符并将其保存到Key Chain。

问题:

如您所见,我在AppDelegate的ViewController函数中使用唯一标识符didRegisterForRemoteNotificationsWithDeviceToken内部。但是它必须只在其中一个控制器中创建,否则它将是不同的! (请记住,使用UDID + dateNtime创建CFUUID字符串。)

我应该在哪里创建它? ViewController是异步的,所以如果我在那里检索它,viewController将在唯一标识符到达之前很久就发出http请求,它将使用didRegisterForRemoteNotificationsWithDeviceToken代替。 null可能会发生同样的情况。如果我尝试在那里创建它,可能会更快地调用ViewController函数并尝试在我的数据库中注册一个didRegisterForRemoteNotificationsWithDeviceToken唯一标识符。

那么我在哪里可以尝试创建CFUUID字符串并确保所有控制器都能按时获得它?

修改


一个刚刚出现的想法。如果我在null的{​​{1}}函数内创建CFUUID怎么办?如果我没有弄错的话,这部分代码将先运行 FIRST 。所以不会出现任何同步问题,因为我会在任何需要它的地方安全地传递它。正确?

1 个答案:

答案 0 :(得分:0)

正如你所说,didFinishLaunchingWithOptions是启动应用程序时第一个执行的方法。

如果您在此方法开头创建CFUUID,则在注册推送通知之前,当您从Apple收到设备令牌时(调用didRegisterForRemoteNotificationsWithDeviceToken时),它将具有一个值,并且当您打开webView时,它会有一个值。