Android用Facebook SDKスタートガイド

このドキュメントでは、Android用Facebook SDKを使用して、AndroidアプリとFacebookの統合を開始する方法について説明します。Android用Facebook SDKの最新バージョンは12.0.0で、Android API 15が必要です。バージョンや機能について詳しくは、Android用Facebook SDKをご覧ください。

Facebook SDKを使用すると、イベントの自動記録を無効にしていない限り、アプリのイベントは自動的に記録され収集されます。収集される情報やイベントの自動記録を無効にする方法については、アプリイベントの自動記録をご覧ください。

次の方法で、アプリでのAndroid用Facebook SDKの使用を設定できます。

  • クイックスタートを利用する
  • Android用Facebook SDKでプロジェクトを設定する

クイックスタート

FacebookアプリIDを入手するには、アプリを設定してAndroid用Facebook SDKをインポートし、次のボタンをクリックして指示に従います。

Android用クイックスタート

広告IDアクセス許可について理解する

バージョン13.0.0以降、Android用Facebook SDKを使って作成した各アプリに、広告IDアクセス許可が自動で追加されるようになりました。詳しくは、広告ID - Play Consoleヘルプをご覧ください。

場合によっては、アプリに広告IDアクセス許可を含めたくないことがあります。例えば、子供やファミリー向けのアプリである場合、広告IDアクセス許可を利用しないかもしれません。アプリから広告IDアクセス許可を除外するには、本ドキュメントの後半にある指示に従ってください。

Android Studioの設定

プロジェクトを作成する

Android StudioプロジェクトでFacebook SDKを使うには、SDKをビルド依存関係として追加し、インポートします。

  1. Android Studio | 新規プロジェクト | 最小SDKに移動します。

  2. API 15: Android 4.0.3 (IceCreamSandwich)以上を選択して、新規プロジェクトを作成します。

  3. Gradle Scripts | build.gradle (Project: <your_project>)ファイルを開いて以下を追加します。

    mavenCentral()
    
  4. build.gradle (Project: <your_project>)ファイルを保存して閉じます。

  5. Gradle Scripts | build.gradle (Module: app)ファイルを開いて、dependenciesセクションに以下を追加します。

    implementation 'com.facebook.android:facebook-android-sdk:latest.release'
    

  6. build.gradle (Module: app)ファイルを保存して閉じます。

  7. プロジェクトをビルドします。これで、アプリにcom.facebook.FacebookSdkをインポートできるようになりました。

マニフェストを更新する

プロジェクトの文字列ファイルにアプリIDクライアントトークンを追加し、マニフェストファイルを更新します。次のことを実行します。

  1. アプリプロジェクトで/app/res/values/strings.xmlファイルを開きます。

  2. facebook_app_idおよびfacebook_client_tokenという名前のstring要素を追加し、値としてアプリIDクライアントトークンを設定します。例えば、アプリIDが1234、クライアントトークンが56789の場合、コードは次のようになります。

    <string name="facebook_app_id">1234</string><string name="facebook_client_token">56789</string>
  3. アプリプロジェクトで/app/manifests/AndroidManifest.xmlファイルを開きます。

  4. application要素に、アプリIDとクライアントトークンのmeta-data要素を追加します。

    <application android:label="&#064;string/app_name" ...>
        ...
        <meta-data android:name="com.facebook.sdk.ApplicationId" android:value="@string/facebook_app_id"/><meta-data android:name="com.facebook.sdk.ClientToken" android:value="@string/facebook_client_token"/>
        ...
    </application>
  5. application要素の後のマニフェストに、次のようにuses-permission要素を追加します。

    <uses-permission android:name="android.permission.INTERNET"/>
  6. (任意)広告IDアクセス許可をオプトアウトするには、application要素の後のマニフェストに、次のようにuses-permission要素を追加します。

    <uses-permission android:name="com.google.android.gms.permission.AD_ID" tools:node="remove"/>
  7. プロジェクトをビルドします。

シェア可能にする

アプリからリンク、画像、動画をシェアするには、マニフェストでFacebookContentProvider権限を宣言します。次のことを実行します。

  1. アプリプロジェクトで/app/manifests/AndroidManifest.xmlファイルを開きます。

  2. FacebookContentProvider権限のマニフェストにprovider要素を追加します。アプリIDauthorities値の末尾に追加します。例えば、アプリIDが1234の場合、宣言は次のようになります。

    <provider android:authorities="com.facebook.app.FacebookContentProvider1234"
        android:name="com.facebook.FacebookContentProvider"
        android:exported="true" />
    
  3. プロジェクトをビルドします。

サンプルアプリを実行する

Android用Facebook SDKには、次のサンプルが含まれています。

  • HelloFacebookSample — プロフィールのアクセス、ステータスの更新、写真のアップロードの方法を示します。

Android StudioプロジェクトにFacebook SDKをインポートすれば、これらのサンプルを試せます。これらのサンプルは、Maven CentralやJCenterを介した中央リポジトリ依存関係ではなく、プロジェクト依存関係を持ちます。これは、SDKのローカルコピーが更新された際に、サンプルにその変更が反映されるようにするためです。

サンプルアプリを素早く実行するため、使用する開発環境用のキーハッシュを生成できます。生成したキーハッシュを、サンプルアプリのFacebook開発者プロフィールに追加します。キーハッシュを生成するためのkeytoolは、開発環境をセットアップする過程でインストールしたJava SE開発キット(JDK)に含まれています。OpenSSLはOpenSSLからダウンロードできます。

OS Xの場合、以下を実行します。

keytool -exportcert -alias androiddebugkey -keystore ~/.android/debug.keystore | openssl sha1 -binary | openssl base64

Windowsの場合は、以下が必要です。

Java SDKフォルダ内のコマンドプロンプトで次のコマンドを実行します。これにより、28文字の文字列が生成されます。

keytool -exportcert -alias androiddebugkey -keystore %HOMEPATH%\.android\debug.keystore | openssl sha1 -binary | openssl
base64

Facebook Developerサイトに移動します。Facebookにログインし、右上のドロップダウンメニューを使って開発者設定に移動します。

開発者設定でメニューからサンプルアプリを選び、プロフィールにキーハッシュを追加して保存します。

複数のマシンで開発を行っている場合は、複数のキーハッシュを追加できます。

これで、Facebookログインを使うサンプルも含め、すべてのサンプルをコンパイルして実行できるようになります。

開発キーハッシュを作成する

Facebookは、アプリとFacebookアプリとの間のやり取りを、キーハッシュを使って認証します。Facebookログインを使うアプリを実行する場合、Facebook開発者プロフィールにAndroid開発用キーハッシュを追加する必要があります。

開発者が自分に対してリリースしたアプリのバージョンについては、リリースキーハッシュも生成して設定する必要があります。

OS X、Windowsのいずれの環境でも、キーハッシュを生成して入手するか、Settings.getApplicationSignature(Context)から返された値を使って入手することができます。手順については、サンプルアプリを実行するをご覧ください。

リリースキーハッシュを作成する

アプリとFacebookとの間の情報のやり取りを認証するには、リリースキーハッシュを生成して、FacebookアプリID内のAndroid設定に追加する必要があります。これを行わないと、アプリをストアにリリースした際に、Facebook統合が正しく機能しない可能性があります。

前のステップで、開発環境用のキーハッシュを使ってFacebook開発者設定を更新しているはずです。

アプリの公開時はたいてい、開発環境とは別の署名が付けられます。そのため、必ずリリースキーハッシュを作成して、FacebookアプリIDのAndroid設定に追加してください。

リリースキーのハッシュを生成するには、MacまたはWindowsで、次のコマンドを(リリースキーのエイリアスとキーストアのパスを置き換えて)実行します。

Mac OSの場合は、以下を実行します。

keytool -exportcert -alias <RELEASE_KEY_ALIAS> -keystore <RELEASE_KEY_PATH> | openssl sha1 -binary | openssl base64

Windowsの場合は、以下が必要です。

Java SDKフォルダ内のコマンドプロンプトで次のコマンドを実行します。

keytool -exportcert -alias <RELEASE_KEY_ALIAS> -keystore <RELEASE_KEY_PATH> | PATH_TO_OPENSSL_LIBRARY\bin\openssl sha1 -binary | PATH_TO_OPENSSL_LIBRARY\bin\openssl base64

必ず、最初にリリースキーを作成したときに設定したパスワードを使用してください。

このコマンドにより、28文字の文字列が生成されます。このリリースキーハッシュをコピーし、FacebookアプリIDのAndroid設定に貼り付けます。

また、FacebookアプリIDのAndroid設定にも、Androidパッケージの正しいパッケージ名と、メインアクティビティクラスが含まれていることを確認します。

Android用Facebook SDKをMavenで使用する

Android用Facebook SDKの入手可能な最新バージョンでは、Mavenの依存関係を宣言できます。

<dependency>
  <groupId>com.facebook.android</groupId>
  <artifactId>facebook-android-sdk</artifactId>
  <version>PUT_LATEST_VERSION_HERE</version>
</dependency> 

サンプルアプリをトラブルシューティングする

サンプルアプリの実行時に問題が生じる場合、その問題はキーハッシュに関連している可能性があります。次のようなシナリオが考えられます。

  • ネイティブログインダイアログが表示されるが、アクセス許可を承諾した後もログアウト状態のままになる。logcatにも次の例外が表示されます。
12-20 10:23:24.507: W/fb4a:fb:OrcaServiceQueue(504):
com.facebook.orca.protocol.base.ApiException: remote_app_id does not match stored id
  • 「..アプリの設定に誤りがあるためFacebookにログインできません...」という旨のエラーメッセージが示された、ネイティブ以外のログインダイアログが表示される。

正しいキーハッシュを使用していることを確認してください。I

また、正しいキーハッシュを使用するように、サンプルコードを手動で修正することもできます。例えば、HelloFacebookSampleActivityクラスでonCreate()に次のような一時的な変更を加えます。

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    
    // Add code to print out the key hash
    try {
        PackageInfo info = getPackageManager().getPackageInfo(
                "com.facebook.samples.hellofacebook", 
                PackageManager.GET_SIGNATURES);
        for (Signature signature : info.signatures) {
            MessageDigest md = MessageDigest.getInstance("SHA");
            md.update(signature.toByteArray());
            Log.d("KeyHash:", Base64.encodeToString(md.digest(), Base64.DEFAULT));
            }
    } catch (NameNotFoundException e) {
        
    } catch (NoSuchAlgorithmException e) {
        
    }
    
    ...

変更を保存して、もう一度サンプルを実行します。logcat出力で、次のようなメッセージがないかを確認します。

12-20 10:47:37.747: D/KeyHash:(936): 478uEnKQV+fMQT8Dy4AKvHkYibo=

キーハッシュを自分の開発者プロフィールに保存します。サンプルをもう一度実行し、正常にログインできることを確認します。