2016-08-04 16 views
5

Jest całkiem jasne, jak udostępnić link z the iOS sharing activity ... Ale chciałbym dostosować śledzenie w adresie URL dla różnych rodzajów udziałów, zawsze używając tego samego standardu ... Przykłady po ...Dostosuj adres URL do udostępniania iOS

Twitter:

http://www.example.com?utm_source=TWITTER&utm_medium=social&utm_campaign=socialbuttons&utm_content=app_android

Facebook:

http://www.example.com?utm_source=FACEBOOK&utm_medium=social&utm_campaign=socialbuttons&utm_content=app_android

Itd ...

Czy to możliwe? Jak mogę to zrobić?

+0

trzeba dzielić na różne 'url' ** Twitterze ** i ** facebook ** za pomocą 'UIActivityController'.? – Gokul

+0

Tak, dokładnie. :-) – Napolux

+1

Powiel: [Ustaw różne elementy aktywności dla Swift UIActivityViewController] (http://stackoverflow.com/q/30063708/2415822) – JAL

Odpowiedz

4

I rozwiązać w Objective-C, dodając niestandardowe UIActivityItemProvider:

#import "CustomUiActivityItemProvider.h" 

@implementation CustomUiActivityItemProvider 

- (id)initWithText:(NSString *)text{ 

    if ((self = [super initWithPlaceholderItem:text])) { 
     self.text = text ?: @""; 
     self.url = @""; 
    } 
    return self; 
} 

- (id)item { 
    NSString *activityType = self.activityType; 

    if ([self.placeholderItem isKindOfClass:[NSString class]]) { 

     if ([self.activityType isEqualToString:UIActivityTypePostToFacebook]) { 
      self.url = [[NSString alloc] initWithFormat:@"%@&utm_source=facebook", self.text]; 
     } else if ([activityType isEqualToString:UIActivityTypePostToTwitter]) { 
      self.url = [[NSString alloc] initWithFormat:@"%@&utm_source=twitter", self.text]; 
     } else if ([activityType isEqualToString:UIActivityTypeMessage]) { 
      self.url = [[NSString alloc] initWithFormat:@"%@&utm_source=message", self.text]; 
     } else if([activityType isEqualToString:UIActivityTypeMail]){ 
      self.url = [[NSString alloc] initWithFormat:@"%@&utm_source=email", self.text]; 
     } else if ([activityType isEqualToString:UIActivityTypePostToWeibo]){ 
      self.url = [[NSString alloc] initWithFormat:@"%@&utm_source=weibo", self.text]; 
     }else{ 
      self.url = [[NSString alloc] initWithFormat:@"%@&utm_source=other", self.text]; 
     } 

     return self.url; 
    } 

    return self.placeholderItem; 
} 

@end 

i używając go tak:

CustomUiActivityItemProvider *customProvider = [[CustomUiActivityItemProvider alloc] initWithText:urlString]; 


UIActivityViewController *activityVC = [[UIActivityViewController alloc] initWithActivityItems:@[customProvider] 
                     applicationActivities:nil]; 
activityVC.excludedActivityTypes = @[UIActivityTypePrint, UIActivityTypeCopyToPasteboard, UIActivityTypeAssignToContact, UIActivityTypeSaveToCameraRoll]; 
activityVC.completionHandler = ^(NSString *activityType, BOOL completed) { 
// CODE.... 
} 
    [self presentViewController:activityVC animated:YES completion:nil]; 
+1

Fajny, dzięki kolego, Thumbs Up. –

2
  • Aby to zrobić, zrobimy używać UIActivityItemSource które działają jako dostawcę danych dla naszych UIActivityViewController stanów dokumentacji .Powierzchnia jak następuje.

Podczas implementacji tego protokołu obiekt staje się dostawcą danych, zapewniając kontrolerowi widoku dostęp do pozycji.

  • Aby dowiedzieć się więcej o skierowaniu documentation.
  • Utwórz klasę NSObject w następujący sposób i dodać go po swojej klasie

    class shareDifferentUrl: NSObject, UIActivityItemSource { 
    @objc func activityViewControllerPlaceholderItem(activityViewController: UIActivityViewController) -> AnyObject { 
        return "" 
    } 
    
    @objc func activityViewController(activityViewController: UIActivityViewController, itemForActivityType activityType: String) -> AnyObject? { 
        if activityType == UIActivityTypePostToTwitter { 
         return NSURL(string:"https://twitter.com/") 
        } else if activityType == UIActivityTypePostToFacebook { 
         return NSURL(string:"https://www.facebook.com/") 
        } 
        return nil 
    } 
    } 
    
  • to teraz wystarczy dodać powyżej klasy jako activityItems swojej UIActivityViewController

    @IBAction func share(sender: AnyObject) { 
        let activityVC = UIActivityViewController(activityItems: [shareDifferentUrl()] as [AnyObject], applicationActivities: nil) 
        self.navigationController?.presentViewController(activityVC, animated: true, completion: nil) 
    } 
    
  • teraz możemy stanie UIViewController udostępnij różne url dla twitter i fb