Swift2.2でInstagram,Twitter,Facebookにシェアする方法
Swift2.2でInstagram,Twitter,Facebookにシェアする方法
UIActivityViewControllerのデフォルトではTwitterやFacebookへのシェアはうまくいくのに、Instagramのシェアがうまくいきませんでした。
調べてみるとInstagramは独自にアクティビティに追加してやらなければいけないようで、検索して出てきたコードを実際に試してみたのですが、InstagramへシェアすることはできてもTwitterやFacebookがアクティビティに表示されなくなってしまいました。
その解決策として、以下のコードにすることでTwitter,Facebook,Instagramへシェアする事ができました。
//シェアしたいImageView var imageViewForShare: UIImageView! //TwitterとFacebookはUIActivity let controller = UIActivityViewController(activityItems: [imageViewForShare.image!], applicationActivities: nil) //アクティビティに表示したくない機能やアプリを指定 let excludedActivityTypes = [ UIActivityTypePostToWeibo, UIActivityTypeMessage, UIActivityTypeMail, UIActivityTypePrint, UIActivityTypeCopyToPasteboard, UIActivityTypeAssignToContact, UIActivityTypeSaveToCameraRoll, UIActivityTypeAddToReadingList, UIActivityTypePostToFlickr, UIActivityTypePostToVimeo, UIActivityTypePostToTencentWeibo, UIActivityTypeAirDrop] controller.excludedActivityTypes = excludedActivityTypes self.presentViewController(controller, animated: true, completion: nil) let imageData = UIImageJPEGRepresentation(imageViewForShare.image!, 0.9) let fileURL = NSURL(fileURLWithPath: NSHomeDirectory()).URLByAppendingPathComponent("Documents/image.igo") imageData?.writeToURL(fileURL, atomically: true) documentInteractionController = UIDocumentInteractionController.init(URL: fileURL) // TwitterとFacebookと一緒にアクティビティに表示させたいのでUTIに"com.instagram.shareextension"を指定する documentInteractionController.UTI = "com.instagram.shareextension" if UIApplication.sharedApplication().canOpenURL(NSURL.init(string: "instagram://app")!) { documentInteractionController.presentOpenInMenuFromRect(self.view.frame, inView: self.view, animated: true) } else { print("Could not find Instagram app.") }
ポイント
UTIの指定
exclusivegramにすると共有先をInstagramのみに限定して表示することができる
"com.instagram.exclusivegram"
shareextensionにするとアクティビティにInstagramを追加表示することができる
"com.instagram.shareextension"
結果