17

URLthroughを送信する次のコードがあります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];

受信者は次のメッセージを受け取ります。

ここに画像の説明を入力

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

4 に答える 4

2

ここのチュートリアルに従う必要があります。「UIActivityViewController の概要」という見出しの後、まさにあなたが探しているものだと思います。

UIActivityViewController *controller = [[UIActivityViewController alloc] initWithActivityItems:objectsToShare applicationActivities:nil];
[self presentViewController:controller animated:YES completion:nil];
于 2014-01-26T12:55:46.397 に答える
1

descriptionのを使用しているように思えURLます。メソッドをサブクラス化NSURLしてオーバーライドして、のdescriptionようなものを返すようにし@"a list"ます。試していませんが、使えそうです...

編集:私はあなたと同じように見えるこの質問を見つけました、そしてそれは受け入れられた答えを持っています:エアドロップ: カスタム URL スキームを受信者にとって見苦しくないようにする

于 2013-11-28T18:02:18.117 に答える
0

この質問はかなり前に投稿されています。@Ivanの回答と投稿の他の回答を試しましたが、うまくいきません!

私が元々持っているのは左の画像です。AirDrop でカスタム データを共有していてUIActivityController、デフォルトで生成されるタイトル「data-3A4F9D...」を見てみると、orz. 私が達成したいのは、受信者が読みやすいように、より説明的なタイトルです (右側の画像)。それはあなたの質問に非常に似ているようです(NSDataあなたが共有している間に私が共有しているにもかかわらずNSURL.

これが私がしていることで、かなりうまく機能します: UIActivityItemSourcemy 内に次のプロトコルを実装しますUIActivityItemProvider

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

それでも問題が解決しない場合は、お気軽に試してみて、どのように機能するかをお知らせください。

于 2015-02-03T18:14:16.393 に答える