Teilen unter Android

In diesem Leitfaden wird beschrieben, wie du das Teilen von deiner Android-App auf Facebook aktivierst. Wenn Nutzer Inhalte aus deiner App teilen, werden diese Inhalte in ihrer Chronik und möglicherweise auch im News Feed ihrer Freunde angezeigt.

Personen können Inhalte aus deiner App auch im Facebook Messenger teilen.

Voraussetzungen

Bevor du über deine App Inhalte auf Facebook teilen kannst, musst du das Teilen-SDK für Android verknüpfen oder herunterladen.

Das Teilen-SDK für Android ist eine Komponente des Facebook-SDK für Android. Damit du das Teilen-SDK in deinem Projekt verwenden kannst, richte in Maven eine Abhängigkeit ein oder lade es herunter. Wähle über den Button die von dir bevorzugte Methode aus.

Verknüpfen des SDK mit Maven

  1. Öffne in deinem Projekt deine_App | Gradle Scripts | build.gradle (Project) und füge das folgende Repository zum buildscript { repositories {}}-Abschnitt hinzu, um das SDK vom Maven Central Repository herunterzuladen:
    mavenCentral() 
  2. Öffne in deinem Projekt deine_App | Gradle Scripts | build.gradle (Module: app) und füge das folgende Compile-Statement zum dependencies{}-Abschnitt hinzu, um die aktuelle Version des SDK zu kompilieren:
    compile 'com.facebook.android:facebook-share:[4,5)'
  3. Erstelle dein Projekt.

SDK herunterladen

Klicke auf den folgenden Button, um das SDK herunterzuladen.

SDK herunterladen

Wenn du das Teilen-SDK nutzt, werden Events in deiner App automatisch für Facebook Analytics protokolliert und erfasst, es sei denn, du deaktivierst die automatische App Event-Protokollierung. Detaillierte Informationen dazu, welche Daten erfasst werden und wie du die automatische App Event-Protokollierung deaktivierst, findest du im Abschnitt Automatische App Event-Protokollierung.

Weitere Voraussetzungen

Folgende Schritte sind ebenfalls erforderlich:

Ausführliche Informationen zu diesen Voraussetzungen findest du unter Erste Schritt mit Android.

Du musst auch einen ContentProvider in deiner AndroidManifest.xml einrichten, wobei {APP_ID} für deine App-ID steht:

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

Wenn du das Teilen implementierst, darf deine App zu teilende Inhalte nicht im Voraus ausfüllen. Dies würde der Facebook-Plattformrichtlinie 2.3 widersprechen.

Modellieren von Inhalten

Versionen ab 4.0 des Facebook-SDK verfügen über neue Modelle zum Teilen von Inhalten. Jede Art von Inhalt, den Nutzer teilen möchten, verfügt über eine Klasse, die du verwenden kannst, um diesen Inhalt darzustellen. Füge nach dem Modellieren des Inhalts ein Interface für das Teilen zu deiner App hinzu.

Wenn Personen Links aus deiner App auf Facebook teilen, wird eine contentURL in den entsprechenden Link aufgenommen. Erstelle den zu teilenden Inhalt für Links im ShareLinkContent-Modell. Eine Liste aller Attribute findest du in der ShareLinkContent-Referenz.

Seit dem 18. April 2017 werden die folgenden Parameter nicht mehr von Graph API-Version 2.9 oder höher unterstützt. Bei den Versionen 2.8 und niedriger funktionieren die Parameter weiterhin bis zum 17. Juli 2017.

  • contentTitle: gibt den Inhaltstitel im Link an
  • imageURL: die URL eines Miniaturbildes, das im Beitrag angezeigt wird
  • contentDescription: Beschreibung des Inhalts, für gewöhnlich zwei bis vier Sätze

Im Folgenden findest du ein Beispiel dazu, wie du den Teilvorgang auslösen kannst:

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

Um eine Vorschau des geteilten Links für Google Play oder den App Store anzuzeigen, gib deine URL in den Sharing Debugger ein.

Enthält deine geteilte App einen Link zu einer App in Google Play oder im App Store, werden die mitgeteilte Beschreibung und das mitgeteilte Bild ignoriert. Stattdessen wird im Store direkt nach dem Titel und dem Bild der App gesucht (ist kein Bild vorhanden, wird auch kein Bild geteilt).

Fotos

Personen können mithilfe des Dialogs „Teilen“ oder mit deinem eigenen Interface Fotos aus deiner App auf Facebook posten.

  • Fotos müssen weniger als 12 MB groß sein.
  • Nutzer müssen mindestens Version 7.0 der nativen Facebook-App für Android installiert haben.

Erstelle den zu teilenden Inhalt für Fotos im SharePhotoContent-Modell. Eine Liste aller Attribute findest du in der SharePhotoContent-Referenz.

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

Videos

Personen, die deine App verwenden, können mithilfe des Dialogs „Teilen“ oder deines eigenen Interface Videos auf Facebook teilen.

Videos müssen weniger als 12 MB groß sein.

Erstelle den zu teilenden Inhalt für Videos im ShareVideoContent-Modell. Eine Liste aller Attribute findest du in der ShareVideoContent-Referenz.

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

Multimedia

Personen können mit dem Dialog „Teilen“ eine Kombination aus Fotos und Video aus deiner App auf Facebook teilen. Beachte dabei Folgendes:

  • Nutzer müssen mindestens Version 71 der nativen Facebook-App für Android installiert haben.
  • Fotos müssen weniger als 12 MB groß sein.
  • Videos müssen weniger als 12 MB groß sein.
  • Nutzer können jeweils maximal 6 Fotos und Videos teilen.

Erstelle deine Multimedia-Inhalte zum Teilen mit dem ShareMediaContent-Modell. Eine Liste aller Attribute findest du in der ShareMediaContent-Referenz.

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);

Hinzufügen von Interfaces für das Teilen

Nachdem du den Aufbau eines Modells abgeschlossen hast, kannst du entweder ein Facebook-Interface zum Teilen auslösen oder dein eigenes Interface erstellen, das die Graph API aufruft.

Buttons

Facebook bietet unter Android native Buttons zum Auslösen des Teilens.


Mit dem Release von Version 4.28.0 des Facebook-SDK für Android ist der Button „Gefällt mir“ für Android veraltet. Er wird noch bis 5. Februar 2018 unterstützt.

Button „Gefällt mir“

Über den Button „Gefällt mir“ können Menschen schnell Inhalte mit ihren Freunden teilen. Durch Tippen auf den Button „Gefällt mir“ werden Inhalte aus deiner App mit „Gefällt mir“ markiert und auf Facebook geteilt. Der Button kann verwendet werden, um eine Facebook-Seite oder ein Open Graph-Objekt mit „Gefällt mir“ zu markieren. Auf den Button kann per URL oder ID verwiesen werden. Um einen Button „Gefällt mir“ hinzuzufügen, füge folgenden Codeausschnitt zu deiner Ansicht hinzu:

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

Button „Teilen“

Der Button „Teilen“ ruft einen „Teilen“-Dialog auf. Um einen Button „Teilen“ hinzuzufügen, füge folgenden Codeausschnitt zu deiner Ansicht hinzu:

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

Mit dem Release von Version 4.28.0 des Facebook-SDK ist der Button „Senden“ veraltet. Er wird noch bis 5. Februar 2018 unterstützt.

Button „Senden“

Der Button „Senden“ ermöglicht es Menschen, über den Facebook Messenger private Fotos, Videos und Links an ihre Freunde und Kontakte zu senden. Der Button „Senden“ ruft einen Dialog „Nachricht senden“ auf. Um einen „Senden“-Button zu deiner Ansicht hinzuzufügen, füge folgenden Codeausschnitt hinzu:

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

Dialog „Teilen“

Der Dialog „Teilen“ wechselt zur nativen Facebook-App für Android und übergibt die Steuerung nach dem Veröffentlichen des Beitrags zurück an deine App. Abhängig vom verwendeten SDK müssen Personen auf das Symbol für den Zurück-Pfeil tippen, um zu deiner App zurückzukehren. Wenn die Facebook-App nicht installiert ist, wird der „Teilen“-Dialog automatisch zum webbasierten Dialog umgeleitet.

ShareDialog.show(activityOrFragment, content);

Um beispielsweise den ShareDialog für einen Link in deiner Aktivität anzuzeigen, erstelle eine ShareDialog-Instanz in deiner onCreate-Methode:

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>() { ... });
    }

Zeige daraufhin den ShareDialog an:

if (ShareDialog.canShow(ShareLinkContent.class)) {
    ShareLinkContent linkContent = new ShareLinkContent.Builder()
            .setContentUrl(Uri.parse("http://developers.facebook.com/android"))
            .build();
    shareDialog.show(linkContent);
}

Rufe schlussendlich den callbackManager des SDK in deinem onActivityResult auf, um die Antwort zu verarbeiten:

@Override
protected void onActivityResult(final int requestCode, final int resultCode, final Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    callbackManager.onActivityResult(requestCode, resultCode, data);
}

Dialog „Nachricht senden“

Der Dialog „Nachricht senden“ wechselt zur nativen Messenger-App für Android und übergibt die Steuerung nach dem Veröffentlichen des Beitrags zurück an deine App. Abhängig vom verwendeten SDK müssen Personen auf das Symbol für den Zurück-Pfeil tippen, um zu deiner App zurückzukehren.

MessageDialog.show(activityOrFragment, content);

Zusätzliche Funktionen

Beim Verwenden des Facebook-Dialogs „Teilen“ stehen dir weitere Optionen zur Verfügung, die beim Teilen über die API nicht verfügbar sind.

Hashtags

Du kannst ein einzelnes Hashtag angeben, das mit einem geteilten Foto, Link oder Video angezeigt werden soll. Dieses Hashtag wird auch im Dialog „Teilen“ angezeigt, wo Personen es vor der Veröffentlichung entfernen können.

Im Folgenden findest du ein Beispiel für das Hinzufügen eines Hashtags zu einem geteilten Link.

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

Zitate teilen

Du kannst es Personen ermöglichen, Text zu markieren, der als Zitat in einem geteilten Link angezeigt wird. Alternativ dazu kannst du ein Zitat vordefinieren, wie z. B. ein hervorgehobenes Zitat in einem Artikel, das mit dem geteilten Link angezeigt werden soll. In jedem Fall erscheint das Zitat in einem eigenen von den Nutzerkommentaren getrennten Feld.

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

Weiterführende Themen

Integrierte Fallbacks zum Teilen

In Vorgängerversionen des SDK für Android musste deine App nach einer nativen, installierten Facebook-App suchen, bevor der Dialog „Teilen“ geöffnet werden konnte. Wenn die Person die App nicht installiert hatte, musstest du eigenen Code bereitstellen, um einen Fallback-Dialog aufzurufen.

Jetzt überprüft das SDK automatisch das Vorhandensein der nativen Facebook-App. Ist sie nicht installiert, öffnet das SDK den Standardbrowser mit dem Feed-Dialog. Wenn jemand eine Open Graph-Meldung teilen möchte, öffnet das SDK den Dialog „Teilen“ im Web.

Mit App-Links verlinkst du in von deiner App geposteten Beiträgen deine App. Wenn Personen auf einen von deiner App veröffentlichten Facebook-Beitrag klicken, wird deine App geöffnet. Du kannst hierbei sogar einen bestimmten Inhalt innerhalb deiner App verlinken.

Dein eigenes Interface

Wenn du dein eigenes Interface zum Teilen verwenden möchtest, musst du folgende Schritte ausführen:

Hier findest du den Code zum Posten eines Links auf Facebook über dein eigenes Interface:

ShareApi.share(content, null);

Teilen von Open Graph-Meldungen

Mit Open Graph-Meldungen können Nutzer über eine stark typisierte API detaillierte, strukturierte Inhalte teilen, die durch Open Graph-Handlungen und -Objekte definiert werden. In diesen Beiträgen wird deine App oder ihre App Store-Seite verlinkt.

Weitere Informationen zum Konfigurieren von Open Graph-Meldungen findest du unter Open Graph-Meldungen unter Android.

Erstelle den zu teilenden Inhalt für Open Graph-Handlungen im ShareOpenGraphContent-Modell. Eine Liste aller Attribute findest du in der ShareOpenGraphContent-Referenz.

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();