Share URL to Messages with Rich Preview in Swift - swift

When I share a webpage (example: apple.com) from Safari to the Messages app, it shares a rich preview in a custom UI element with an image and the page's title and URL.
However, when I try to share a URL to Messages from my own code (even if it's one that works from Safari like apple.com), it just shares the URL as plain text. How can I get the same behavior as Safari when link sharing to Messages?
Here is my code that creates and presents the UIActivityViewController that shares the URL:
extension UIViewController {
func shareUrl(url: URL) {
let objectsToShare: Array<NSObject> = [url as NSObject]
let activityVC = UIActivityViewController(activityItems: objectsToShare,
applicationActivities: nil)
present(activityVC, animated: true)
}
}

let items = [URL(string: "https://www.apple.com")!]
let ac = UIActivityViewController(activityItems: items, applicationActivities: nil)
present(ac, animated: true)
More detail please see at here

Related

UIActivityViewController Facebook sharing URL + IMAGE and URL + TEXT not working

Please don't mark duplicate already seen iOS11: UIActivityViewController not successfully sharing UIImage to 3rd party apps
So I am trying to share Image + URL with UIActivityViewController .
However when tap on facebook it only show URL, Image is not showingup
Here is my code
#IBAction func btnShareTapped(_ sender: UIButton) {
if let image = self.imgBackground.image, let jpgImage = UIImageJPEGRepresentation(image, 0.8) {
let shareItems:Array = [jpgImage,URL(string: "https://www.facebook.com")] as [Any]
let activityViewController:UIActivityViewController = UIActivityViewController(activityItems: shareItems, applicationActivities: nil)
activityViewController.excludedActivityTypes = [UIActivityType.print, UIActivityType.postToWeibo, UIActivityType.copyToPasteboard, UIActivityType.addToReadingList, UIActivityType.postToVimeo]
self.present(activityViewController, animated: true, completion: nil)
DispatchQueue.main.async {
self.present(activityViewController, animated: true, completion: nil);
}
}
}
If I remove URL then I can able to share image,
Only URL Visible for sharing
Is there any workaround to share Image with URL or any text ?
it's impossible to share images and URL at the same time currently

How to Share Text from an RTF File Swift 3

I'm not even sure if this is possible, but here it goes anyway:
I have RTF files within my app, which are used to populate text views. I want my users to be able to share the text within those files, not the files themselves.
This is the code I'm currently using to share the files:
#IBAction func shareRecipeTxtBtn(_ sender: Any) {
let grabIngredientTxt = Bundle.main.url(forResource: "bananaPancakes_ing", withExtension: "rtf")
let grabDirectionTxt = Bundle.main.url(forResource: "bananaPancakes_dir", withExtension: "rtf")
let txtToShare = [grabIngredientTxt, grabDirectionTxt]
let activityViewController = UIActivityViewController(activityItems: txtToShare, applicationActivities: nil)
activityViewController.popoverPresentationController?.sourceView = self.view
activityViewController.excludedActivityTypes = [UIActivityType.postToFacebook, UIActivityType.postToTwitter]
self.present(activityViewController, animated: true, completion: nil)
}
The attached screenshot is the result of the code above, but it's not ideal.
What users currently see when they attempt to share a file.
why don't you grab the text being displayed from the text views
let txtToShare = [textView1.text, textView2.text]
or
let txtToShare = ["\(textView1.text)\n\(textView2.text)]

sharing Image from App to other app in ios

How to share an image from my app to other app?
I have a button in my UIViewController and when it is clicked it should show other app available for sharing
how can I show a pop up showing all the apps available?
how can I share it with flicker app?
Try this code
let activityItem: [AnyObject] = [self.imageView.image as! AnyObject]
let avc = UIActivityViewController(activityItems: activityItem as [AnyObject], applicationActivities: nil)
self.presentViewController(avc, animated: true, completion: nil)

How to add an activity "send to messenger" in a picker activity?

I would like to add an activity "send to messenger" in my activity controller in order to share a text in messenger.
For now, this is my code, it's just a button "send", it works, but i want it like an activity :
func pickerView(sender : UIButton) {
let message="text"
let objectsToShare = [message]
let wsActivity = WhatsAppActivity()
let content: FBSDKShareLinkContent = FBSDKShareLinkContent()
content.contentURL = NSURL(string: "https://www.facebook.com/FacebookDevelopers")
let button=FBSDKSendButton()
let activityVC = UIActivityViewController(activityItems: objectsToShare, applicationActivities: [wsActivity])
button.frame.origin.y=activityVC.view.center.y
button.frame.origin.x=activityVC.view.center.x
button.shareContent=content
activityVC.view.addSubview(button)
self.presentViewController(activityVC, animated: true, completion: nil)
}
"Messenger" icon will already be there in the activities list when you have it installed in your iPhone. Just tap it and your text will be available there. No need to create your own activity for it.

How can I present Facebook messenger app in activity controller view to send a message?

func pickerView(sender : UIButton) {
let message="text"
let objectsToShare = [message]
let wsActivity = WhatsAppActivity()
let activityVC = UIActivityViewController(activityItems: objectsToShare, applicationActivities: [wsActivity])
activityVC.excludedActivityTypes = [UIActivityTypeAirDrop, UIActivityTypeAddToReadingList,UIActivityTypeCopyToPasteboard,UIActivityTypeSaveToCameraRoll,UIActivityTypePrint]
self.presentViewController(activityVC, animated: true, completion: nil)
}
How can i do the same thing with Facebook messenger ?
As far as my research went, you cannot share "string" in FB messenger. This has something to do with FB messenger policy (lost link ref for this). In order to share on Facebook messenger, your "activityItems: objectsToShare" should contain an NSURL. I have tried sharing multiple NSRULs and it did not work out.
You can pass an array of [String, NSURL] for example:
func pickerView(sender : UIButton) {
let message="text"
let url = NSURL(String: "https://www.google.com")!
let objectsToShare = [message, url] //this is now an [AnyObject]
//assuming you are don't have applications to exclude
let activityVC = UIActivityViewController(activityItems: objectsToShare, applicationActivities: [wsActivity])
self.presentViewController(activityVC, animated: true, completion: nil)
}
You will find both whatsapp and FB messenger showing up in your share sheet. However, FB messenger will only use the NSURL its, and ignore the String item in the AnyObject Array. WhatsApp will show the text followed by the link.
You might be able to do what you want to do using the FB SDK. I have not tried it personally though.
If you want to present facebook app in UIActivityViewController
than not specify any excludedActivityTypes property .
Because excludedActivityTypes: [String]? //default is nil.`
so just use as
let activityVC = UIActivityViewController(activityItems: objectsToShare, applicationActivities: [wsActivity])
self.presentViewController(activityVC, animated: true, completion: nil)
it will show you all option including facebook , twitter ext.