Dur*_*n.H 95
在iOS开发的沙盒世界中,应用程序之间共享数据可能会很困难由于iOS开发人员无法直接通过文件系统共享数据,因此他们需要为其应用程序找到替代解决方案.一些常见的解决方案包
UIDocumentInteractionController
UIActivityViewController
共享钥匙串访问
自定义URL方案
网络服务
iCloud API
允许用户在任何其他应用程序中打开文档,该文档注册为能够处理特定文档的统一类型标识符(UTI).
UIDocumentInteractionController过去曾用作在设备上的其他应用程序中打开文档的方法,例如,从Mail应用程序打开电子邮件附件.

不幸的是,UIDocumentInteractionController的UI只显示六个应用程序.
您不能保证您的应用程序将出现在列表中.虽然UIDocumentInteractionController尚未被弃用,但 UIActivityViewController在iOS 6.0中提供了更灵活的替代品.
可用性: iOS 3.2+
优点:
缺点:
允许控制发送到UIDocumentInteractionController的数据类型,但不能控制目标.
需要额外的用户交互.
数量有限的目的地可能导致您的应用程序无法显示在列表中.
允许用户使用一组数据执行许多操作.
例如,他们可以打印,发送电子邮件,复制,发布到社交媒体或在其他应用程序中打开.
您可以创建自己的UIActivity子类,以便为用户提供自定义服务.

可用性: iOS 6.0+
优点:
非常适合与各种应用程序和社交媒体共享通用数据类型.
可以提供一系列项目以应用于活动.对象应符合UIActivityItemSource协议.
能够设置排除的活动类型.
分页UI允许比UIDocumentInteractionController更多的数据目的地.
缺点:
您必须定义自定义活动类型以限制常见数据类型的"打开方式..."目标.
需要额外的用户交互.
允许您将数据安全地存储到共享密钥链,以便属于一组应用程序的其他应用程序可以访问.
共享密钥链访问权限的所有应用程序必须使用相同的应用程序ID前缀.
有关共享密钥链访问的示例.请参阅Apple的GenericKeychain示例代码.

可用性: iOS 3.0+
优点:
缺点:
您只能在共享公共应用程序ID前缀的应用程序之间共享数据.
iOS模拟器上的Keychain API来自OS X,它具有与iOS设备不同的API.
允许数据在使用简单URL的应用程序之间传递.

可用性: iOS 3.0+
优点:
缺点:
您必须将数据编码为转义的合法URL.
注意:通常使用base64编码将可序列化数据转换为字符串值.但是,base64字符串可能包含在URL中使用无效的字符.您可以考虑使用base64url.有关详细信息,请参阅Base 64编码与URL和文件名安全字母.
每个人都知道什么是iCloud,优点和缺点所以没有更多的解释.
但有人可能会问,如何在单个设备内的应用程序之间共享数据,有一些解决方法可以实现这一点.

这是可能的,因为用于iCloud的标识符与包标识符不同,因此可以共享图像,视频和其他文档.
要了解更多信息,请参阅有关此主题的讨论
通过第三方(例如Dropbox)或自定义构建的Web服务同步数据.

可用性: iOS 2.0+
优点:
缺点:
Chi*_*ani 50
从iOS 8开始,我使用" App Group功能 " 成功访问了Same文件夹.我正在扩展@siejkowski的答案.
注意:它仅适用于同一个开发人员帐户.
为此,您必须按照以下步骤操作.
现在您必须创建两个应用程序.样品名称
现在我们将图像从Demo_Share_One复制到共享文件夹,该文件夹在您启用应用程序组并运行应用程序时默认创建.并将从Demo_Share_Two访问所有这些图像.
您必须为您的开发者帐户设置Take Group Name.lets说group.filesharingdemo.
在两个应用程序中添加以下方法以获取共享文件夹URL的相对路径.
- (NSString *) getSharedLocationPath:(NSString *)appGroupName {
NSFileManager *fileManager = [NSFileManager defaultManager];
NSURL *groupContainerURL = [fileManager containerURLForSecurityApplicationGroupIdentifier:appGroupName];
return [groupContainerURL relativePath];
}
Run Code Online (Sandbox Code Playgroud)
现在我们从Demo_Share_One复制Bundle中的图像
-(IBAction)writeImage:(id)sender
{
for (int i = 0; i<15; i++)
{
NSString *strSourcePath = [[NSBundle mainBundle] pathForResource:[NSString stringWithFormat:@"hd%d",i+1] ofType:@"jpg"];
NSString *strDestinationPath = [[self getSharedLocationPath:@"group.filesharingdemo"] stringByAppendingPathComponent:[NSString stringWithFormat:@"hd%d",i+1]] ;
BOOL filewrite = [[NSFileManager defaultManager]copyItemAtPath:strSourcePath toPath:strDestinationPath error:nil];
if (filewrite)
NSLog(@"File write");
else
NSLog(@"can not write file");
}
}
Run Code Online (Sandbox Code Playgroud)
现在在Demo_Share_Two中访问这些图像
NSString *pathShared = [[self getSharedLocationPath:@"group.filesharingdemo"] stringByAppendingPathComponent:[NSString stringWithFormat:@"hd%d.jpg",number]];
NSLog(@"%@",pathShared);
//BOOL fileExist = [[NSFileManager defaultManager] fileExistsAtPath:pathShared];
imgView.image = [UIImage imageWithContentsOfFile:pathShared];
Run Code Online (Sandbox Code Playgroud)
现在,您将获得您从Demo_Share_One写的所有图像.
所以从现在开始如果你想分享这个文件夹两个你的第三个应用程序.只需在您的论坛中添加该应用即可.因此,在您的多个应用中访问相同的元素太容易了.
如果您不在AppID中启用应用程序组,那么您将获得[self getSharedLocationPath:@"group.filesharingdemo"]为空.
感谢Apple 从您自己的应用程序功能中获取Share Elements.快乐的编码.:)
bau*_*dot 35
从历史上看,iPhone一直试图阻止应用程序之间的数据共享.这个想法是,如果你无法获得另一个应用程序的数据,你就不会对该应用程序做任何坏事.
在最近的IOS版本中,他们放松了一点.例如,iOS编程指南现在有一个部分,通过让一个应用程序声明某个URL前缀,然后让其他应用程序引用该URL,在应用程序之间传递数据.因此,也许您将事件应用设置为回答"event://"网址的方式与网络服务器回答"http://"网址的方式相同.
苹果的这种做法的文件是在这里.
看看"实现自定义URL方案".
sie*_*ski 16
从iOS 8开始,只要它们位于通用应用程序组中,您就可以轻松地在应用程序之间共享数据.
Apple文档最好在Extensions上下文中解释:https://developer.apple.com/library/prerelease/ios/documentation/General/Conceptual/ExtensibilityPG/ExtensionScenarios.html
基本上,你需要:
第一个API基于NSUserDefaults:
NSString *appGroupId = @"group.my.group.id";
NSUserDefaults *myDefaults = [[NSUserDefaults alloc]
initWithSuiteName:appGroupId];
[myDefaults setObject:@"foo" forKey:@"bar"];
Run Code Online (Sandbox Code Playgroud)
第二个API基于NSFileManager.它只是一个共享文件夹,您可以在获取它的URL后访问它:
NSString *appGroupId = @"group.my.group.id";
NSURL *sharedFolderURL = [[NSFileManager defaultManager]
containerURLForSecurityApplicationGroupIdentifier:appGroupId];
Run Code Online (Sandbox Code Playgroud)
您放入的任何内容myDefaults或指向的文件夹sharedFolderURL都将对您的所有应用程序可见并可访问.
在文件夹的情况下,请原子地写/读只是为了确保没有死锁.
| 归档时间: |
|
| 查看次数: |
68716 次 |
| 最近记录: |