我有一个与我的应用程序同步的非常特殊的问题,我想与您分享并获得一些希望能帮助我解决它的想法。
我正在开发一个基本上做两件事的应用程序:
1) 注册推送通知AppDelegate
。
2) 在其中打开一个 webViewViewController
并加载一个 URL。加载的 URL 格式总是这样 : http://.www.thisIsMyUrl.com/UDID
,其中 UDID 是用户唯一标识符。
在didRegisterForRemoteNotificationsWithDeviceToken:
我正在注册一个令牌并在我收到它之后,在这个函数中我向我的服务器发出一个 http 请求,在那里我发送推送令牌和 UDID。
因此,didRegisterForRemoteNotificationsWithDeviceToken
在AppDelegate
i 和ViewController
i 中,我都在检索 UDID 并按照我的描述使用它。
直到上周的一切都完美无缺。然而,现在 Apple 决定拒绝任何使用 UDID 的应用程序。所以我要走的路是使用 CFUUID 创建一个唯一标识符并将其保存到 Key Chain。
问题 :
如您所见,我在 AppDelegate 的didRegisterForRemoteNotificationsWithDeviceToken
函数和ViewController
. 但是,它必须只在这些控制器之一中创建,否则会有所不同!!!(请记住,CFUUID 字符串是使用 UDID + dateNtime 创建的)。
我应该在哪里创建它???是异步的didRegisterForRemoteNotificationsWithDeviceToken
,所以如果我在那里检索它,viewController 将在唯一标识符到达那里很久之前发出 http 请求,它会使用 anull
代替。同样的情况也可能发生在ViewController
. 如果我尝试在那里创建它,也许该didRegisterForRemoteNotificationsWithDeviceToken
函数会被更快地调用,并会尝试在我的数据库中注册一个null
唯一标识符。
那么我在哪里可以尝试创建 CFUUID 字符串并确保所有控制器都能按时获得它?
编辑
一个想法刚刚出现在我的脑海中。如果我在didFinishLaunchingWithOptions
函数中创建 CFUUID 怎么办AppDelegate
??如果我没记错的话,这部分代码将首先运行,然后再运行。所以不会有任何同步问题,因为我会在需要它的任何地方安全地传递它。正确的?