在IOS中自定义空投警报描述

在IOS中自定义空投警报描述,ios,iphone,objective-c,airdrop,Ios,Iphone,Objective C,Airdrop,我有以下代码通过空投发送URL: NSString* selfUrlScheme = [[[[[[NSBundle mainBundle] infoDictionary] valueForKey:@"CFBundleURLTypes"] objectAtIndex:0]

我有以下代码通过
空投发送
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想要共享”之后的
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;
}
AirDropCustomURL*容器=[[AirDropCustomURL alloc]initWithUrl:schemeURL];
NSString*消息=@“一个列表”;
控制器=[[UIActivityViewController alloc]initWithActivityItems:@[message,container]应用程序活动:nil];
@接口AirDropCustomURL:NSObject
@属性(强,非原子)NSURL*url;
@属性(强,非原子)UIImage*productImage;
-(id)initWithUrl:(NSURL*)url;
@实现AirDropCustomURL
-(id)initWithUrl:(NSURL*)url{
if(self=[super init]){
_url=url;
}
回归自我;
}
#pragma标记-UIActivityItemSource
-(id)activityViewControllerPlaceholderItem:(UIActivityViewController*)activityViewController{
//由于URL已设置,因此它可以是占位符。API将使用此占位符确定将发送类类型为NSURL的对象。
返回self.url;
}
-(id)activityViewController:(UIActivityViewController*)activityViewController itemForActivityType:(NSString*)activityType{
//返回正在使用的URL。此URL具有自定义方案(有关注册自定义URL方案的详细信息,请参阅ReadMe.txt和Info.plist)。

如果(floor(NSFoundationVersionNumber)您必须实现一个符合UIActivityItemSource协议的类。这里有一个很好的示例:。请特别查看APLCustomURLContainer。在实现URL容器类后,您可以将其与字符串一起添加到活动项中(这将是您的自定义消息)

编辑:


起初我没有两部手机可以试用,所以我只在Facebook和Twitter上测试了它是否正常工作,但对于AirDrop,我现在可以确认(经过一些测试)它总是使用NSURL的相对限制,即使你覆盖了NSURL的方法,分享对AirDrop也不会起作用(其他活动(如FB)不可能使用当前SDK更改该消息。

在我看来,它似乎在使用
URL
描述
。我将尝试子类化
NSURL
,并覆盖
描述
方法以返回类似
@“列表”的内容
。我没有试过,但似乎可以用


编辑:我发现这个问题看起来和你的问题一样,并且有一个公认的答案:

你需要遵循教程。在标题“快速查看UIActivityViewController”之后,我想这正是你想要的

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

这个问题很久以前就发布了。我尝试了@Ivan的答案以及帖子中的其他答案,但是,它们根本不起作用

我最初看到的是左边的图片。我正在通过空投共享自定义数据,并查看默认情况下由
UIActivityController
生成的标题“data-3A4F9D…”,或者z。我想要实现的是更具描述性的标题,以便收件人更容易阅读(右边的图片)。这似乎与您的问题极为相似(尽管我正在共享
NSData
,而您正在共享
NSURL

以下是我所做的工作,效果很好:在我的
UIActivityItemProvider
中实现以下
UIActivityItemSource
协议

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

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

你在哪里找到的?因为他们在你链接的示例代码中没有这样做。我刚刚发布的示例代码来自developer.apple.com,我正是这样做的-MyURLContainer应该是NSObject的一个子类,符合美国标准IActivityItemSource协议与示例中的APLCustomURLContainer一样。您还可以查看UIActivityViewController的文档,该文档解释了init方法的activityItems参数-:。我想您在这方面运气不好…请参阅我编辑的答案。我尝试在子类NSURL类中重写描述,但是运气不好。好吧,我想我最好去掉答案的那一部分,因为它显然是错的。谢谢。
- (NSString *)activityViewController:(UIActivityViewController *)activityViewController
          subjectForActivityType:(NSString *)activityType
{
        // This returning string is added to the email title
        return NSLocalizedString(@"CustomTitle", nil);
}