- 浏览: 168372 次
文章分类
最新评论
-
东京大师:
您好,您现在从事的是什么职业啊
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可以体检联系人与相片同步功能。
相关推荐
在Xcode中目标的“功能”选项卡中,确保已打开iCloud并确保已选中“键值存储”选项。 react-native-icloudstore模拟了相同的基于承诺的API为 。 除了所有AsyncStorage方法之外,还有一个附加功能:本机事件( ...
该API依赖于一组安全凭证,这些凭证存储在conf/settings.json文件中。 该软件包附带一个默认配置文件,该文件允许出于演示目的而对API的有限访问。 或者,可以在调用API时指定这些安全凭证(请参见下文)。 该文件...
linc / iCloud Haxe / hxcpp @: 本地绑定。 该库由慷慨赞助 这是一个库。 该库仅适用于Haxe cpp目标...终点当前,以下iCloud API已绑定并可用: 键值存储(导入icloud.KeyValue)用法示例现在请参阅test / example.hx
iOS和Mac App Store对应在何处存储文件提出了非常严格的条件,但是在正确的位置并不总是很清楚。 从iOS 5.0开始,由于需要确保某些文件不会备份到iCloud或在设备装满后不会被擦除,因此情况变得更加复杂。 另外,...
(可选) -启用键值存储->如果要使用同一iCloud帐户在多个设备之间共享uuidsOfUserDevices值,则启用目标/功能/ iCloud /键值存储。 (可选) -如果需要在具有相同bundle种子的多个应用程序中共享相同的...
巴士到站时间预报使用提供的API,透过Siri shortcut查询到站时间预报支援的巴士公司更新日志1.2加入专线小巴到站时间1.1使用iCloud储存最近搜寻记录快取车站名称1.0
iCloud: 学习如何在云端存储程序的数据,以及将数据共享与不同的设备 GLKit: 学习如何使用GLKit降低OpenGL ES 2.0编程的难度 UIKit Customization: 学习如何完整的定制程序的外观 Twitter Integration: 学习如何...
在遇到来自Core Data和iCloud新手的应用程序开发人员的许多请求后,我终于决定创建一个存储库,以将现有的示例应用程序迁移到其中。 我的目标是将示例更新为纯Swift 2.0,并解决最常见的问题,包括: 如何创建,...
如果要下载它,但没有icloud存储区位于已部署顶部的空间网站包含此回购的全部内容以及赠品! 目录 -- Lambda资源网站 加载Gif: 嵌入式导航栏 Web开发资源: 平台) -基于Chrome的V8 JavaScript引擎构建的异步非阻塞...
与Parse一样,Apple提供了灵活的API和仪表板,使开发人员可以窥探存储在Apple iCloud服务器上的数据。 在本系列中,您将通过构建购物清单应用程序来了解CloudKit框架和基础架构。 Tuts +教程的源文件: 在上阅读本...
这本书旨在教你学会开发iOS应用,无论是简单的音乐播放器还是混合了动画、图片、多媒体、数据库和云存储的复杂应用。在这本书中你将掌握云服务、自动引用计数、storyboard,Interface Builder, 创建ad-hoc 并且在...
这本书旨在教你学会开发iOS应用,无论是简单的音乐播放器还是混合了动画、图片、多媒体、数据库和云存储的复杂应用。在这本书中你将掌握云服务、自动引用计数、storyboard,Interface Builder, 创建ad-hoc 并且在...
这本书旨在教你学会开发iOS应用,无论是简单的音乐播放器还是混合了动画、图片、多媒体、数据库和云存储的复杂应用。在这本书中你将掌握云服务、自动引用计数、storyboard,Interface Builder, 创建ad-hoc 并且在...
这本书旨在教你学会开发iOS应用,无论是简单的音乐播放器还是混合了动画、图片、多媒体、数据库和云存储的复杂应用。在这本书中你将掌握云服务、自动引用计数、storyboard,Interface Builder, 创建ad-hoc 并且在...
一分钱该存储库不再维护。 ToThePenny-是控制个人理财最便捷的方法之一。主要特点: 以方便的方式添加新的费用记录。 通过iCloud备份和还原数据。 费用核算。 方便的饼图。 Touch ID支持。 iOS 9 Spotlight搜索。 ...
宝马租赁牌照 注意:此脚本至少需要版本1.6! 这是什么?...下载此存储库的内容并将其解压缩到iCloud Drive中的Scriptable文件夹中。 您的可脚本化文件夹结构应如下所示: iCloud Drive/ ├─ Scri
Textile JS HTTP客户端(js-http-client) 官方Textile JS HTTP包装器客户端加入我们的获取新闻,讨论和状态更新。... 该库提供对底层go-textile节点的REST API的访问,并添加了各种简化的API以支持浏览器内和程
云存储、推送通知、用户数据同步与身份管理、分析、NoSQL 数据库、事件与数据流 著名,面向企业,在线设计器,Ruby,H5 API管理公司 应该是德国公司,支持企业级 有可视化编程 企业平台、开发者工具和市场,...
该存储库包含核心API,守护程序和命令行客户端,以及移动(iOS / Android)应用程序的绑定。 提供基于和构建的加密,可恢复,基于模式的跨应用程序数据存储。 我们喜欢将其视为一个分散的数据钱包,它具有用于共享...