- 浏览: 171796 次
文章分类
最新评论
-
东京大师:
您好,您现在从事的是什么职业啊
JetBrains PyCharm 2.0 注册机 -
linzcup:
官网http://www.huluwa.org/icloud/ ...
iCloud存储的API -
linzcup:
本文主要面向使用DateSync的开发者,开发者可通过此文学习 ...
iCloud存储的API -
linzcup:
WINDOWS版与ANDROID版的icloud 客户端API ...
iCloud存储的API -
19870125:
你好。在线播放音频的是怎么做的呢?
iPhone 应用开发:音频播放
iCloud存储的API
原文: http://blog.csdn.net/wilmer_wu/article/details/6968812
对开发者而言,涉及iCloud存储的功能主要有两个,一是iCloud document storage,利用iCloud存储用户文件,比如保存一些用户在使用应用时生成的文件,如数据库文件等;二是iCloud key-value data storage,利用iCloud存储键值对,主要是保存一些程序的设置信息,一般只允许存储几十K大小,我估计iBooks的书签同步等功能用的就是这种方式。
要注意iCloud的自动备份功能,如果用户在iOS5中打开了此功能,那么iClound会对用户的应用程序自动进行备份,作为开发人员,我们要注意文件存放目录的问题。因为应用主目录下的Document目录和Library目录(除了该目录下的Caches)的文件都会被自动的备份到iCloud,因此,可以把较大的临时文件或随时可以重建的文件放在Library\Caches目录下,就可以帮用户节省iCloud空间,提供用户体验。另外,相信大家都关心,应用存放在iCloud上如何保证安全呢,不用的应用保存的数据是否能够有效隔离?这一点,iCloud引入了iOS下sandbox的概念,即每一个应用在iCloud上都有一个sandbox,访问的范围就被限制在这里面,从而保证数据安全和隔离。
但是,iOS5还有一个机制值得注意,就是在设备容量空间不足的情况下,系统会自动清除高速缓存文件或临时目录的内容,当然,Library\Caches目录下的内容就会被清除掉,所以对开发人员来说是一个两难的选择。但从这种机制来看,apple是希望应用尽量在本地减少存储,但对中国的网络条件来说,完全依赖网络的应用应当还不太成熟。但对开发人员来说,在读取Library\Caches目录下的文件的时候,至少应当先做一个判断,看看文件在不在,以免引起程序崩溃。
还要注意的是,如果我们开发人员已经在使用了上述两种iCloud API对某些文件进行存储了,这些文件是不会自动备份到iCloud中的。
补充:
ios 5.0.1版将提供一个新的功能,可对一个文件设定一个属性,告诉系统即使在低存储的情况下,对这个文件也不会进行删除,这样的文件在用户备份到iCloud或iTunes的时候也不会被备份,所以需要开发人员手动进行管理。此外,设定了这种属性的文件无论放在哪一个目录下都可以保持上述特性。
实现代码如下:
参考 : http://stackoverflow.com/questions/8209755/iphone-move-resources-to-application-bundle
对开发者而言,涉及iCloud存储的功能主要有两个,一是iCloud document storage,利用iCloud存储用户文件,比如保存一些用户在使用应用时生成的文件,如数据库文件等;二是iCloud key-value data storage,利用iCloud存储键值对,主要是保存一些程序的设置信息,一般只允许存储几十K大小,我估计iBooks的书签同步等功能用的就是这种方式。
要注意iCloud的自动备份功能,如果用户在iOS5中打开了此功能,那么iClound会对用户的应用程序自动进行备份,作为开发人员,我们要注意文件存放目录的问题。因为应用主目录下的Document目录和Library目录(除了该目录下的Caches)的文件都会被自动的备份到iCloud,因此,可以把较大的临时文件或随时可以重建的文件放在Library\Caches目录下,就可以帮用户节省iCloud空间,提供用户体验。另外,相信大家都关心,应用存放在iCloud上如何保证安全呢,不用的应用保存的数据是否能够有效隔离?这一点,iCloud引入了iOS下sandbox的概念,即每一个应用在iCloud上都有一个sandbox,访问的范围就被限制在这里面,从而保证数据安全和隔离。
但是,iOS5还有一个机制值得注意,就是在设备容量空间不足的情况下,系统会自动清除高速缓存文件或临时目录的内容,当然,Library\Caches目录下的内容就会被清除掉,所以对开发人员来说是一个两难的选择。但从这种机制来看,apple是希望应用尽量在本地减少存储,但对中国的网络条件来说,完全依赖网络的应用应当还不太成熟。但对开发人员来说,在读取Library\Caches目录下的文件的时候,至少应当先做一个判断,看看文件在不在,以免引起程序崩溃。
还要注意的是,如果我们开发人员已经在使用了上述两种iCloud API对某些文件进行存储了,这些文件是不会自动备份到iCloud中的。
补充:
ios 5.0.1版将提供一个新的功能,可对一个文件设定一个属性,告诉系统即使在低存储的情况下,对这个文件也不会进行删除,这样的文件在用户备份到iCloud或iTunes的时候也不会被备份,所以需要开发人员手动进行管理。此外,设定了这种属性的文件无论放在哪一个目录下都可以保持上述特性。
实现代码如下:
#include <sys/xattr.h> - (void) AddSkipBackupAttributeToFile: (NSURL*) url { u_int8_t b = 1; setxattr([[url path] fileSystemRepresentation], "com.apple.MobileBackup", &b, 1, 0, 0); }
参考 : http://stackoverflow.com/questions/8209755/iphone-move-resources-to-application-bundle
评论
3 楼
linzcup
2013-09-05
官网http://www.huluwa.org/icloud/index.html
2 楼
linzcup
2013-09-05
本文主要面向使用DateSync的开发者,开发者可通过此文学习如何使用DateSync SDK进行开发。
开发环境
1.安装Microsoft Visual C# 2008/2010
2.安装Microsoft .NET Framework 3.5
3.请将以下DLL文件加入到项目中(以下文件位于DataSyncSDK安装路径下)
DLL文件:
agsXMPP.dll
CE.iPhone.PList.dll
DataSync.dll
log4net.dll
Newtonsoft.Json.dll
主要类介绍
名称
说明
DataSyncObject
DateSync SDK的核心类,通过调用该类中的login,put,get,delete等方法实现在icloud中对联系人,相片流等功能进行操作。
Context
DataSyncObject类中的方法参数都通过该类传入值,传出处理结果。
如何使用DataSync SDK
首先导入DataSync.dll文件到工程中
1.用户登陆
using DataSync;
static void Main()
{
DataSyncObject ds = new DataSyncObject();//创建DataSyncObject对像
ds.gIcloud = new Cloud();//生成gIcloud对像
Context loginctx = new Context();//生成Context对像
loginctx.loginUsername = "apple id ";//输入icoud 帐号
loginctx.loginPassword = "password";//输入icoud 帐号密码
loginctx.modeType = Context.ICLOUD_MODE;//输入Context参数的模块类型,当前设为登陆到icloud服务器上
bool ret = ds.login(loginctx);//登陆icoud,成功返回true,失败返回false;
if (ret == false)
{
return;
}
}
2.相片下载
using DataSync;
//进度条回调函数
//参数:transfered已传输字节数, total 表示总字节数
//返回值: true:中断传输,false:继续传输
public static bool TransferProgress(int transfered,int total)
{
return false;
}
static void Main()
{
DataSyncObject ds = new DataSyncObject();//创建DataSyncObject对像
ds.gIcloud = new Cloud();//生成gIcloud对像
Context loginctx = new Context();//生成Context对像
loginctx.loginUsername = "apple id ";//输入icoud 帐号
loginctx.loginPassword = "password";//输入icoud 帐号密码
loginctx.modeType = Context.ICLOUD_MODE;//输入Context参数的模块类型,当前设为登陆到icloud服务器上
bool ret = ds.login(loginctx);//登陆icoud,成功返回true,失败返回false;
if (ret == false)
{
return;
}
//登陆后,便可以下载相片
Context getctx ;
List<FileNode> files = ds.gIcloud.getPhotoList();//登陆成功后,通过该方法取得需要下载的文件列表
foreach (FileNode item in files)
{
getctx = new Context();
getctx.transferProgresscallback = new TransferProgressCallBack(TransferProgress);//进度条回调接口
getctx.modeType = Context.ICLOUD_PS_MODE;//指定要操作的模块为相片流模块
getctx.inItem = item;//要下载的文件节点
ds.get(getctx);//下载文件
if (getctx.outItem != null)
{
Console.Write("\n\n file " + getctx.outItem.filename + "down success.");
}
}
}
3.上传相片
using DataSync;
//进度条回调函数
//参数:transfered已传输字节数, total 表示总字节数
//返回值: true:中断传输,false:继续传输
public static bool TransferProgress(int transfered,int total)
{
return false;
}
static void Main()
{
DataSyncObject ds = new DataSyncObject();//创建DataSyncObject对像
ds.gIcloud = new Cloud();//生成gIcloud对像
Context loginctx = new Context();//生成Context对像
loginctx.loginUsername = "apple id ";//输入icoud 帐号
loginctx.loginPassword = "password";//输入icoud 帐号密码
loginctx.modeType = Context.ICLOUD_MODE;//输入Context参数的模块类型,当前设为登陆到icloud服务器上
bool ret = ds.login(loginctx);//登陆icoud,成功返回true,失败返回false;
if (ret == false)
{
return;
}
//登陆后,便可以上传相片
Context putctx = new Context();
putctx.transferProgresscallback = new TransferProgressCallBack(TransferProgress);
putctx.srcFileFullName = "e:/ndphoto/IMG_0255.JPG";//指定要上传的文件
putctx.modeType = Context.ICLOUD_PS_MODE;
ret = ds.put(putctx); //上传一张相片,最大不能超过50M
if (ret)
{
Console.Write("\n\n file put success. ");
}
}
4.删除图片
using DataSync;
static void Main()
{
DataSyncObject ds = new DataSyncObject();//创建DataSyncObject对像
ds.gIcloud = new Cloud();//生成gIcloud对像
Context loginctx = new Context();//生成Context对像
loginctx.loginUsername = "apple id ";//输入icoud 帐号
loginctx.loginPassword = "password";//输入icoud 帐号密码
loginctx.modeType = Context.ICLOUD_MODE;//输入Context参数的模块类型,当前设为登陆到icloud服务器上
bool ret = ds.login(loginctx);//登陆icoud,成功返回true,失败返回false;
if (ret == false)
{
return;
}
Context delctx = new Context();
delctx.srcFileFullName = "e:/ndphoto/IMG_0260.JPG";//要删除的图片
delctx.modeType = Context.ICLOUD_PS_MODE;
ret = ds.delete(delctx); //删除图片
if (ret)
{
Console.Write("\n\n file delete success. ");
}
}
5.获取所有联系人列表
using DataSync;
static void Main()
{
DataSyncObject ds = new DataSyncObject();//创建DataSyncObject对像
ds.gIcloud = new Cloud();//生成gIcloud对像
Context loginctx = new Context();//生成Context对像
loginctx.loginUsername = "apple id ";//输入icoud 帐号
loginctx.loginPassword = "password";//输入icoud 帐号密码
loginctx.modeType = Context.ICLOUD_MODE;//输入Context参数的模块类型,当前设为登陆到icloud服务器上
bool ret = ds.login(loginctx);//登陆icoud,成功返回true,失败返回false;
if (ret == false)
{
return;
}
Context ctx = new Context();
ctx.modeType = Context.ICLOUD_CONTACT_MODE;
ds.get(ctx);//结果存在ctx.outContactList中
List<Contact> contactList = ctx.outContactList;
}
6.删除所有联系人
using DataSync;
static void Main()
{
DataSyncObject ds = new DataSyncObject();//创建DataSyncObject对像
ds.gIcloud = new Cloud();//生成gIcloud对像
Context loginctx = new Context();//生成Context对像
loginctx.loginUsername = "apple id ";//输入icoud 帐号
loginctx.loginPassword = "password";//输入icoud 帐号密码
loginctx.modeType = Context.ICLOUD_MODE;//输入Context参数的模块类型,当前设为登陆到icloud服务器上
bool ret = ds.login(loginctx);//登陆icoud,成功返回true,失败返回false;
if (ret == false)
{
return;
}
ICloudContact iCloudContact = ds.icloud.GetContacts();
Context ctx = new Context();
ctx.contactList = iCloudContact.contacts;
ctx.modeType = Context.ICLOUD_CONTACT_MODE;
ds.delete(ctx);//删除所有联系人
List<Contact> contactList = ctx.outContactList;
}
7.增加联系人
using DataSync;
static void Main()
{
DataSyncObject ds = new DataSyncObject();//创建DataSyncObject对像
ds.gIcloud = new Cloud();//生成gIcloud对像
Context loginctx = new Context();//生成Context对像
loginctx.loginUsername = "apple id ";//输入icoud 帐号
loginctx.loginPassword = "password";//输入icoud 帐号密码
loginctx.modeType = Context.ICLOUD_MODE;//输入Context参数的模块类型,当前设为登陆到icloud服务器上
bool ret = ds.login(loginctx);//登陆icoud,成功返回true,失败返回false;
if (ret == false)
{
return;
}
//增加联系人
List<Contact> contacts = new List<Contact>();
Contact contact = new Contact { prefix = "pre", firstName = "aaa",
lastName = "bbb", middleName = "ccc",phoneticLastName = "",
phoneticFirstName = "Nicolas",suffix = "suff",nickName = "nickname",
jobTitle = "jobTitle", department = "systemSport", companyName = "nd",
birthday = "1999-01-01",notes = "测试添加一个完整的联系人"
};
////电话
contact.phones = new List<Phone>();
Phone phone1 = new Phone { label = "WORK", field = "13635260966" };
Phone phone2 = new Phone { label = "HOME", field = "059122321966" };
Phone phone3 = new Phone { label = "custum", field = "15918726583" };
contact.phones.Add(phone1);
contact.phones.Add(phone2);
contact.phones.Add(phone3);
////邮件
contact.emailAddresses = new List<EmailAdr>();
EmailAdr emailAdr1 = new EmailAdr { label = "WORK", field = "test_1@yahoo.com.cn" };
EmailAdr emailAdr2 = new EmailAdr { label = "HOME", field = "test_2@gmail.com" };
EmailAdr emailAdr3 = new EmailAdr { label = "custum", field = "test_3@me.com" };
contact.emailAddresses.Add(emailAdr1);
contact.emailAddresses.Add(emailAdr2);
contact.emailAddresses.Add(emailAdr3);
////地址
contact.streetAddresses = new List<StreetAdr>();
StreetField streetField1 = new StreetField();
streetField1.city = "city";
streetField1.country = "country";
streetField1.state = "state";
streetField1.street = "street";
streetField1.countryCode = "countryCode";
StreetAdr streetAdr1 = new StreetAdr { label = "HOME", field = streetField1 };
StreetField streetField2 = new StreetField();
streetField1.city = "city";
streetField1.country = "country";
streetField1.state = "state";
streetField1.street = "street";
streetField1.countryCode = "countryCode";
StreetAdr streetAdr2 = new StreetAdr { label = "WORK", field = streetField2 };
StreetField streetField3 = new StreetField();
streetField1.city = "city";
streetField1.country = "country";
streetField1.state = "state";
streetField1.street = "street";
streetField1.countryCode = "countryCode";
StreetAdr streetAdr3 = new StreetAdr { label = "custum", field = streetField3 };
contact.streetAddresses.Add(streetAdr1);
contact.streetAddresses.Add(streetAdr2);
contact.streetAddresses.Add(streetAdr3);
////主页
contact.urls = new List<Url>();
Url url1 = new Url { label = "WORK", field = "www.sina.com" };
Url url2 = new Url { label = "HOME", field = "www.apple.com" };
Url url3 = new Url { label = "custum", field = "www.google.com" };
contact.urls.Add(url1);
contact.urls.Add(url2);
contact.urls.Add(url3);
////概况
contact.profiles = new List<Profile>();
Profile profile1 = new Profile { label = "Facebook", field = "http://twitter.com",user = "sdfdf" };
Profile profile2 = new Profile { label = "custum", field = "http://facebook.com",user = "jjjjjj" };
contact.profiles.Add(profile1);
contact.profiles.Add(profile2);
////日期
contact.dates = new List<Date>();
Date date1 = new Date { label = "other", field = "2011-01-01" };
Date date2 = new Date { label = "custum", field = "2012-01-01" };
contact.dates.Add(date1);
contact.dates.Add(date2);
////相关人
contact.relatedNames = new List<RelatedName>();
RelatedName relatedName1 = new RelatedName { label = "other", field = "father" };
RelatedName relatedName2 = new RelatedName { label = "custum", field = "brother" };
contact.relatedNames.Add(relatedName1);
contact.relatedNames.Add(relatedName2);
////通讯
contact.IMs = new List<IM>();
IMsfield iMsfield1 = new IMsfield();
iMsfield1.IMService = "QQ";
iMsfield1.userName = "qqusername";
IMsfield iMsfield2 = new IMsfield();
iMsfield2.IMService = "Facebook";
iMsfield2.userName = "testname";
IM iMs1 = new IM { label = "QQ", field = iMsfield1 };
IM iMs2 = new IM { label = "weibo", field = iMsfield2 };
contact.IMs.Add(iMs1);
contact.IMs.Add(iMs2);
contacts.Add(contact);
Context ctx = new Context();
ctx.modeType = Context.ICLOUD_CONTACT_MODE;
ctx.contactList = contacts;
ds.put(ctx);
}
8.修改联系人
using DataSync;
static void Main()
{
DataSyncObject ds = new DataSyncObject();//创建DataSyncObject对像
ds.gIcloud = new Cloud();//生成gIcloud对像
Context loginctx = new Context();//生成Context对像
loginctx.loginUsername = "apple id ";//输入icoud 帐号
loginctx.loginPassword = "password";//输入icoud 帐号密码
loginctx.modeType = Context.ICLOUD_MODE;//输入Context参数的模块类型,当前设为登陆到icloud服务器上
bool ret = ds.login(loginctx);//登陆icoud,成功返回true,失败返回false;
if (ret == false)
{
return;
}
//修改联系人
Context ctx = new Context();
ctx.modeType = Context.ICLOUD_CONTACT_MODE;
ds.get(ctx);
List<Contact> contactList = ctx.outContactList;
List<Contact> contacts = new List<Contact>();
Contact contact = contactList[0];
contact.firstName = "aaa";
contact.lastName = "bbb";
contact.phones = new List<Phone>();
Phone phone = new Phone { label = "WORK", field = "987654321" };
contact.phones.Add(phone);
contacts.Add(contact);
Context ctx = new Context();
ctx.modeType = Context.ICLOUD_CONTACT_MODE;
ctx.contactList = contacts;
ds.updata(ctx);
}
9.删除指定联系人
using DataSync;
static void Main()
{
DataSyncObject ds = new DataSyncObject();//创建DataSyncObject对像
ds.gIcloud = new Cloud();//生成gIcloud对像
Context loginctx = new Context();//生成Context对像
loginctx.loginUsername = "apple id ";//输入icoud 帐号
loginctx.loginPassword = "password";//输入icoud 帐号密码
loginctx.modeType = Context.ICLOUD_MODE;//输入Context参数的模块类型,当前设为登陆到icloud服务器上
bool ret = ds.login(loginctx);//登陆icoud,成功返回true,失败返回false;
if (ret == false)
{
return;
}
//删除联系人
Context ctx = new Context();
ctx.modeType = Context.ICLOUD_CONTACT_MODE;
ds.get(ctx);
List<Contact> contactList = ctx.outContactList;
List<Contact> delContacts = new List<Contact>();
Phone phone = new Phone { label = "WORK", field = "15935260966" };
Contact contact = contactList[0];
delContacts.Add(contact);
Context ctx = new Context();
ctx.modeType = Context.ICLOUD_CONTACT_MODE;
ctx.contactList = delContacts;
ds.delete(ctx);
}
开发环境
1.安装Microsoft Visual C# 2008/2010
2.安装Microsoft .NET Framework 3.5
3.请将以下DLL文件加入到项目中(以下文件位于DataSyncSDK安装路径下)
DLL文件:
agsXMPP.dll
CE.iPhone.PList.dll
DataSync.dll
log4net.dll
Newtonsoft.Json.dll
主要类介绍
名称
说明
DataSyncObject
DateSync SDK的核心类,通过调用该类中的login,put,get,delete等方法实现在icloud中对联系人,相片流等功能进行操作。
Context
DataSyncObject类中的方法参数都通过该类传入值,传出处理结果。
如何使用DataSync SDK
首先导入DataSync.dll文件到工程中
1.用户登陆
using DataSync;
static void Main()
{
DataSyncObject ds = new DataSyncObject();//创建DataSyncObject对像
ds.gIcloud = new Cloud();//生成gIcloud对像
Context loginctx = new Context();//生成Context对像
loginctx.loginUsername = "apple id ";//输入icoud 帐号
loginctx.loginPassword = "password";//输入icoud 帐号密码
loginctx.modeType = Context.ICLOUD_MODE;//输入Context参数的模块类型,当前设为登陆到icloud服务器上
bool ret = ds.login(loginctx);//登陆icoud,成功返回true,失败返回false;
if (ret == false)
{
return;
}
}
2.相片下载
using DataSync;
//进度条回调函数
//参数:transfered已传输字节数, total 表示总字节数
//返回值: true:中断传输,false:继续传输
public static bool TransferProgress(int transfered,int total)
{
return false;
}
static void Main()
{
DataSyncObject ds = new DataSyncObject();//创建DataSyncObject对像
ds.gIcloud = new Cloud();//生成gIcloud对像
Context loginctx = new Context();//生成Context对像
loginctx.loginUsername = "apple id ";//输入icoud 帐号
loginctx.loginPassword = "password";//输入icoud 帐号密码
loginctx.modeType = Context.ICLOUD_MODE;//输入Context参数的模块类型,当前设为登陆到icloud服务器上
bool ret = ds.login(loginctx);//登陆icoud,成功返回true,失败返回false;
if (ret == false)
{
return;
}
//登陆后,便可以下载相片
Context getctx ;
List<FileNode> files = ds.gIcloud.getPhotoList();//登陆成功后,通过该方法取得需要下载的文件列表
foreach (FileNode item in files)
{
getctx = new Context();
getctx.transferProgresscallback = new TransferProgressCallBack(TransferProgress);//进度条回调接口
getctx.modeType = Context.ICLOUD_PS_MODE;//指定要操作的模块为相片流模块
getctx.inItem = item;//要下载的文件节点
ds.get(getctx);//下载文件
if (getctx.outItem != null)
{
Console.Write("\n\n file " + getctx.outItem.filename + "down success.");
}
}
}
3.上传相片
using DataSync;
//进度条回调函数
//参数:transfered已传输字节数, total 表示总字节数
//返回值: true:中断传输,false:继续传输
public static bool TransferProgress(int transfered,int total)
{
return false;
}
static void Main()
{
DataSyncObject ds = new DataSyncObject();//创建DataSyncObject对像
ds.gIcloud = new Cloud();//生成gIcloud对像
Context loginctx = new Context();//生成Context对像
loginctx.loginUsername = "apple id ";//输入icoud 帐号
loginctx.loginPassword = "password";//输入icoud 帐号密码
loginctx.modeType = Context.ICLOUD_MODE;//输入Context参数的模块类型,当前设为登陆到icloud服务器上
bool ret = ds.login(loginctx);//登陆icoud,成功返回true,失败返回false;
if (ret == false)
{
return;
}
//登陆后,便可以上传相片
Context putctx = new Context();
putctx.transferProgresscallback = new TransferProgressCallBack(TransferProgress);
putctx.srcFileFullName = "e:/ndphoto/IMG_0255.JPG";//指定要上传的文件
putctx.modeType = Context.ICLOUD_PS_MODE;
ret = ds.put(putctx); //上传一张相片,最大不能超过50M
if (ret)
{
Console.Write("\n\n file put success. ");
}
}
4.删除图片
using DataSync;
static void Main()
{
DataSyncObject ds = new DataSyncObject();//创建DataSyncObject对像
ds.gIcloud = new Cloud();//生成gIcloud对像
Context loginctx = new Context();//生成Context对像
loginctx.loginUsername = "apple id ";//输入icoud 帐号
loginctx.loginPassword = "password";//输入icoud 帐号密码
loginctx.modeType = Context.ICLOUD_MODE;//输入Context参数的模块类型,当前设为登陆到icloud服务器上
bool ret = ds.login(loginctx);//登陆icoud,成功返回true,失败返回false;
if (ret == false)
{
return;
}
Context delctx = new Context();
delctx.srcFileFullName = "e:/ndphoto/IMG_0260.JPG";//要删除的图片
delctx.modeType = Context.ICLOUD_PS_MODE;
ret = ds.delete(delctx); //删除图片
if (ret)
{
Console.Write("\n\n file delete success. ");
}
}
5.获取所有联系人列表
using DataSync;
static void Main()
{
DataSyncObject ds = new DataSyncObject();//创建DataSyncObject对像
ds.gIcloud = new Cloud();//生成gIcloud对像
Context loginctx = new Context();//生成Context对像
loginctx.loginUsername = "apple id ";//输入icoud 帐号
loginctx.loginPassword = "password";//输入icoud 帐号密码
loginctx.modeType = Context.ICLOUD_MODE;//输入Context参数的模块类型,当前设为登陆到icloud服务器上
bool ret = ds.login(loginctx);//登陆icoud,成功返回true,失败返回false;
if (ret == false)
{
return;
}
Context ctx = new Context();
ctx.modeType = Context.ICLOUD_CONTACT_MODE;
ds.get(ctx);//结果存在ctx.outContactList中
List<Contact> contactList = ctx.outContactList;
}
6.删除所有联系人
using DataSync;
static void Main()
{
DataSyncObject ds = new DataSyncObject();//创建DataSyncObject对像
ds.gIcloud = new Cloud();//生成gIcloud对像
Context loginctx = new Context();//生成Context对像
loginctx.loginUsername = "apple id ";//输入icoud 帐号
loginctx.loginPassword = "password";//输入icoud 帐号密码
loginctx.modeType = Context.ICLOUD_MODE;//输入Context参数的模块类型,当前设为登陆到icloud服务器上
bool ret = ds.login(loginctx);//登陆icoud,成功返回true,失败返回false;
if (ret == false)
{
return;
}
ICloudContact iCloudContact = ds.icloud.GetContacts();
Context ctx = new Context();
ctx.contactList = iCloudContact.contacts;
ctx.modeType = Context.ICLOUD_CONTACT_MODE;
ds.delete(ctx);//删除所有联系人
List<Contact> contactList = ctx.outContactList;
}
7.增加联系人
using DataSync;
static void Main()
{
DataSyncObject ds = new DataSyncObject();//创建DataSyncObject对像
ds.gIcloud = new Cloud();//生成gIcloud对像
Context loginctx = new Context();//生成Context对像
loginctx.loginUsername = "apple id ";//输入icoud 帐号
loginctx.loginPassword = "password";//输入icoud 帐号密码
loginctx.modeType = Context.ICLOUD_MODE;//输入Context参数的模块类型,当前设为登陆到icloud服务器上
bool ret = ds.login(loginctx);//登陆icoud,成功返回true,失败返回false;
if (ret == false)
{
return;
}
//增加联系人
List<Contact> contacts = new List<Contact>();
Contact contact = new Contact { prefix = "pre", firstName = "aaa",
lastName = "bbb", middleName = "ccc",phoneticLastName = "",
phoneticFirstName = "Nicolas",suffix = "suff",nickName = "nickname",
jobTitle = "jobTitle", department = "systemSport", companyName = "nd",
birthday = "1999-01-01",notes = "测试添加一个完整的联系人"
};
////电话
contact.phones = new List<Phone>();
Phone phone1 = new Phone { label = "WORK", field = "13635260966" };
Phone phone2 = new Phone { label = "HOME", field = "059122321966" };
Phone phone3 = new Phone { label = "custum", field = "15918726583" };
contact.phones.Add(phone1);
contact.phones.Add(phone2);
contact.phones.Add(phone3);
////邮件
contact.emailAddresses = new List<EmailAdr>();
EmailAdr emailAdr1 = new EmailAdr { label = "WORK", field = "test_1@yahoo.com.cn" };
EmailAdr emailAdr2 = new EmailAdr { label = "HOME", field = "test_2@gmail.com" };
EmailAdr emailAdr3 = new EmailAdr { label = "custum", field = "test_3@me.com" };
contact.emailAddresses.Add(emailAdr1);
contact.emailAddresses.Add(emailAdr2);
contact.emailAddresses.Add(emailAdr3);
////地址
contact.streetAddresses = new List<StreetAdr>();
StreetField streetField1 = new StreetField();
streetField1.city = "city";
streetField1.country = "country";
streetField1.state = "state";
streetField1.street = "street";
streetField1.countryCode = "countryCode";
StreetAdr streetAdr1 = new StreetAdr { label = "HOME", field = streetField1 };
StreetField streetField2 = new StreetField();
streetField1.city = "city";
streetField1.country = "country";
streetField1.state = "state";
streetField1.street = "street";
streetField1.countryCode = "countryCode";
StreetAdr streetAdr2 = new StreetAdr { label = "WORK", field = streetField2 };
StreetField streetField3 = new StreetField();
streetField1.city = "city";
streetField1.country = "country";
streetField1.state = "state";
streetField1.street = "street";
streetField1.countryCode = "countryCode";
StreetAdr streetAdr3 = new StreetAdr { label = "custum", field = streetField3 };
contact.streetAddresses.Add(streetAdr1);
contact.streetAddresses.Add(streetAdr2);
contact.streetAddresses.Add(streetAdr3);
////主页
contact.urls = new List<Url>();
Url url1 = new Url { label = "WORK", field = "www.sina.com" };
Url url2 = new Url { label = "HOME", field = "www.apple.com" };
Url url3 = new Url { label = "custum", field = "www.google.com" };
contact.urls.Add(url1);
contact.urls.Add(url2);
contact.urls.Add(url3);
////概况
contact.profiles = new List<Profile>();
Profile profile1 = new Profile { label = "Facebook", field = "http://twitter.com",user = "sdfdf" };
Profile profile2 = new Profile { label = "custum", field = "http://facebook.com",user = "jjjjjj" };
contact.profiles.Add(profile1);
contact.profiles.Add(profile2);
////日期
contact.dates = new List<Date>();
Date date1 = new Date { label = "other", field = "2011-01-01" };
Date date2 = new Date { label = "custum", field = "2012-01-01" };
contact.dates.Add(date1);
contact.dates.Add(date2);
////相关人
contact.relatedNames = new List<RelatedName>();
RelatedName relatedName1 = new RelatedName { label = "other", field = "father" };
RelatedName relatedName2 = new RelatedName { label = "custum", field = "brother" };
contact.relatedNames.Add(relatedName1);
contact.relatedNames.Add(relatedName2);
////通讯
contact.IMs = new List<IM>();
IMsfield iMsfield1 = new IMsfield();
iMsfield1.IMService = "QQ";
iMsfield1.userName = "qqusername";
IMsfield iMsfield2 = new IMsfield();
iMsfield2.IMService = "Facebook";
iMsfield2.userName = "testname";
IM iMs1 = new IM { label = "QQ", field = iMsfield1 };
IM iMs2 = new IM { label = "weibo", field = iMsfield2 };
contact.IMs.Add(iMs1);
contact.IMs.Add(iMs2);
contacts.Add(contact);
Context ctx = new Context();
ctx.modeType = Context.ICLOUD_CONTACT_MODE;
ctx.contactList = contacts;
ds.put(ctx);
}
8.修改联系人
using DataSync;
static void Main()
{
DataSyncObject ds = new DataSyncObject();//创建DataSyncObject对像
ds.gIcloud = new Cloud();//生成gIcloud对像
Context loginctx = new Context();//生成Context对像
loginctx.loginUsername = "apple id ";//输入icoud 帐号
loginctx.loginPassword = "password";//输入icoud 帐号密码
loginctx.modeType = Context.ICLOUD_MODE;//输入Context参数的模块类型,当前设为登陆到icloud服务器上
bool ret = ds.login(loginctx);//登陆icoud,成功返回true,失败返回false;
if (ret == false)
{
return;
}
//修改联系人
Context ctx = new Context();
ctx.modeType = Context.ICLOUD_CONTACT_MODE;
ds.get(ctx);
List<Contact> contactList = ctx.outContactList;
List<Contact> contacts = new List<Contact>();
Contact contact = contactList[0];
contact.firstName = "aaa";
contact.lastName = "bbb";
contact.phones = new List<Phone>();
Phone phone = new Phone { label = "WORK", field = "987654321" };
contact.phones.Add(phone);
contacts.Add(contact);
Context ctx = new Context();
ctx.modeType = Context.ICLOUD_CONTACT_MODE;
ctx.contactList = contacts;
ds.updata(ctx);
}
9.删除指定联系人
using DataSync;
static void Main()
{
DataSyncObject ds = new DataSyncObject();//创建DataSyncObject对像
ds.gIcloud = new Cloud();//生成gIcloud对像
Context loginctx = new Context();//生成Context对像
loginctx.loginUsername = "apple id ";//输入icoud 帐号
loginctx.loginPassword = "password";//输入icoud 帐号密码
loginctx.modeType = Context.ICLOUD_MODE;//输入Context参数的模块类型,当前设为登陆到icloud服务器上
bool ret = ds.login(loginctx);//登陆icoud,成功返回true,失败返回false;
if (ret == false)
{
return;
}
//删除联系人
Context ctx = new Context();
ctx.modeType = Context.ICLOUD_CONTACT_MODE;
ds.get(ctx);
List<Contact> contactList = ctx.outContactList;
List<Contact> delContacts = new List<Contact>();
Phone phone = new Phone { label = "WORK", field = "15935260966" };
Contact contact = contactList[0];
delContacts.Add(contact);
Context ctx = new Context();
ctx.modeType = Context.ICLOUD_CONTACT_MODE;
ctx.contactList = delContacts;
ds.delete(ctx);
}
1 楼
linzcup
2013-09-05
WINDOWS版与ANDROID版的icloud 客户端API
官网http://www.huluwa.org/icloud/index.html
下载官网上的DEMO可以体检联系人与相片同步功能。
官网http://www.huluwa.org/icloud/index.html
下载官网上的DEMO可以体检联系人与相片同步功能。
相关推荐
你可能需要处理的身份验证类型是OAuth或iCloud特有的Web服务身份验证,这需要对iCloud的API有深入的理解。 iCloud的API,尤其是日历服务,是基于CalDAV标准的。CalDAV允许客户端通过HTTP协议与服务器交互,执行如...
对于开发者来说,iCloud提供了丰富的API和工具,如CloudKit,用于构建能与iCloud无缝集成的应用。通过CloudKit,开发者可以轻松地处理用户身份验证、数据存储和同步、推送通知等功能,而无需自行维护服务器。 至于...
在IT行业中,iCloud是苹果公司提供的一项云存储和云计算服务,它允许用户在各种苹果设备上同步和存储数据,包括照片、视频、联系人、日历、文档等。本主题聚焦于“iCloud模拟登录获取位置信息”,这涉及到网络通信、...
2. **数据访问接口**:提供了易于使用的API,开发者可以快速读取、写入和更新iCloud中的数据记录。 3. **数据删除功能**:符合GDPR要求,框架允许用户请求删除其个人数据,开发者可以通过这个功能轻松实现数据的...
iCloud 是苹果公司推出的一项云服务,它允许用户在各种设备上(如 iPhone、iPad、Mac、Windows PC)同步和存储数据,实现跨平台的数据共享和备份。通过 iCloud,用户可以无缝地访问和更新他们的照片、文档、联系人、...
1. **NSUbiquitousKeyValueStore**: 这是苹果提供的轻量级API,用于存储键值对数据。它可以跨设备实时同步,适合存储少量非结构化数据,如用户设置。 2. **Core Data with iCloud**: 如果你需要存储大量的结构化...
在这个项目中,开发者可能已经实现了登录、云存储、文件同步、邮件服务等功能,这些都是iCloud的核心特性。通过分析和研究这样的源码,开发者可以了解大型Web应用的架构设计、前端交互逻辑以及后端服务的实现方式。 ...
在iOS开发中,iCloud是一种云存储服务,允许开发者将用户的数据存储在云端,并在用户的各个设备间同步。iCloudKit是苹果提供的框架,使得开发者可以轻松地在应用中集成iCloud功能。通过这个源码,我们可以学习到: ...
iCloud是由Apple提供的一项云存储和云计算服务,用户可以存储照片、文档、音乐、联系人、日历等数据,并在多个设备之间同步。这个Node API 提供了一种方便的方式,让开发者能够利用Node.js与iCloud的某些功能进行...
CloudKit提供了一系列的RESTful API,用于存储、检索和同步数据,并支持身份验证、推送通知等功能。 在使用Go语言与CloudKit交互时,我们需要使用第三方库或自行实现HTTP客户端来处理API请求。由于Apple的API通常...
在Xcode中目标的“功能”选项卡中,确保已打开iCloud并确保已选中“键值存储”选项。 react-native-icloudstore模拟了相同的基于承诺的API为 。 除了所有AsyncStorage方法之外,还有一个附加功能:本机事件( ...
5. **iCloud特定操作**:iCloud API支持照片库(Photolibrary)和服务存储(CloudStorage)。根据项目需求,选择合适的接口进行操作,如获取文件列表、删除文件等。 6. **错误处理和权限**:确保用户具有正确的权限...
- iCloudKit是Apple的开发框架,为开发者提供了一套API,用于构建基于iCloud的应用程序。它允许开发者创建数据库,定义模型对象,并处理数据同步和冲突解决。 - iCloudKit包括两个主要部分:CloudKit容器和...
此外,开发者可以通过iCloud API将云同步功能引入他们自己的应用程序,使跨设备的协同工作变得简单。 iCloud照片库是另一项重要的服务,它允许用户在所有设备上查看和访问他们拍摄的照片和视频。新的照片会自动上传...
它使得开发者能够将用户数据安全地存储在Apple的iCloud基础设施上,让用户可以在不同设备间同步和访问信息。"允许用户管理存储在iCloud中的数据的框架.zip" 文件内容可能包含一个名为"CloudKitGDPR-master"的开源...
该API依赖于一组安全凭证,这些凭证存储在conf/settings.json文件中。 该软件包附带一个默认配置文件,该文件允许出于演示目的而对API的有限访问。 或者,可以在调用API时指定这些安全凭证(请参见下文)。 该文件...
在iOS和macOS开发中,iCloud是一项强大的云同步服务,它允许开发者将应用程序的数据存储在云端,并在用户的多个设备间实现同步。本Demo“iCloud Demo 2(Doucument&Key Value Storage)”专注于两种不同的iCloud数据...