Androidでのシェア

Facebookログイン、Facebookシェア、Facebook Gamingを統合すると、特定のアプリイベントは、アプリイベントの自動記録を無効にしない限り、イベントマネージャのために自動的に記録、収集されます。Facebookログイン、Facebookシェア、Facebook Gamingを使うすべてのアプリ開発者には、この機能の仕組みについて理解しておくことをおすすめします。収集される情報やアプリイベントの自動記録を無効にする方法については、アプリイベントの自動記録をご覧ください。

このガイドでは、Androidアプリのユーザーが、そのプリからFacebookにシェアできるようにする方法について詳しく説明します。ユーザーが該当アプリからシェアしたコンテンツは、そのユーザーのタイムライン上に表示されます。ユーザーが自分のタイムラインにシェアしたコンテンツを、そのユーザーの友達のフィードにも表示できます。アプリからFacebook Messengerにコンテンツをシェアすることもできます。

シェア機能を実装する際は、シェアするコンテンツがアプリで自動入力されないようにしてください。事前設定コンテンツは、開発者ポリシーと矛盾します。

以下に示すサンプルの写真には、左側にアプリのシェアダイアログ、右側にFacebookアプリで結果として表示される投稿が示されています。

シェア機能の利用を始める

Android用Sharing SDKはAndroid用Facebook SDKの構成要素です。

プロジェクトでFacebook Sharing SDKを使用するには、Mavenで依存関係にします。

  1. プロジェクトで、[your_app] | [Gradle Scripts] | [build.gradle] (Project)を開き、以下のリポジトリをbuildscript { repositories {}}セクションに追加します。

    mavenCentral() 
    
  2. プロジェクトで、[your_app] | [Gradle Scripts] | [build.gradle] (Module: app)を開き、以下のコンパイルステートメントをdependencies{}セクションに追加します。

    compile 'com.facebook.android:facebook-share:latest.release'
    
  3. プロジェクトをビルドします。

  4. FacebookアプリIDを適切に設定し、Androidアプリにリンクします。

  5. Android開発キーハッシュを生成し、それを、開発者の設定サンプルアプリのページに追加します。詳しくは、開発キーハッシュを作成するサンプルアプリの実行をご覧ください。

  6. ContentProviderAndroidManifest.xmlファイルに追加し、{APP_ID}を該当するアプリIDに設定します。

    <provider android:authorities="com.facebook.app.FacebookContentProvider{APP_ID}"
    android:name="com.facebook.FacebookContentProvider"
    android:exported="true"/>
    
  7. Android 11以降を対象としているアプリの場合、アプリにFacebookアプリが表示されるようにするため、以下のクエリブロックをAndroidManifest.xmlファイルに追加します。

    <queries><provider android:authorities="com.facebook.katana.provider.PlatformProvider" /></queries>
  8. 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にシェアできます。次の点に注意してください。

  • 利用者のデバイスにネイティブのAndroid用Facebookアプリ(バージョン71以上)がインストールされている必要があります。
  • 利用者は一度に最大6つの写真と動画をシェアできます。

マルチメディアのシェアコンテンツは、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のcallbackManageronActivityResult内で呼び出して、応答を処理します。

@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投稿を利用者がクリックするとアプリが開きます。アプリ内の特定のコンテンツにリンクさせることも可能です。