Facebookログイン、Facebookシェア、Facebook Gamingを統合すると、特定のアプリイベントは、アプリイベントの自動記録を無効にしない限り、イベントマネージャのために自動的に記録、収集されます。Facebookログイン、Facebookシェア、Facebook Gamingを使うすべてのアプリ開発者には、この機能の仕組みについて理解しておくことをおすすめします。収集される情報やアプリイベントの自動記録を無効にする方法については、アプリイベントの自動記録をご覧ください。
このガイドでは、Androidアプリのユーザーが、そのプリからFacebookにシェアできるようにする方法について詳しく説明します。ユーザーが該当アプリからシェアしたコンテンツは、そのユーザーのタイムライン上に表示されます。ユーザーが自分のタイムラインにシェアしたコンテンツを、そのユーザーの友達のフィードにも表示できます。アプリからFacebook Messengerにコンテンツをシェアすることもできます。
シェア機能を実装する際は、シェアするコンテンツがアプリで自動入力されないようにしてください。事前設定コンテンツは、開発者ポリシーと矛盾します。
以下に示すサンプルの写真には、左側にアプリのシェアダイアログ、右側にFacebookアプリで結果として表示される投稿が示されています。
Android用Sharing SDKはAndroid用Facebook SDKの構成要素です。
プロジェクトでFacebook Sharing SDKを使用するには、Mavenで依存関係にします。
プロジェクトで、[your_app] | [Gradle Scripts] | [build.gradle] (Project)を開き、以下のリポジトリをbuildscript { repositories {}}
セクションに追加します。
mavenCentral()
プロジェクトで、[your_app] | [Gradle Scripts] | [build.gradle] (Module: app)を開き、以下のコンパイルステートメントをdependencies{}
セクションに追加します。
compile 'com.facebook.android:facebook-share:latest.release'
プロジェクトをビルドします。
FacebookアプリIDを適切に設定し、Androidアプリにリンクします。
Android開発キーハッシュを生成し、それを、開発者の設定のサンプルアプリのページに追加します。詳しくは、開発キーハッシュを作成するとサンプルアプリの実行をご覧ください。
ContentProvider
をAndroidManifest.xml
ファイルに追加し、{APP_ID}
を該当するアプリIDに設定します。
<provider android:authorities="com.facebook.app.FacebookContentProvider{APP_ID}"
android:name="com.facebook.FacebookContentProvider"
android:exported="true"/>
Android 11以降を対象としているアプリの場合、アプリにFacebookアプリが表示されるようにするため、以下のクエリブロックをAndroidManifest.xml
ファイルに追加します。
<queries><provider android:authorities="com.facebook.katana.provider.PlatformProvider" /></queries>
Facebook Activity
をプロジェクトに追加し、それをAndroidManifest.xml
ファイルに含めます。
Facebook SDKのバージョン4.0以降には、コンテンツのシェアのための新しいモデルが用意されています。シェアするコンテンツの各タイプはクラスで表すことができます。コンテンツをモデル化したら、アプリにシェアインターフェイスを追加します。
利用者がアプリからFacebookにリンクをシェアするとき、シェアするリンクにcontentURL
が含まれています。リンクのシェアコンテンツをShareLinkContent
モデルにビルドします。属性の全リストについては、ShareLinkContent
のリファレンスをご覧ください。
シェアをトリガーする方法の例を次に示します。
ShareLinkContent content = new ShareLinkContent.Builder() .setContentUrl(Uri.parse("https://developers.facebook.com")) .build();
Google PlayまたはApp Storeへのリンクシェアをプレビューするには、シェアデバッガーにURLを入力します。
アプリのシェアに、Google PlayやApp Storeのアプリへのリンクが含まれる場合は、シェアに含まれる説明と画像は無視されます。代わりにストアから直接そのアプリのタイトルと画像を取得します(画像がない場合はシェアに画像は表示されません)。
利用者は、シェアダイアログを使用して、アプリからFacebookに写真をシェアできます。シェアするためには、利用者のデバイスにはネイティブのAndroid用Facebookアプリ(バージョン7.0以上)がインストールされている必要があります。
写真のシェアコンテンツをSharePhotoContent
モデルにビルドします。属性の全リストについては、SharePhotoContent
のリファレンスをご覧ください。
Bitmap image = ... SharePhoto photo = new SharePhoto.Builder() .setBitmap(image) .build(); SharePhotoContent content = new SharePhotoContent.Builder() .addPhoto(photo) .build();
アプリの利用者は、シェアダイアログを使用して、Facebookに動画をシェアできます。
動画のシェアコンテンツをShareVideoContent
モデルにビルドします。属性の全リストについては、ShareVideoContent
のリファレンスをご覧ください。
Uri videoFileUri = ... ShareVideo = new ShareVideo.Builder() .setLocalUrl(videoUrl) .build(); ShareVideoContent content = new ShareVideoContent.Builder() .setVideo(video) .build();
シェアダイアログを使用すると、アプリの写真と動画を組み合わせてFacebookにシェアできます。次の点に注意してください。
マルチメディアのシェアコンテンツは、ShareMediaContent
モデルを使用して作成します。属性の全リストについては、ShareMediaContent
のリファレンスをご覧ください。
SharePhoto sharePhoto1 = new SharePhoto.Builder() .setBitmap(...) .build(); SharePhoto sharePhoto2 = new SharePhoto.Builder() .setBitmap(...) .build(); ShareVideo shareVideo1 = new ShareVideo.Builder() .setLocalUrl(...) .build(); ShareVideo shareVideo2 = new ShareVideo.Builder() .setLocalUrl(...) .build(); ShareContent shareContent = new ShareMediaContent.Builder() .addMedium(sharePhoto1) .addMedium(sharePhoto2) .addMedium(shareVideo1) .addMedium(shareVideo2) .build(); ShareDialog shareDialog = new ShareDialog(...); shareDialog.show(shareContent, Mode.AUTOMATIC);
モデルの構築によるコンテンツの処理が終わったら、Facebookのシェアインターフェイスをトリガーします。
FacebookはシェアをトリガーするためのAndroid用ネイティブボタンを提供しています。
シェアボタンをクリックすると、シェアダイアログが呼び出されます。シェアボタンを追加するには、以下のコードスニペットをビューに追加します。
ShareButton shareButton = (ShareButton)findViewById(R.id.fb_share_button); shareButton.setShareContent(content);
シェアダイアログを使用すると、ネイティブのAndroid用Facebookアプリに切り替わりますが、投稿が公開されるとアプリにコントロールが戻ります。使用しているSDKによっては、アプリに戻る場合に、戻る矢印アイコンをタップしなければならない場合があります。Facebookアプリがインストールされていない場合、シェアダイアログは自動的にウェブベースのダイアログにフォールバックされます。
ShareDialog.show(activityOrFragment, content);
例えば、アクティビティでリンクのShareDialog
を表示するには、ShareDialog
インスタンスをonCreate
メソッドで作成します。
public class MainActivity extends FragmentActivity { CallbackManager callbackManager; ShareDialog shareDialog; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); callbackManager = CallbackManager.Factory.create(); shareDialog = new ShareDialog(this); // this part is optional shareDialog.registerCallback(callbackManager, new FacebookCallback<Sharer.Result>() { ... }); }
次に、シェアダイアログを表示します。
if (ShareDialog.canShow(ShareLinkContent.class)) { ShareLinkContent linkContent = new ShareLinkContent.Builder() .setContentUrl(Uri.parse("http://developers.facebook.com/android")) .build(); shareDialog.show(linkContent); }
最後に、SDKのcallbackManager
をonActivityResult
内で呼び出して、応答を処理します。
@Override protected void onActivityResult(final int requestCode, final int resultCode, final Intent data) { super.onActivityResult(requestCode, resultCode, data); callbackManager.onActivityResult(requestCode, resultCode, data); }
AndroidXのアクティビティまたはフラグメントを使用している場合、onActivityResult
をオーバーライドする必要はありません。
メッセージダイアログを使用すると、ネイティブのAndroid用Messengerに切り替わりますが、投稿が公開されるとアプリにコントロールが戻ります。使用しているSDKによっては、アプリに戻る場合に、戻る矢印アイコンをタップしなければならない場合があります。
MessageDialog.show(activityOrFragment, content);
シェアした写真、リンク、動画とともに表示するハッシュタグを1つ指定できます。このハッシュタグはシェアダイアログにも表示されますが、利用者は投稿前に削除することもできます。
ハッシュタグをリンクシェアに追加する例を次に示します。
ShareLinkContent content = new ShareLinkContent.Builder() .setContentUrl(Uri.parse("https://developers.facebook.com")) .setShareHashtag(new ShareHashtag.Builder() .setHashtag("#ConnectTheWorld") .build()); .build();
以前のバージョンのFacebook SDKでは、アプリがシェアダイアログを開く前に、ネイティブのFacebookアプリがインストールされていることを確認する必要がありました。インストールされていない場合、代替ダイアログを呼び出す独自のコードを作成しなければなりませんでした。
現在のSDKでは、自動的にネイティブのFacebookアプリを確認します。インストールされていない場合はデフォルトのブラウザーに切り替わり、フィードダイアログが表示されるようになっています。
App Linksを使用すると、アプリを通じて公開したFacebook投稿からアプリにリンクバックできます。アプリから公開されたFacebook投稿を利用者がクリックするとアプリが開きます。アプリ内の特定のコンテンツにリンクさせることも可能です。