Подтвердить что ты не робот

Настройте описание оповещения AirDrop в IOS

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

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 хотел бы поделиться списком с вами"? Спасибо заранее!

ИЗМЕНИТЬ

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

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;
}
4b9b3361

Ответ 1

Вам нужно будет реализовать класс, соответствующий протоколу 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.

Ответ 2

Вам нужно следовать учебнику ЗДЕСЬ. После заголовка "Быстрый взгляд на UIActivityViewController", я думаю, именно то, что вы ищете.

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

Ответ 3

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

РЕДАКТИРОВАТЬ:. Я нашел этот вопрос, который выглядит таким же, как ваш, и имеет принятый ответ: Airdrop: создание настраиваемой схемы URL-адресов будет меньше уродливый для получателя

Ответ 4

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

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

D3z0f.pngmTn8A.png

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

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

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