1

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

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

1) 注册推送通知AppDelegate

2) 在其中打开一个 webViewViewController并加载一个 URL。加载的 URL 格式总是这样 : http://.www.thisIsMyUrl.com/UDID,其中 UDID 是用户唯一标识符。

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

因此,didRegisterForRemoteNotificationsWithDeviceTokenAppDelegatei 和ViewControlleri 中,我都在检索 UDID 并按照我的描述使用它。

直到上周的一切都完美无缺。然而,现在 Apple 决定拒绝任何使用 UDID 的应用程序。所以我要走的路是使用 CFUUID 创建一个唯一标识符并将其保存到 Key Chain。

问题 :

如您所见,我在 AppDelegate 的didRegisterForRemoteNotificationsWithDeviceToken函数和ViewController. 但是,它必须只在这些控制器之一中创建,否则会有所不同!!!(请记住,CFUUID 字符串是使用 UDID + dateNtime 创建的)。

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

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

编辑


一个想法刚刚出现在我的脑海中。如果我在didFinishLaunchingWithOptions函数中创建 CFUUID 怎么办AppDelegate??如果我没记错的话,这部分代码将首先运行然后再运行。所以不会有任何同步问题,因为我会在需要它的任何地方安全地传递它。正确的?

4

1 回答 1

0

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

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

于 2013-05-09T15:31:53.920 回答