簡體   English   中英

UIActivityViewController為WhatsApp或Facebook選擇了不同的文本

[英]UIActivityViewController chose different text for WhatsApp or Facebook

我在活動項目中有文本,但現在它在WhatsApp或Facebook上共享,此方法為每個應用共享相同的文本。 每個應用程序可以共享不同的文本嗎?

- (void)share {
    NSString *text = @"share test";

    NSArray * activityItems = @[[NSString stringWithFormat:@"%@", text], [NSURL URLWithString:@"http://www.test.co"]];
    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];

    [activityController setCompletionWithItemsHandler:^(NSString *activityType, BOOL completed, NSArray *returnedItems, NSError *activityError) {
        NSLog(@"The setCompletionWithItemsHandler completed = %i", completed);

        if (completed) {
            NSLog(@"The selected activity was %@", activityType);

            if ( [activityType isEqualToString:UIActivityTypeMail]) {
                NSLog(@"Mail sended");
            } else if ( [activityType isEqualToString:UIActivityTypePostToTwitter]) {
                NSLog(@"Post on twitter, ok!");
            } else if ( [activityType isEqualToString:UIActivityTypePostToFacebook]) {
                NSLog(@"Post on facebook, ok!");
            } else if ( [activityType isEqualToString:UIActivityTypeMessage]) {
                NSLog(@"SMS sended!");
            }
        }
    }];
}

簡短的回答:是的!

選擇它們之后,實際上有一種方法可以為多個應用返回不同的內容。

您將必須創建兩個UIActivityItemSource,一個將返回一個UIImage,另一個將返回一個NSObject。 這樣做是為了“欺騙”您將共享這些對象的系統,但是在用戶選擇一個應用程序之后,我們實際上可以返回其他內容,例如URL。

class SocialActivityItem: NSObject, UIActivityItemSource {
    var img: UIImage?
    var url: URL?

    convenience init(img: UIImage, url: URL) {
        self.init()
        self.img = img
        self.url = url
    }

    // This will be called BEFORE showing the user the apps to share (first step)
    func activityViewControllerPlaceholderItem(_ activityViewController: UIActivityViewController) -> Any {
        return img!
    }

    // This will be called AFTER the user has selected an app to share (second step)
    func activityViewController(_ activityViewController: UIActivityViewController, itemForActivityType activityType: UIActivityType?) -> Any? {
        //Instagram
        if activityType?.rawValue == "com.burbn.instagram.shareextension" {
            return img!
        } else {
            return url
        }
    }
}

class TextActivityItem: NSObject, UIActivityItemSource {
    var textToShare: String?

    convenience init(textToShare: String) {
        self.init()
        self.textToShare = textToShare
    }

    // This will be called BEFORE showing the user the apps to share (first step)
    func activityViewControllerPlaceholderItem(_ activityViewController: UIActivityViewController) -> Any {
        return NSObject()
    }

    // This will be called AFTER the user has selected an app to share (second step)
    func activityViewController(_ activityViewController: UIActivityViewController, itemForActivityType activityType: UIActivityType?) -> Any? {
      var text = ""
      if activityType?.rawValue == "net.whatsapp.WhatsApp.ShareExtension" {
          text = "Sharing on Whatsapp"
      }

      if activityType == UIActivityType.postToFacebook {
          text = "Sharing on Facebook"
      }
      return text.isEmpty ? textToShare : text
    }
}

然后,您只需要設置所有內容:

let url = URL(string: "www.google.com")!
let socialProvider = SocialActivityItem(img: img, url: url)
let textProvider = TextActivityItem(textToShare: "Sharing on social media!")
let activityViewController = UIActivityViewController(activityItems: [socialProvider, textProvider], applicationActivities: nil)

簡短答案:不可以。

但是您可以使用帶有URL方法的打開的應用程序,並將參數傳遞給該應用程序。 使用該方法時,必須使用自定義UI,並且不能使用UIActivityViewController。 (我所知道的)

因此,如果您想擁有多個按鈕,例如:“與WhatsApp共享”,“與Facebook共享”等,則是可能的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM