2012-09-30 11 views
26

तो मैं आईओएस 6 में नया UIActivityViewController आज़मा रहा हूं, और उठना और दौड़ना वाकई आसान है, लेकिन मैं यह नहीं समझ सकता कि इसे कैसे नियंत्रित करना है। इसलिए मैं एक लेख को एक लिंक पोस्ट करना चाहता हूं और मैं लिंक के लिए एक छवि भी संलग्न करना चाहता हूं। मैं नहीं चाहता कि वह छवि कुछ फेसबुक एल्बम पर अपलोड की गई हो, जैसे यूआरएल थंबनेल।फेसबुक और ट्विटर पर पोस्ट करते समय यूआरएल लिंक दिखाने के लिए मैं UIActivityViewController को कैसे अनुकूलित करूं?

फेसबुक एसडीके में इसे पूरा करना आसान है क्योंकि वे इसके लिए पूर्ण नियंत्रण देते हैं, लेकिन UIActivityViewController के साथ ऐसा करने का कोई तरीका है? यहां मुझे यह मिला है:

NSArray *activityItems = @[[NSURL URLWithString:[article link]], [UIImage imageNamed:@"myStockImage"]]; 
    UIActivityViewController *viewCont = [[UIActivityViewController alloc] initWithActivityItems:activityItems applicationActivities:nil]; 
    [self presentViewController:viewCont animated:YES completion:nil]; 

और यह काम करता है, लेकिन यह छवि को 'आईओएस एल्बम' पर अपलोड करता है। अगर मैं सरणी में छवि नहीं जोड़ता, तो फेसबुक शीट दिखती है कि यह खाली है और अटैचमेंट एक ग्रेड आउट सफारी लोगो दिखाता है (जैसे थंबनेल गुम है!) सफारी में जब आप एक लिंक को फेसबुक पर आज़माते हैं, तो यह एक झलक के रूप में पृष्ठ की स्क्रीन हड़पने, मुझे लगता है कि

अद्यतन की तरह कुछ करना चाहता हूँ:

तो यहाँ यह कैसा मेरे ऐप से (UIActivityViewController या SLCompose तरह से उपयोग करते हुए) लग रहा है। देखें कि यह कैसे एक फोटो एलबम iOS Photos

Incorrect placement of photo

यहाँ करने के लिए चित्र अपलोड करने जा रहा है कि मैं क्या ऐसा लगता है कि (देखें सफारी भी) देखने के लिए चाहते हैं:

enter image description here

उत्तर

46

मैं इस बारे में खोज की है और मैं यह है कि UIActivityViewController का उपयोग कर आप क्या करने का इरादा करने के लिए बस कोई रास्ता नहीं निष्कर्ष पर आए हैं। हर बार जब आप एक फोटो साझा करने का प्रयास करते हैं तो यह आपको डिफ़ॉल्ट रूप से अपने एल्बमों में से एक "आईओएस" एल्बम में फोटो डाल देता है।

मेरे मामले में, मुझे तब तक एक फोटो पोस्ट करने की आवश्यकता नहीं थी जब तक कि मुझे साझा करने के लिए आवश्यक लिंक से एक छवि पुनर्प्राप्त नहीं की गई थी (जैसे कि जब आप अपनी फेसबुक टाइमलाइन पर एक लिंक पोस्ट करते हैं और यह स्वचालित रूप से उस से एक तस्वीर पकड़ लेता है लिंक, और तस्वीर लिंक बन जाता है)। ऐसा करने के लिए, मुझे पता चला कि अगर मैंने केवल एक यूआरएल पोस्ट किया है तो यह काम नहीं करता है। आपको कुछ प्रारंभिक पाठ और फिर यूआरएल पोस्ट करना होगा, और आप activityItems सरणी के भीतर ऑब्जेक्ट्स को ऑर्डर में डालकर ऐसा करते हैं।

यह मेरा काम कर कोड है:

NSArray * activityItems = @[[NSString stringWithFormat:@"Some initial text."], [NSURL URLWithString:@"http://www.google.com"]]; 
NSArray * applicationActivities = nil; 
NSArray * excludeActivities = @[UIActivityTypeAssignToContact, UIActivityTypeCopyToPasteboard, UIActivityTypePostToWeibo, UIActivityTypePrint, UIActivityTypeMessage]; 

UIActivityViewController * activityController = [[UIActivityViewController alloc] initWithActivityItems:activityItems applicationActivities:applicationActivities]; 
activityController.excludedActivityTypes = excludeActivities; 

[self presentViewController:activityController animated:YES completion:nil]; 

मैंने यह भी देखा है कि आप इन वस्तुओं के साथ एक तस्वीर पोस्ट करते हैं, यह लिंक से किसी भी चित्र प्राप्त नहीं होगा।

मुझे उम्मीद है कि इससे मदद मिलती है।

+0

घंटे बिताएं !!! इस खूनी चीज पर, यह पता लगाने की कोशिश कर रहा है कि यह मेरा यूआरएल सही तरीके से क्यों नहीं लेगा। धन्यवाद दोस्त ! – Alex

+0

google.com के साथ उपयोग करते समय काम करता है, लेकिन हमारे फेसबुक पेज पर एक लिंक का उपयोग करते समय, यह सिर्फ एक बदसूरत कंपास दिखाता है। लेकिन जब मैं फेसबुक पर लिंक साझा करता हूं, तो लिंक एक एकीकृत "फेसबुक पेज" -लिंक है जो बहुत अच्छा है। लेकिन यह बहुत ही कष्टप्रद है कि फोन पर थंबनेल फेसबुक के अपने पृष्ठों में उपयोग करते समय काम नहीं करेगा। grrr – bobmoff

+0

धन्यवाद। यह काम कर रहा है .... – Puvanarajan

1

आप डॉन हैं ' विशेष रूप से SLComposeViewController का उपयोग करके UIActivityViewController का उपयोग करने की आवश्यकता है इस उद्देश्य के लिए उपयोग करना आसान है।

+(void)presentShareWidgetWithText:(NSString*)text url:(NSURL*)url images:(NSArray*)images toService:(NSString*)service presentIn:(UIViewController*)parentViewController { 
    SLComposeViewController* controller = [SLComposeViewController composeViewControllerForServiceType:service]; 
    if (controller == nil) { 
     DLog(@"Could not initialize SLComposeViewController for %@!", service); 
     return; 
    } 
    if (url != nil) { 
     if (![controller addURL:url]) 
      DLog(@"Failed adding url %@!", url); 
    } 
    if (images != nil) { 
     for (UIImage* image in images) { 
      if (![controller addImage:image]) { 
       DLog(@"Failed adding image: %@", image); 
      } 
     } 
    } 
    if (![controller setInitialText:text]) { 
     DLog(@"Failed setting initial text: %@", text); 
    } 

    SLComposeViewControllerCompletionHandler handler = ^(SLComposeViewControllerResult result) { 
     switch (result) { 
      case SLComposeViewControllerResultCancelled: 
       DLog(@"SLComposeViewControllerResultCancelled"); 
       break; 

      case SLComposeViewControllerResultDone: 
       DLog(@"SLComposeViewControllerResultDone, Shared on service: %@", service); 
       break; 

      default: 
       DLog(@"Unhandled result: %d", result); 
       break; 
     } 

     dispatch_async(dispatch_get_main_queue(), ^{ 
      [parentViewController dismissViewControllerAnimated:YES completion:^{ 
       DLog(@"Dismissed a controller here!"); 
      }]; 
     }); 
    }; 

    [controller setCompletionHandler:handler]; 

    [parentViewController presentViewController:controller animated:YES completion:^{ 
     DLog(@"Presented %@!", controller); 
    }]; 
} 
+1

के लिए एक छवि/लिंक बॉक्स दिखाएगा कि या तो काम नहीं करता है।यह थंबनेल पूर्वावलोकन में छवि को जोड़ता है, लेकिन यदि आप इसे देखते हैं, तो यह वास्तव में छवि को 'आईओएस फोटो' नामक एल्बम में डालने जा रहा है। मैं चाहता हूं कि यह सिर्फ थंबनेल पूर्वावलोकन हो (जैसे सफारी इसे करता है)। मैं नहीं चाहता कि तस्वीर उपयोगकर्ता के फोटो एलबम में जाए –

+0

हम्म ठीक है, मैंने वास्तव में अभी तक केवल लिंक का उपयोग नहीं किया है, बिना किसी छवि के। केवल लिंक के साथ यह लिंक से ही एक छवि का चयन करता है। यह काम करता है जहां लिंक लक्ष्य एक आईओएस ऐप यूआरएल है, जो कि अब तक इस्तेमाल की जाने वाली एकमात्र चीज है। – Jonny

0
- (void)tweetURL:(NSString *)url title:(NSString *)title { 
    TWTweetComposeViewController *twitter = [[TWTweetComposeViewController alloc] init]; 
    NSString *format = @"“%@” %@ /via @DesignSceneApp"; 
    NSString *message = [NSString stringWithFormat:format, title, url] 
    NSUInteger idx = title.length; 
    while (![twitter setInitialText:message]) { 
     idx -= 5; 
     if (idx > 5) { 
      message = [NSString stringWithFormat:format, 
       [NSString stringWithFormat:@"%@…", [title substringToIndex:idx]], 
       url 
      ]; 
     } else { 
      // Give up on the title. 
      message = [NSString stringWithFormat:@"%@ /via @DesignSceneApp", url]; 
      [twitter setInitialText:message]; 
      break; 
     } 
    } 

    [self presentViewController:twitter animated:YES completion:nil]; 
} 
+0

कृपया भविष्य में अपना कोड स्वरूपण ध्यान दें :-) – kleopatra

1

स्विफ्ट 3.0 के लिए जवाब अपडेट किया गया

let url = URL(string: "google.com") 
let shareText = "Your string goes here" 
let shareItems: [Any] = [shareText, url!] 

let activityVC = UIActivityViewController(activityItems: shareItems, applicationActivities: nil) 
activityVC.excludedActivityTypes = [.airDrop, .postToFlickr, .assignToContact, .openInIBooks] 

self.present(activityVC, animated: true, completion: nil) 

फेसबुक स्ट्रिंग को स्वीकार नहीं करेगा, लेकिन, सामाजिक मीडिया साइटों के कई अन्य की तरह, यूआरएल

संबंधित मुद्दे