在IOS中自定义AirDrop警报描述

我有以下代码通过AirDrop发送一个URL

 NSString* selfUrlScheme = [[[[[[NSBundle mainBundle] infoDictionary] valueForKey:@"CFBundleURLTypes"] objectAtIndex:0] valueForKey:@"CFBundleURLSchemes"] objectAtIndex:0]; NSURL* schemeURL = [NSURL URLWithString: [NSString stringWithFormat: @"addList:%@,%@", self.list.uniqueID, selfUrlScheme]]; NSArray *objectsToShare = @[schemeURL]; controller = [[UIActivityViewController alloc] initWithActivityItems:objectsToShare applicationActivities:nil]; // Exclude all activities except AirDrop NSArray *excludedActivities = @[UIActivityTypePostToTwitter, UIActivityTypePostToWeibo, UIActivityTypeAssignToContact, UIActivityTypeSaveToCameraRoll, UIActivityTypeAddToReadingList, UIActivityTypePostToFlickr, UIActivityTypePostToVimeo, UIActivityTypePostToTencentWeibo]; controller.excludedActivityTypes = excludedActivities; [self presentViewController:controller animated:YES completion:nil]; 

收件人然后获得以下消息:

在这里输入图像说明

是否有可能将“X想要分享”后find的URL文本更改为“X想与您共享列表”这样更友好的用户? 提前致谢!

编辑

我现在有这个,但它仍然产生了上面的相同的结果:

 AirDropCustomURL *container = [[AirDropCustomURL alloc] initWithUrl:schemeURL]; NSString *message = @"a list"; controller = [[UIActivityViewController alloc] initWithActivityItems:@[message, container] applicationActivities:nil]; @interface AirDropCustomURL : NSObject <UIActivityItemSource> @property (strong, nonatomic) NSURL *url; @property (strong, nonatomic) UIImage *productImage; - (id)initWithUrl:(NSURL *)url; @implementation AirDropCustomURL - (id)initWithUrl:(NSURL *)url { if (self = [super init]) { _url = url; } return self; } #pragma mark - UIActivityItemSource - (id)activityViewControllerPlaceholderItem:(UIActivityViewController *)activityViewController { //Because the URL is already set it can be the placeholder. The API will use this to determine that an object of class type NSURL will be sent. return self.url; } - (id)activityViewController:(UIActivityViewController *)activityViewController itemForActivityType:(NSString *)activityType { //Return the URL being used. This URL has a custom scheme (see ReadMe.txt and Info.plist for more information about registering a custom URL scheme). if (floor(NSFoundationVersionNumber) <= NSFoundationVersionNumber_iOS_6_1) { return nil; } else { if ([activityType isEqualToString:UIActivityTypeAirDrop]) { return self.url; } } return nil; } 

你将不得不实现一个符合UIActivityItemSource协议的类。 这里有一个很好的例子: https : //developer.apple.com/LIBRARY/IOS/samplecode/sc2273/Introduction/Intro.html 。 请特别看看APLCustomURLContainer。 在实现URL容器类之后,您可以将其添加到活动项目以及一个string(这将是您的自定义消息)

 MyURLContainer *container = [[MyURLContainer alloc] initWithURL:yourURL]; NSString *message = @"Your message"; UIActivityViewController activityController = [[UIActivityViewController alloc] initWithActivityItems:@[message, container] applicationActivities:nil]; 

编辑:

我没有两个电话,所以我开始尝试,所以我只testing了Facebook和Twitter,它的工作正常,但是对于AirDrop,我现在可以确认(经过一些testing),它总是使用NSURL的relativeString,即使你重写NSURL的方法共享将无法工作,因此对于AirDrop(其他活动,如FB是OK),不能用当前的SDK更改该消息。

你需要按照这里的教程。 在标题“快速查看UIActivityViewController”后,我认为这就是你正在寻找的。

 UIActivityViewController *controller = [[UIActivityViewController alloc] initWithActivityItems:objectsToShare applicationActivities:nil]; [self presentViewController:controller animated:YES completion:nil]; 

在我看来,它是使用URLdescription 。 我会尝试子类NSURL并重写description方法返回类似@"a list" 。 我没有尝试,但似乎可以工作…

编辑:我发现这个问题看起来像你的一样,它有一个公认的答案: Airdrop:使一个自定义的URLscheme是不太难看的收件人

这个问题已经发布在looong前。 我试了@伊万的答案,以及在post中的其他答案,但是,他们只是不工作!

我原本是左边的图片。 我通过AirDrop共享自定义数据,并查看UIActivityController默认生成的标题“ data-3A4F9D … ”,orz。 我想要达到的是一个更具描述性的标题,以便接收者更易读(右图)。 这似乎是非常类似于你的问题(即使我在共享NSURL时共享NSURL

这是我做的,这工作得很好:在我的UIActivityItemProvider实现以下UIActivityItemSource协议。

 - (NSString *)activityViewController:(UIActivityViewController *)activityViewController subjectForActivityType:(NSString *)activityType { // This returning string is added to the email title return NSLocalizedString(@"CustomTitle", nil); } 

如果你仍然有这个问题,请随时尝试一下,让我知道它是如何工作的。