Androidでのシェア

このガイドでは、Facebookへのシェア機能をAndroidアプリに実装する方法について詳しく説明します。アプリからシェアを行うと、そのコンテンツはFacebookのタイムラインに表示されるほか、友達のニュースフィードに表示される場合もあります。

アプリからFacebook Messengerにコンテンツをシェアすることもできます。

前提条件

アプリからFacebookをシェアする前に、Android用Facebook Sharing SDKをリンクまたはダウンロードします。

Android用Sharing SDKはAndroid用Facebook SDKの構成要素です。プロジェクトでFacebook Sharing SDKを使用するには、Mavenで依存関係にするか、ダウンロードします。次のボタンを使用して、使用するメソッドを選択します。

Mavenを使用してSDKをリンクする

  1. プロジェクトで、[your_app] | [Gradle Scripts] | [build.gradle] (Project)を開き、以下のレポジトリをbuildscript { repositories {}}セクションに追加して、Maven Central RepositoryからSDKをダウンロードします。
    mavenCentral() 
  2. プロジェクトで、[your_app] | [Gradle Scripts] | [build.gradle] (Module: app)を開き、以下のコンパイルステートメントをdependencies{}セクションに追加して、最新バージョンのSDKをコンパイルします。
    compile 'com.facebook.android:facebook-share:[4,5)'
  3. プロジェクトを構築します。

SDKをダウンロードする

SDKをダウンロードするには、次のボタンをクリックします。

SDKをダウンロード

Facebook Sharing SDKを使用する際は、イベントの自動記録を無効にしていない限り、アプリイベントが自動的にFacebook Analytics用に記録、収集されます。収集される情報やイベントの自動記録を無効にする方法については、「Automatic App Event Logging(アプリイベントの自動記録)」をご覧ください。

追加の必要条件

また、以下を行う必要があります。

これらの前提条件について詳しくは、「Android - Getting Started (Androidスタートガイド)」をご覧ください。

さらに、ContentProviderAndroidManifest.xmlに設定する必要があります。この場合、{APP_ID}は自分のアプリIDとなります。

<provider android:authorities="com.facebook.app.FacebookContentProvider{APP_ID}"
          android:name="com.facebook.FacebookContentProvider"
          android:exported="true"/>

シェア機能を実装する際、シェアするコンテンツが自動入力されないようにしてください。シェアコンテンツの自動入力はFacebookプラットフォームポリシーに違反します(「Facebook Platform Policy (Facebookプラットフォームポリシー)」の2.3をご覧ください)。

コンテンツのモデル化

Facebook SDKのバージョン4.0以降には、コンテンツのシェアのための新しいモデルが用意されています。シェアするコンテンツの各タイプはクラスで表すことができます。コンテンツをモデル化したら、アプリにシェアインターフェイスを追加します。

利用者がアプリからFacebookにリンクをシェアするとき、シェアするリンクにcontentURLが含まれます。リンクのシェアコンテンツをShareLinkContentモデルに構築します。すべての属性のリストを確認するには、「ShareLinkContent reference (ShareLinkContentリファレンス)」をご覧ください。

2017年4月18以降、次のパラメーターはGraph APIバージョン2.9以降でサポート対象外になりました。バージョン2.8以前については、これらのパラメーターは2017年7月17日まで利用できます。

  • contentTitle - リンク内のコンテンツのタイトル
  • imageURL - 投稿に表示されるサムネイル画像のURL
  • contentDescription - コンテンツの説明(一般的に2~4文)

シェアのトリガー方法の例を次に示します。

ShareLinkContent content = new ShareLinkContent.Builder()
        .setContentUrl(Uri.parse("https://developers.facebook.com"))
        .build();

Google PlayやApp Storeへのリンクのシェアをプレビューするには、シェアデバッガーにリンクのURLを入力します。

アプリのシェアに、Google PlayやApp Store上の他のアプリへのリンクが含まれる場合は、シェアに含まれる説明と画像は無視され、代わりにストアから直接そのアプリのタイトルと画像を取得します(画像がない場合はシェアに画像は表示されません)。

写真

利用者は、シェアダイアログやカスタムインターフェイスを使用すると、アプリからFacebookに写真をシェアできます。

  • 写真のサイズは12MB未満である必要があります。
  • また、利用者のデバイスにはネイティブのAndroid用Facebook (バージョン7.0以上)がインストールされている必要があります。

写真のシェアコンテンツをSharePhotoContentモデルに構築します。すべての属性のリストを確認するには、「SharePhotoContent reference (ShareLinkContentリファレンス)」をご覧ください。

Bitmap image = ...
SharePhoto photo = new SharePhoto.Builder()
        .setBitmap(image)
        .build();
SharePhotoContent content = new SharePhotoContent.Builder()
        .addPhoto(photo)
        .build();

動画

アプリの利用者は、シェアダイアログやカスタムインターフェイスを使用すると、Facebookに動画をシェアできます。

動画のサイズは12MB未満である必要があります。

動画のシェアコンテンツをShareVideoContentモデルに構築します。すべての属性のリストを確認するには、「ShareVideoContent reference (ShareLinkContentリファレンス)」をご覧ください。

Uri videoFileUri = ...
ShareVideo = new ShareVideo.Builder()
        .setLocalUrl(videoUrl)
        .build();
ShareVideoContent content = new ShareVideoContent.Builder()
        .setVideo(video)
        .build();

マルチメディア

シェアダイアログを使用すると、アプリの写真と動画を組み合わせてFacebookにシェアできます。注意:

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

マルチメディアシェアコンテンツは、ShareMediaContentモデルを使用して構築します。すべての属性のリストを確認するには、「ShareMediaContent reference (ShareLinkContentリファレンス)」をご覧ください。

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のシェアインターフェイスをトリガーするか、Graph APIを呼び出す独自のインターフェイスを構築します。

ボタン

FacebookはシェアをトリガーするためのAndroid用ネイティブボタンを提供しています。


Android用Facebook SDKのバージョン4.28.0では、Android用「いいね!」ボタンが廃止されました。サポートは2018年2月5日で終了します。

いいね!ボタン

「いいね!」ボタンを使うと、友達にコンテンツをすばやくシェアできます。「いいね!」ボタンをクリックすると、アプリ上のコンテンツが「いいね!」され、Facebook上でシェアされます。いいね!ボタンはFacebookページやOpen Graphオブジェクトを「いいね!」するときに使用でき、URLかIDによって参照できます。「いいね!」ボタンを追加するには、以下のコードスニペットをビューに加えてください。

LikeView likeView = (LikeView) findViewById(R.id.like_view);
likeView.setObjectIdAndType(
    "https://www.facebook.com/FacebookDevelopers",
    LikeView.ObjectType.PAGE);

シェアボタン

シェアボタンをクリックすると、シェアダイアログが呼び出されます。シェアボタンを追加するには、以下のコードスニペットをビューに加えてください。

ShareButton shareButton = (ShareButton)findViewById(R.id.fb_share_button);
shareButton.setShareContent(content);

Facebook SDKバージョン4.28.0では、[送信]ボタンが廃止されました。サポートは2018年2月5日で終了します。

送信ボタン

送信ボタンを使用すると、利用者はFacebook Messengerを使用して友達や連絡先に写真、動画、リンクを非公開で送信できます。送信ボタンをクリックすると、Message Dialogが呼び出されます。送信ボタンを追加するには、以下のコードをビューに加えてください。

SendButton sendButton = (SendButton)findViewById(R.id.fb_send_button);
sendButton.setShareContent(shareContent);
sendButton.registerCallback(callbackManager, new FacebookCallback<Sharer.Result>() { ... });

シェアダイアログ

シェアダイアログを使用すると、ネイティブの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);
}

Message Dialog

Message Dialogを使用すると、ネイティブのAndroid用Messengerに切り替わりますが、投稿が公開されるとアプリにコントロールが戻ります。使用しているSDKによって、アプリに戻るには戻る矢印をタップしなければならない場合があります。

MessageDialog.show(activityOrFragment, content);

追加の機能

Facebookシェアダイアログでは、APIでシェアする場合には使用できないその他のオプションを使用できます。

ハッシュタグ

シェアした写真、リンク、動画とともに表示するハッシュタグを1つ指定できます。このハッシュタグはシェアダイアログにも表示されますが、利用者は投稿前に削除することもできます。

以下は、ハッシュタグをリンクシェアに追加する例です。

ShareLinkContent content = new ShareLinkContent.Builder()
        .setContentUrl(Uri.parse("https://developers.facebook.com"))
        .setShareHashtag(new ShareHashtag.Builder()
                .setHashtag("#ConnectTheWorld")
                .build());
        .build();

引用のシェア

利用者は文字列をハイライトすることにより、シェアリンクとともに引用として表示させることができます。また、記事内のプルクオートなど、引用を事前に定義しておき、シェアリンクとともに表示させることもできます。いずれの場合でも、引用は利用者のコメントとは別の独自のフィールドに表示されます。

ShareLinkContent content = new ShareLinkContent.Builder()
        .setContentUrl(Uri.parse("https://developers.facebook.com"))
        .setQuote("Connect on a global scale.")
        .build();

詳細情報が記載されたトピック

組み込みシェアフォールバック

以前のバージョンのAndroid用SDKでは、アプリがシェアダイアログを開く前に、ネイティブのFacebookアプリがインストールされていることを確認する必要がありました。インストールされていない場合、代替ダイアログを呼び出す独自のコードを作成しなければなりませんでした。

現在のSDKでは、自動的にネイティブのFacebookアプリを確認します。インストールされていない場合はデフォルトのブラウザに切り替え、Feed Dialogが表示されるようになっています。Open Graph storyをシェアする場合はウェブシェアダイアログが表示されます。

App Linksを使用すると、アプリを通じて公開したFacebook投稿からアプリにリンクバックできます。アプリから公開されたFacebook投稿をクリックするとアプリが開きます。アプリ内の特定のコンテンツにリンクさせることも可能です。

カスタムインターフェイス

シェアに独自のインターフェイスを使用する場合は、以下を実行する必要があります。

  • Graph APIエンドポイント/me/feedに投稿するカスタムインターフェイスを構築します
  • アプリ内にFacebookログインを実装します
  • 利用者によるアプリへのログイン時にpublish_actionsアクセス許可をリクエストします

独自のインターフェイスからFacebookにリンクを投稿するためのコードは次のとおりです。

ShareApi.share(content, null);

Open Graph storyのシェア

Open Graph storyは、Open GraphアクションやOpen Graphオブジェクトによって厳密に事前定義されたAPIを通じて、機能豊富で構造化されたコンテンツをシェアできるようにします。これらの投稿は、アプリやアプリの「アプリストア」ページにリンクバックされています。

Open Graph storyの構成方法について詳しくは、「AndroidのOpen Graph story」をご覧ください。

Open GraphアクションのシェアコンテンツをShareOpenGraphContentモデルに構築します。すべての属性のリストを確認するには、「ShareOpenGraphContent reference (ShareLinkContentリファレンス)」をご覧ください。

ShareOpenGraphObject object = new ShareOpenGraphObject.Builder()
        .putString("og:type", "fitness.course")
        .putString("og:title", "Sample Course")
        .putString("og:description", "This is a sample course.")
        .putInt("fitness:duration:value", 100)
        .putString("fitness:duration:units", "s")
        .putInt("fitness:distance:value", 12)
        .putString("fitness:distance:units", "km")
        .putInt("fitness:speed:value", 5)
        .putString("fitness:speed:units", "m/s")
        .build();
ShareOpenGraphAction action = new ShareOpenGraphAction.Builder()
        .setActionType("fitness.runs")
        .putObject("fitness:course", object)
        .build();
ShareOpenGraphContent content = new ShareOpenGraphContent.Builder()
        .setPreviewPropertyName("fitness:course")
        .setAction(action)
        .build();