2013-11-26 17 views
17

Tôi có đoạn code sau đây để gửi một URL qua AirDrop:Tùy chỉnh mô tả cảnh báo thả dù trong 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]; 

Người nhận sau đó được thông báo sau:

enter image description here

Có thể thay đổi văn bản của số URL được tìm thấy sau khi 'X muốn chia sẻ' với nội dung thân thiện với người dùng hơn như 'X muốn chia sẻ danh sách với bạn'? Cảm ơn trước!

EDIT

bây giờ tôi có điều này nhưng nó vẫn sản xuất cùng một kết quả trên:

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

Tôi đoán bạn không may mắn vì điều này ... hãy xem câu trả lời đã chỉnh sửa của tôi. –

Trả lời

7

Bạn sẽ phải thực hiện một lớp phù hợp với các giao thức UIActivityItemSource. Có một ví dụ rất hay ở đây: https://developer.apple.com/LIBRARY/IOS/samplecode/sc2273/Introduction/Intro.html. Hãy xem APLCustomURLContainer nói riêng. Sau khi bạn thực hiện lớp container URL của bạn, bạn có thể thêm nó vào các mục hoạt động cùng với một chuỗi (mà sẽ được thông báo tùy chỉnh của bạn)

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

EDIT:

tôi không có hai điện thoại để trước tiên tôi chỉ thử nghiệm cho Facebook và Twitter nơi nó hoạt động chính xác, nhưng đối với AirDrop tôi có thể xác nhận ngay bây giờ (sau khi thử nghiệm) rằng nó luôn luôn sử dụng relativeString của NSURL và thậm chí nếu bạn ghi đè phương thức đó của NSURL sẽ không hoạt động như vậy đối với AirDrop (các hoạt động khác như FB là OK) không thể thay đổi thông báo đó bằng SDK hiện tại.

+0

Bạn tìm thấy điều đó ở đâu? Bởi vì họ không làm điều đó trong mã mẫu mà bạn đã liên kết. –

+0

Mã mẫu mà tôi vừa đăng là từ developer.apple.com và tôi làm chính xác điều đó - MyURLContainer phải là một lớp con của NSObject, tuân theo giao thức UIActivityItemSource giống như APLCustomURLContainer từ mẫu. Bạn cũng có thể kiểm tra tài liệu cho UIActivityViewController, giải thích tham số activityItems cho phương thức init - https://developer.apple.com/library/IOS/documentation/UIKit/Reference/UIActivityViewController_Class/Reference/Reference.html#// apple_ref/occ/instm/UIActivityViewController/initWithActivityItems: applicationActivities :. –

+0

@IvanGenchev thấy tôi chỉnh sửa –

1

Dường như với tôi như đang sử dụng description của URL. Tôi sẽ cố gắng phân lớp NSURL và ghi đè phương thức description để trả về một cái gì đó như @"a list". Tôi không thử nó, nhưng có vẻ như nó có thể làm việc ...

EDIT: Tôi tìm thấy câu hỏi này để được trông giống như bạn và nó có một câu trả lời được chấp nhận: Airdrop: making a custom URL scheme be less ugly for recipient

+0

Tôi đã cố gắng ghi đè mô tả trong lớp NSURL được phân lớp, nhưng không có may mắn. – Skela

+0

Ok, sau đó tôi đoán tôi nên xóa phần đó của câu trả lời vì nó rõ ràng là sai. Cảm ơn. –

2

Bạn cần để làm theo hướng dẫn HERE. Sau tiêu đề "Một cái nhìn nhanh tại UIActivityViewController", tôi nghĩ rằng đó chính xác những gì bạn đang tìm kiếm.

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

Câu hỏi này đã được đăng cách đây không lâu. Tôi đã thử câu trả lời của @ Ivan cũng như các câu trả lời khác trong bài đăng, tuy nhiên, họ chỉ không làm việc!

Điều tôi có ban đầu là hình ảnh ở bên trái. Tôi đang chia sẻ dữ liệu tùy chỉnh qua AirDrop và xem tiêu đề được tạo bởi UIActivityController theo mặc định "data-3A4F9D ...", orz. Những gì tôi muốn đạt được là một tiêu đề mô tả hơn để nó dễ đọc hơn đối với người nhận (hình ảnh bên phải). Dường như nó rất giống với câu hỏi của bạn (mặc dù tôi đang chia sẻ NSData trong khi bạn đang chia sẻ NSURL.

Dưới đây là những gì tôi làm, mà làm việc khá tốt: thực hiện UIActivityItemSource giao thức sau đây trong vòng UIActivityItemProvider tôi.

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

Nếu bạn vẫn gặp sự cố này, vui lòng dùng thử và cho tôi biết cách thức hoạt động của bạn.

Các vấn đề liên quan