是否有可能显示的Facebook UIActivity中UIActivityViewController,如果有一个在iOS的默认设置,facebook账号没有设置?现在,如果我进入一些fb帐户 - 我看到fb in UIActivityViewController,如果没有 - 没有看到.有任何想法吗?
我是UIActivityViewController的新手,也许我错过了一个基本的了解.我想要做的是将csv,xml和vcard文件附加到活动控制器并显示dropbox,google drive等选项.我已经在iPhone上下载并安装了Dropbox,google驱动器等应用程序.
现在当我启动UIActivityViewController时,我看到的是我的acitivity控制器中的默认消息和电子邮件应用程序.我怎样才能将其他应用程序显示在他们身上?我是否需要安装每个应用程序各个SDK并以某种方式将它们合并到我的应用程序中?
这就是我想看到的
但这是我所看到的.

这是我到目前为止尝试过的代码
-(IBAction) dropBoxAction
{
paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask ,YES);
NSString* documentsPath = [paths objectAtIndex:0];
//CSV
NSMutableString *fileNameStr = [NSMutableString stringWithFormat:@"test_CSV_Backup.csv"];
NSString* csvDataFileStr = [documentsPath stringByAppendingPathComponent:fileNameStr];
NSData *csvData = [NSData dataWithContentsOfFile:csvDataFileStr];
//EXCEL
NSMutableString *fileNameStr2 = [NSMutableString stringWithFormat:@"test_EXCEL_Backup.xml"];
NSString* excelDataFileStr = [documentsPath stringByAppendingPathComponent:fileNameStr2];
NSData *excelData = [NSData dataWithContentsOfFile:excelDataFileStr];
//VCARD
NSMutableString *fileNameStr3 = [NSMutableString stringWithFormat:@"test_VCARD_Backup.vcf"];
NSString* vcardDataFileStr = [documentsPath stringByAppendingPathComponent:fileNameStr3];
NSData *vcardData = [NSData dataWithContentsOfFile:vcardDataFileStr];
//adding them all together
NSMutableArray *sharingItems = [NSMutableArray new];
[sharingItems addObject:csvData];
[sharingItems addObject:excelData]; …Run Code Online (Sandbox Code Playgroud) 我创建了一个自定义UIActivity以在共享表中显示.我创建了一个全彩色的60x60图标(png文件),但是当它显示时它只显示灰色的轮廓.我不明白我写错了什么.我希望有人看到我错过的东西.任何帮助将不胜感激.这是我的代码......
@implementation MyActivity
#pragma mark - Overrides
- (NSString *)activityType {
return @"MyType";
}
- (NSString *)activityTitle {
return @"ShareMe";
}
- (UIImage *)activityImage {
return [UIImage imageNamed:@"MyIcon_60x60.png"];
}
- (BOOL)canPerformWithActivityItems:(NSArray *)activityItems {
return YES;
}
- (void)prepareWithActivityItems:(NSArray *)activityItems {
// Do Something
}
+ (UIActivityCategory)activityCategory {
return UIActivityCategoryShare;
}
@end
Run Code Online (Sandbox Code Playgroud) 我在我的应用程序中共享存在问题,我想知道我是否做错了,或者这可能是iOS8中的错误.
在我的应用程序中,我有能力共享文件,如果共享类型支持附加文件(例如电子邮件)的附件,否则它共享一个包含文件链接的字符串.
在创建共享活动时,我做了类似的事情(我已经大大简化了我自己的实现,但这只是一个例子):
-(void)showShareButtons:(BOOL)animated
{
NSString *textToShare = @"Foobar!";
NSURL *myWebsite = [NSURL URLWithString:@"http://www.stackoverflow.com/"];
NSString *localPath = [NSTemporaryDirectory() stringByAppendingPathComponent:"temp.foo"];
NSURL *localFile = [NSURL fileURLWithPath:localPath];
NSArray *objectsToShare = @[textToShare, myWebsite, localFile];
UIActivityViewController *activityVC = [[UIActivityViewController alloc] initWithActivityItems:objectsToShare applicationActivities:nil];
NSArray *excludeActivities = nil;
activityVC.excludedActivityTypes = excludeActivities;
[m_viewController presentViewController:activityVC animated:YES completion:nil];
}
Run Code Online (Sandbox Code Playgroud)
在iOS7上,我收到"消息,邮件,推特和Facebook"选项进行共享,这正是我所期望的.
- 对于Mail和Message,它使用String,URL和本地文件
- 对于Twitter和Facebook,它只有字符串和URL,其中URL显示为正确的链接(未在消息中显示)
在iOS8上,我只收到消息和邮件选项,两者都与iOS7中的相同.
它似乎现在限制它共享支持每个项目的选项,而在它列出支持任何项目的项目之前.
构建信息:
两者都是在xCode6 Beta中构建的,部署目标目前设置为iOS7.0
iPhone 5(MD295C/A)上的iOS 8.0(12A4345d),4S(MD241C/A)上的7.1.2(11D257)
编辑:此外,如果我只设置一个选项,如字符串,则所有选项都可用.所以我能够在两者上共享这些(即,它们已启用)
我已经看到很多应用程序使用UIApplicationShortcutIconTypeShare应用程序快捷方式直接从主屏幕共享他们的应用程序.它直接从主屏幕启动UIActivityViewController,无需打开应用程序.你是怎样做的?
objective-c ios uiactivityviewcontroller uiapplicationshortcutitem
是否有一个如何UIActivityViewController使用我自己的图标自定义共享菜单的示例IBAction?
我见过这个......
- (id)initWithActivityItems:(NSArray *)activityItems applicationActivities:(NSArray *)applicationActivities;
Run Code Online (Sandbox Code Playgroud)
但我还没有完成它的工作.
所以我创建了一个.csv文件,然后允许用户使用UIActivityViewController共享它.
我创建csv文件的代码将返回文件的NSURL:
- (NSURL *)exportToCSV
{
NSString *docPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)objectAtIndex:0];
NSString *filePath = [docPath stringByAppendingPathComponent:@"results.csv"];
if (![[NSFileManager defaultManager] fileExistsAtPath:docPath]) {
[[NSFileManager defaultManager] createFileAtPath:filePath
contents:nil
attributes:nil];
}
NSMutableString *contents = [NSMutableString stringWithCapacity:0];
//fill contents with data in csv format
// ...
NSFileHandle *fileHandle = [NSFileHandle fileHandleForUpdatingAtPath:filePath];
[fileHandle writeData:[contents dataUsingEncoding:NSUTF8StringEncoding]];
[fileHandle closeFile];
return [NSURL fileURLWithPath:filePath];
}
Run Code Online (Sandbox Code Playgroud)
然后我的活动使用NSURL来启动UIActivityViewController:
- (IBAction)shareButtonPressed:(id)sender {
NSArray *activityItems = @[@"results.csv", [self.object exportToCSV]];
UIActivityViewController *shareScreen = [[UIActivityViewController alloc] initWithActivityItems:activityItems applicationActivities:nil];
[self presentViewController:shareScreen animated:YES completion:nil];
}
Run Code Online (Sandbox Code Playgroud)
当我选择邮件选项时,不附加csv文件.它只有文本"results.csv"
我究竟做错了什么?
我正在使用UIActivityViewController.对于特定的共享消息,我只想为用户提供UIActivityTypePostToFacebook(即仅通过Facebook共享).我意识到我可以使用excludedActivityTypes方法排除所有其他当前活动类型.
但是,我对这种方法的担心是,将来会出现更多的活动类型,因此我的应用程序会自动添加这些活动以供将来的操作系统版本使用.
因此,我想知道是否有一种方法只能说明您想要出现的活动类型(即excludedActivityTypes方法的includedActivityTypes版本)
干杯,查理
在iOS8上,我正在使用UIActivityViewController与Facebook/Twitter等共享UIImage.它似乎工作正常,但今天它在我的iPad上运行代码时突然崩溃了.但是,它仍然可以在模拟器中按预期工作.
我的代码:
UIActivityViewController *controller =
[[UIActivityViewController alloc]
initWithActivityItems:@[text, url, myImage]
applicationActivities:nil];
[self presentViewController:controller animated:YES completion:nil];
Run Code Online (Sandbox Code Playgroud)
崩溃后,Xcode吐出:
发现的扩展名:{({id = com.apple.share.Facebook.post},{id = com.apple.share.Twitter.post},{id = com.apple.share.TencentWeibo.post},{id = com.apple.share.SinaWeibo.post})} for attributes:{NSExtensionActivationRule = {extensionItems =({attachments =({registeredTypeIdentifiers =("public.image");},{registeredTypeIdentifiers =("public.plain-text" );},{registeredTypeIdentifiers =("public.url");});}); }; NSExtensionPointName =("com.apple.share-services","com.apple.ui-services","com.apple.services"); 2014-08-07 21:38:59.208 collageTest [279:11021] LaunchServices:invalidationHandler被称为2014-08-07 21:38:59.212 collageTest [279:11016]发现的扩展:{({id = com.apple.share .Flickr.post},{id = com.apple.mobileslideshow.StreamShareService},{id = com.apple.share.Twitter.post},{id = com.apple.share.Facebook.post},{id = com .apple.share.Vimeo.post},{id = com.apple.share.SinaWeibo.post},{id = com.apple.share.TencentWeibo.post})} for attributes:{NSExtensionPointName ="com.apple.共享服务"; 2014-08-07 21:38:59.216 collageTest [279:11021] LaunchServices:invalidationHandler被调用
我正在使用UIActivityViewController几个自定义UIActivityProviders.我的提供者返回NSString,UIImage和自定义数据对象.我通过设置UIActivityViewController excludedActivityTypes和Apple的内置活动类型排除了我不想分享的活动.
我不喜欢的是在所呈现的UIActivityViewController上出现的不是活动类型的应用程序.我假设这些出现是因为应用已通知iOS 8他们可以处理文本和图像数据.例如Flickr,Evernote和FaceBook的共享扩展.这些活动有自己的活动URL类型,我不想硬编码.
我不想在我的活动共享中使用这些应用程序的原因是大多数都无法正常工作,最终给我的用户带来了糟糕的体验,并可能因为执行不当而责怪我的应用程序.现实情况是,这些应用程序无法处理他们声称的数据.例如,Evernote总是只显示一个空的帖子对话框.有些像Facebook的共享扩展甚至记录错误,如果他们无法处理数据类型(真的吗?).
是否可以阻止所有第三方共享扩展?
如果答案是否定的,我似乎只有两个选择:
困难来自于initWithPlaceholderItem:(id)placeholderItem.我传回一个通用的NSString或UIImage,这些扩展说他们可以处理,但通常不会或在发布时记录错误.这将是一个检测共享扩展的可怕地方.
我想为我的用户提供最灵活的共享体验,但不会以糟糕的第三方实施为代价.
我知道我们喜欢在SO上显示代码,但不能想到任何不仅仅是样板UIActivityController饲料.