2013-11-26 3 views
17

У меня есть следующий код, чтобы отправить URL через AirDrop:Настроить описание десантного оповещения в IOS

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]; 

Затем получатель получает следующее сообщение:

enter image description here

Можно ли измените текст URL, найденный после того, как «X хотел бы поделиться» с чем-то более удобным для пользователя, например, «X хотел бы поделиться с вами списком»? Заранее спасибо!

EDIT

теперь у меня есть это, но он все еще получает тот же результат выше:

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; 
} 
+0

Я думаю, вам не повезло с этим ... см. Мой отредактированный ответ. –

ответ

7

Вы должны реализовать класс, соответствующий протоколу UIActivityItemSource. Здесь есть очень хороший пример: https://developer.apple.com/LIBRARY/IOS/samplecode/sc2273/Introduction/Intro.html. Посмотрите, в частности, на APLCustomURLContainer. После того, как вы реализуете свой класс URL контейнера вы можете добавить его к элементам деятельности вместе с строкой (которая будет пользовательское сообщение)

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

EDIT:

У меня не было два телефона в попробуйте сначала, поэтому я тестировал только для Facebook и Twitter, где он работает правильно, но для AirDrop я могу подтвердить (после некоторого тестирования), что он всегда использует относительную строку NSURL, и даже если вы переопределите этот метод NSURL, не будет работать так для AirDrop (другие действия, такие как FB в порядке), невозможно изменить это сообщение с текущим SDK.

+0

Где вы это нашли? Потому что они не делают этого в образце кода, который вы связали. –

+0

Пример кода, который я только что опубликовал, находится на developer.apple.com, и я делаю именно это. MyURLContainer должен быть подклассом NSObject, соответствующим протоколу UIActivityItemSource, как и APLCustomURLContainer из образца. Вы также можете проверить документацию для UIActivityViewController, которая объясняет параметр activityItems для метода init - https://developer.apple.com/library/IOS/documentation/UIKit/Reference/UIActivityViewController_Class/Reference/Reference.html#// apple_ref/ОКК/instm/UIActivityViewController/initWithActivityItems: applicationActivities :. –

+0

@IvanGenchev see me edit –

1

Мне кажется, что он использует description of URL. Я попытался бы подкласса NSURL и переопределить метод description, чтобы вернуть что-то вроде @"a list". Я не пробовал, но кажется, что он может работать ...

EDIT: Я нашел этот вопрос, который выглядит так же, как ваша, и она имеет общепринятый ответ: Airdrop: making a custom URL scheme be less ugly for recipient

+0

Я попытался переопределить описание в классе подкласса NSURL, но не повезло. – Skela

+0

Хорошо, тогда я думаю, что лучше удалить эту часть ответа, потому что это явно неправильно. Благодарю. –

2

Вам нужно следовать руководству HERE. После заголовка «Быстрый взгляд на UIActivityViewController», я думаю, именно то, что вы ищете.

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

Этот вопрос был опубликован в последнее время. Я попробовал ответить на @ Ivan, а также другие ответы на этот пост, однако они просто не работают!

То, что я изначально изобразил слева. Я поделился пользовательскими данными через AirDrop и посмотрел заголовок, который генерируется UIActivityController по умолчанию «data-3A4F9D ...», orz. То, что я хочу достичь, - более описательное название, чтобы оно было более читаемым для получателя (изображение справа). Кажется, что он очень похож на ваш вопрос (хотя я делюсь NSData, пока вы делитесь NSURL.

Вот что я делаю, который работает очень хорошо: реализовать следующий UIActivityItemSource протокол в моей UIActivityItemProvider.

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

Если вы до сих пор с этой проблемой, не стесняйтесь, чтобы дать это попробовать и дайте мне знать, как это работает для вас.

 Смежные вопросы

  • Нет связанных вопросов^_^