2013-11-26 3 views
17
에서 공중 투하 경고 설명을 사용자 정의

내가 보낼 수있는 다음과 같은 코드를 가지고 URLAirDrop을 통해 :은 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

이 가능합니다을 'X 님이 나와 ​​공유하고 싶습니다'라는 메시지가 표시되면 URL의 텍스트를 'X가 나와 목록을 공유하고 싶습니다.'와 같이 좀 더 사용자 친화적 인 것으로 변경하십시오. 미리 감사드립니다!

편집

나는 지금이 있지만, 여전히 위의 같은 결과 생산 : 당신은 UIActivityItemSource 프로토콜을 준수하는 클래스를 구현해야합니다

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

합니다. 여기에 아주 좋은 예가 있습니다 : 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]; 

편집 :

내가 두 전화를하지 않았다 처음에는 시도 했으므로 페이스 북과 트위터 만 테스트했는데 AirDrop에서는 NSURL의 relativeString을 항상 사용하고 있는지 확인할 수 있습니다. NSURL의 메서드를 재정의하더라도 AirDrop에서 작동하지 않습니다 (FB와 같은 다른 활동은 OK 임) 현재 SDK로 메시지를 변경할 수 없습니다.

+0

어디에서 찾았습니까? 왜냐하면 그들은 링크 된 샘플 코드에서 그렇게하지 않기 때문입니다. –

+0

방금 ​​게시 한 샘플 코드는 developer.apple.com에서 왔으며 정확하게 설명합니다. MyURLContainer는 NSObject의 하위 클래스 여야하며 샘플의 APLCustomURLContainer와 마찬가지로 UIActivityItemSource 프로토콜을 준수해야합니다. 또한 init 메소드의 activityItems 매개 변수를 설명하는 UIActivityViewController 설명서를 확인할 수도 있습니다. - https://developer.apple.com/library/IOS/documentation/UIKit/Reference/UIActivityViewController_Class/Reference/Reference.html#// apple_ref/occ/instm/UIActivityViewController/initWithActivityItems : applicationActivities :. –

+0

@IvanGenchev 편집보기 –

1

URL의 을 사용하고있는 것처럼 보입니다. NSURL을 서브 클래스 화하고 description 메서드를 오버라이드 (override) 해, @"a list"와 같은 것을 돌려 주려고했습니다. 나는 그것을 시도하지만 일할 수있는 것 같다 ...

편집을하지 않았다 나는 당신과 같은 것으로 보이는이 질문을 발견하고는 허용 대답이 있습니다 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).여기

내가 꽤 잘 작동하는 무슨이다 : 내 UIActivityItemProvider 내에서 다음 UIActivityItemSource 프로토콜을 구현한다. 여전히이 문제가 발생하는 경우

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

이 시도해 주시기 그것은 당신을 위해 작동하는 방법을 알려주세요.

관련 문제