FBSDKShareLinkContent
とFBSDKShareDialog
を共有すると、iOS 8では正常に動作しますが、iOS 9デバイスでimageURL
、contentTitle
、contentDescription
を共有できません。
このアプリは、iOS 9 SDK、Xcode 7、Facebook SDK 4.7.0で構築されており、 iOS9用のアプリの準備 で説明されているすべてのアクションが完了しています。このアプリは現在App Storeでは利用できず、Facebookアプリは開発モードです。
ダイアログを表示するコードは非常に一般的です(Swift 2.0):
let content = FBSDKShareLinkContent()
content.contentURL = <URL to the app in the App Store>
content.imageURL = <valid image URL>
content.contentTitle = <some title>
content.contentDescription = <some descr>
let shareDialog = FBSDKShareDialog()
shareDialog.fromViewController = viewController
shareDialog.shareContent = content
shareDialog.delegate = self
if !shareDialog.canShow() {
print("cannot show native share dialog")
}
shareDialog.show()
IOS 9では、Facebook SDKは画像、タイトル、説明のないネイティブダイアログを表示します:
ダイアログが表示されたときに、FBアプリをiOS 9デバイスにインストールすると、エラーが発生しますが、Info.plistにそれぞれのURLを追加することで解決しても、問題は解決しません。もう表示されないのは単なるログステートメントです。
-canOpenURL: failed for URL: "fbapi20150629:/" - error: "This app is not allowed to query for scheme fbapi20150629"
ただし、iOS 8では、FBアプリがインストールされていない場合、FBアプリORがアプリ内Safari vcを開きます。
比較のために、iOS 8デバイスでも同じコードが機能します。
UPDATE:
@ rednuhtの答え は最初の問題を解決しますが、 @ sophie-faderが指摘したAppStore URL固有のケース
私は同じ問題を抱えていましたが、使用している回避策は、ネイティブアプリを使用するようにダイアログの共有モードを設定することです。
私はObj-Cを使用していますが、Swiftでもほとんど同じであるはずです:
FBSDKShareDialog *dialog = [[FBSDKShareDialog alloc] init];
dialog.fromViewController = viewController;
dialog.shareContent = content;
dialog.mode = FBSDKShareDialogModeNative; // if you don't set this before canShow call, canShow would always return YES
if (![dialog canShow]) {
// fallback presentation when there is no FB app
dialog.mode = FBSDKShareDialogModeFeedBrowser;
}
[dialog show];
IOS 9では、ユーザーはアプリ切り替えダイアログを取得しますが、正常に機能します。アプリ切り替えダイアログを持たないFBSDKShareDialogModeWeb
もありますが、画像も表示しません。
デフォルトはFBSDKShareDialogModeAutomatic
であり、FBSDKShareDialogModeShareSheet
を選択します。これが表示されています。
[〜#〜] update [〜#〜]:これは、利用可能なダイアログモードに対するiOS9の動作です。
FBSDKShareDialogModeAutomatic
:OPケースであるShareSheetを使用しますFBSDKShareDialogModeShareSheet
:同上FBSDKShareDialogModeNative
:ユーザーがFBアプリをインストールしている場合は動作し、それ以外の場合はサイレントに失敗します。アプリ切り替えダイアログを表示します。FBSDKShareDialogModeBrowser
:画像なしの共有FBSDKShareDialogModeWeb
:画像なしの共有FBSDKShareDialogModeFeedBrowser
:意図したとおりに動作しますFBSDKShareDialogModeFeedWeb
:意図したとおりに動作します「ブラウザ」はSafariをフルスクリーンで開き、「Web」はWebViewダイアログを開きます。
IOS9の最後の2つのオプションとiOS8の自動のどちらかを選択します。
この問題の解決策は、ネイティブアプリを使用するように共有ダイアログモードを設定することです。 iOS9では、Swift 2.0
最初の質問:Facebook Shareコンテンツは、iTunes以外のURLをコンテンツの説明と共有できます。 iTunesのURLが共有されている場合、説明は共有されません。
次に、同じ問題が発生していました。FB共有ボタンをクリックするとブラウザーにリダイレクトされ、使用している回避策は、ネイティブアプリを使用するように共有ダイアログモードを設定することです。
これは、共有しているURLがiTunes App StoreのURLである場合に一貫して発生します。 URLを他のWebサイトに変更すると、問題は解決しました。 https://developers.facebook.com/docs/sharing/ios "
注:アプリがiTunesまたはGoogle Playストアへのリンクを共有している場合、共有で指定した画像や説明を投稿しません。代わりに、Webcrawlerを使用してアプリストアから直接取得したアプリ情報を投稿します。これには画像が含まれない場合があります。 iTunesまたはGoogle Playへのリンク共有をプレビューするには、URLデバッガーにURLを入力してください。」
func shareFB(sender: AnyObject){
let content : FBSDKShareLinkContent = FBSDKShareLinkContent()
content.contentURL = NSURL(string: "//URL other then iTunes/AppStore")
content.contentTitle = “MyApp”
content.contentDescription = “//Desc“
content.imageURL = NSURL(string:“//Image URL”)
let dialog : FBSDKShareDialog = FBSDKShareDialog()
dialog.mode = FBSDKShareDialogMode.Native
// if you don't set this before canShow call, canShow would always return YES
if !dialog.canShow() {
// fallback presentation when there is no FB app
dialog.mode = FBSDKShareDialogModeFeedBrowser
}
dialog.show()
}
エラーメッセージ-canOpenURL: failed for URL: "fbapi20150629:/" - error: "This app is not allowed to query for scheme fbapi20150629"
を取り除くには、プロジェクトのinfo.plistの<key>LSApplicationQueriesSchemes</key>
配列に次の行を追加します。
<string>fbapi20150629</string>
あなたがウェブマスターであるウェブサイトを共有している場合、最も良いことは、contentURL
を共有することです。次に、こちらの情報に従って、Open GraphマークアップをHTMLファイルに追加します。 https://developers.facebook.com/docs/sharing/webmasters
FacebookはWebページから情報を取得し、そこからすべてのフィールドにデータを入力します。値が正しいことを確認するには、デバッガーを実行します。
https://developers.facebook.com/tools/debug/
そのページで、実際にスクレイプを再度強制することができます。これはキャッシュされます。
Facebookのタイトル、説明、画像を含むアプリ内の共有ダイアログ:
dialog.mode = FBSDKShareDialogMode.ShareSheet //未試行
or
//Working for me:
let linkcontent: FBSDKShareLinkContent = FBSDKShareLinkContent()
linkcontent.contentURL = videoURL
// linkcontent.contentDescription = videoDesc
// linkcontent.contentTitle = videoTitle
// linkcontent.imageURL = imageURL
FBSDKShareDialog.showFromViewController(self, withContent: linkcontent, delegate: self)
meta http-equiv = "content-type" content = "text/html; charset = utf-8"> title>マイシュレッドURLタイトルmeta content = '"+ imageUrl +"' property = 'og:image' />
以下のコードは、あらゆる種類の状況で私にとって魅力的なものでした:
@IBAction func facebookTap() {
let content = FBSDKShareLinkContent()
content.contentTitle = imageTitle
content.contentURL = URL(string: "http://technokriti.com/")
content.imageURL = URL(string: self.imageURL)
content.contentDescription = imageDescription
let dialog : FBSDKShareDialog = FBSDKShareDialog()
dialog.fromViewController = self
dialog.shareContent = content
dialog.mode = FBSDKShareDialogMode.feedWeb
dialog.show()
}
FBSDKShareLinkContent
contentURLを空白にすると、Facebookのタイトルが共有されます。
例えば:
content.contentURL = [[NSURL alloc] initWithString:@"http://"];
This works for me:-
FBSDKShareLinkContent *content = [[FBSDKShareLinkContent alloc] init];
content.contentURL = [NSURL URLWithString:APP_STORE_LINK];
content.imageURL=[NSURL URLWithString:IMAGE_LINK];
FBSDKShareDialog *dialog = [[FBSDKShareDialog alloc] init];
dialog.shareContent = content;
dialog.fromViewController = self;
dialog.mode = FBSDKShareDialogModeFeedBrowser;
[dialog show];