我使用Cordova为IOS设备构建了一个通用混合应用程序。 在此应用程序中,使用JavaScript对象LocalStorage在本地保存一些数据(如分数,级别进度,设置,首选项等)。通过这种方式,当用户退出应用程序并稍后打开它时,一切都像以前一样(几乎在所有游戏中):
我要做的是自动将此LocalObject(包含所有数据)与用户的其他IOS设备同步,而不必强迫他连接到Game Center或任何其他帐户(当然除了iCloud)。< / p>
示例:用户开始在iPhone上播放,然后在家中,他想继续在iPad上播放。
所以我读了Cordova documentation,我知道我必须在config.xml文件中将BackupWebStorage值设置为“cloud”,以便将数据存储在云中,然后从其他设备自动获取... < / p>
<platform name="ios">
<preference name="BackupWebStorage" value="cloud"/>
</platform>
在那一步之后,我通过TestFlight发布了我的应用程序,我在iPhone和iPad上安装了它...但不幸的是,它不起作用...... LocalObject不会通过iCloud自动同步。
我在网上做了一些关于这个问题的研究,但我没有发现任何明确的结论。我找到了在应用程序和服务器之间同步数据的示例(我知道该怎么做)但没有关于我的问题......
你能告诉我一些技术吗?可能是演示链接?一个例子?
我很确定我想要做什么是可能的,因为我在我的IOS设备上安装了一些应用程序,正如我解释的那样。例如,当我玩着名的Alto's Adventure时,如果我在游戏过程中在IOS设备之间切换,我的所有进展都会立即在我的设备之间自动同步。但是,我没有连接到游戏中心或任何其他帐户...
所以?这是如何运作的?谢谢!
答案 0 :(得分:1)
我找到了一种在Cordova项目中连接到同一 iCloud 帐户的iOS设备之间同步数据的方法。让我们看看它是如何工作的:
在config.xml文件中,您可以将首选项参数BackupWebStorage设置为正确的值。选择“云”:
<platform name="ios">
<preference name="BackupWebStorage" value="cloud"/>
</platform>
在Xcode中打开 /platforms/ios/myProjectName.xcodeproj 文件。在功能标签中,您必须打开iCloud参数。然后,您可以选择在Apple设备之间同步数据的方式。
就我而言,我只需将数据同步为键值存储,例如{“playerID”:“123456”}。
然后,您必须为Cordova项目添加一个插件才能同步数据。我使用了cordova-plugin-icloudkv,它可以很好地满足我的需求。您可以使用CLI(Mac OSX上的终端)添加它:
$ cordova plugin add cordova-plugin-icloudkv
完成后,您可以开始向项目添加JavaScript代码。在调用device.ready()函数之后,您只需要调用此函数一次:
iCloudKV.sync(syncSuccess, syncError);
function syncSuccess(_dictionary){
// You can retrieve into the _dictionary object datas saved in the cloud.
// Example with datas I have saved:
var playerID = _dictionary['playerID'];
var deviceUUID = _dictionary['deviceUUID'];
}
您不必在以后再次调用此函数,您只需在开始时初始化它一次。 在调用syncSuccess()函数并返回“成功”状态后,您现在可以将数据保存,获取和删除到此对象中,如下所示:
iCloudKV.save(_key, _val, saveSuccess);
iCloudKV.load(_key, loadSuccess, loadError);
iCloudKV.remove(_key, removeSuccess);
瞧!
我认为使用此插件有一个重要的意义。我一开始对此不清楚,所以让我们来讨论一下:
当您从 iCloudKV 对象保存或删除密钥时,您并未实时处理真正的 iCloud 。 iCloudKV 对象是一个本地对象(如果我错了请告诉我),这将由真正的iOS同步数据进程检查和分析。 iOS同步过程自行管理 iCloudKV 对象,您不能直接要求 iCloud 保存或删除它。您只能与 iCloudKV 对象进行对话。
例如,当您使用此插件保存设备1的键值时。此键值将保存到本地 iCloudKV 对象中。你无法在设备2上得到它。
当您退出device1上的应用时,iOS同步数据流程会检查您的 iCloudKV 对象,然后如果需要,会在线上将其与真实的 iCloud 帐户同步。如果您现在在设备2上启动了应用程序(连接到相同的 iCloud 帐户),iOS同步过程将同步您的数据,然后 iCloudKV 对象将能够返回他们给你。
通过这种方式,您无法实时查看device1和device2之间的更改。首先,你必须等待iOS同步过程完成这项工作。在理解这个概念之前,我做了很多测试:)
我希望这会对某人有所帮助。谢谢!
答案 1 :(得分:0)
我认为你有一个错字。应为cloud
而不是icloud
。
<preference name="BackupWebStorage" value="cloud"/>
答案 2 :(得分:0)
您还必须使用正确的权利文件对二进制文件进行编码。否则,iCloud服务将无法用于您的应用。 您可以参考Adding Capabilities文档来了解如何操作。