Laden Sie Benutzer zu Ihrer App ein

Eine der effektivsten Möglichkeiten, neue Benutzer zur Installation Ihrer App zu bewegen, besteht darin, Ihren Benutzern zu ermöglichen, Inhalte aus Ihrer App mit ihren Freunden zu teilen. Mit dynamischen Links können Sie ein großartiges Benutzer-zu-Benutzer-Sharing-Erlebnis schaffen: Benutzer, die Inhaltsempfehlungen von ihren Freunden erhalten, können auf einen Link klicken und direkt zu den geteilten Inhalten in Ihrer App weitergeleitet werden, selbst wenn sie zur App gehen müssen Store oder Google Play Store, um Ihre App zuerst zu installieren.

Durch die Kombination der Klebrigkeit von Benutzerempfehlungen und der Persistenz dynamischer Links können Sie Benutzer-zu-Benutzer-Freigabe- und Empfehlungsfunktionen erstellen, die neue Benutzer gewinnen, indem sie sie direkt auf den Inhalt Ihrer App lenken oder Werbeaktionen anbieten, von denen der Referrer und die Referrer gegenseitig profitieren .

Hauptvorteile

  • Neue Benutzer, die Ihre App zum ersten Mal öffnen, erhalten ein angepasstes First-Run-Erlebnis, das kontextualisiert ist, basierend auf dem, was ihr Freund mit ihnen teilen wollte. Sie können beispielsweise die Inhalte anzeigen, die mit ihnen geteilt wurden, oder sie automatisch mit dem Freund verbinden, der sie eingeladen hat.
  • Erleichtert es Benutzern, Inhalte plattformübergreifend mit ihren Freunden zu teilen, unabhängig davon, ob ihre Freunde Ihre App installiert haben oder nicht.

So fangen Sie an!

Richten Sie ein neues Firebase-Projekt ein und installieren Sie das Dynamic Links SDK in Ihrer App.

Durch die Installation des Dynamic Links SDK kann Firebase Daten über den Dynamic Link an die App weitergeben, auch nachdem der Benutzer die App installiert hat.

Jetzt ist es an der Zeit, die Links einzurichten, die Benutzer an ihre Freunde senden können. Machen Sie sich keine Sorgen, wenn die Freunde Ihrer Benutzer die App noch nicht installiert haben; Dynamic Links kann das für Sie erledigen.

Erstellen Sie für jedes Inhaltselement, das Sie teilen möchten, einen dynamischen Link .

Wenn Sie den dynamischen Link erstellen, müssen Sie eine HTTP- oder HTTPS-URL als link angeben, die verwendet wird, um die von Ihnen freigegebenen Inhalte zu identifizieren. Wenn Sie eine Website mit gleichwertigem Inhalt haben, sollten Sie die URLs Ihrer Website verwenden. Dadurch wird sichergestellt, dass diese Links auf einer Plattform, die dynamische Links nicht unterstützt, wie z. B. einem Desktop-Browser, korrekt dargestellt werden. Zum Beispiel:

https://example.page.link/?link=https://www.example.com/content?item%3D1234&apn=com.example.android&ibi=com.example.ios&isi=12345

Sie können der Datennutzlast auch zusätzliche Informationen hinzufügen, indem Sie URL-codierte Parameter hinzufügen, um beispielsweise anzugeben, dass der Link für einen bestimmten Benutzer bestimmt ist, z. B. in einer Spieleinladung.

https://example.page.link/?link=https://www.example.com/invitation?gameid%3D1234%26referrer%3D555&apn=com.example.android&ibi=com.example.ios&isi=12345

Bevor Sie diese Links freigeben, sollten Sie die URL-Shortener-API für dynamische Links von Firebase verwenden, um benutzerfreundlichere URLs zu generieren. Ein kurzer dynamischer Link sieht wie folgt aus:

https://example.page.link/WXYZ

Unabhängig davon, welchen Link Sie verwenden, wenn Benutzer den dynamischen Link auf ihrem Gerät öffnen, führt die durch den apn -Parameter (auf Android) oder die ibi und isi Parameter (auf iOS) angegebene App Benutzer zum Play Store oder App Store, um die App zu installieren falls es noch nicht installiert ist. Wenn die App dann installiert und geöffnet wird, wird die im Parameter „link“ angegebene URL an die App übergeben.

Schauen Sie sich zunächst dieses einfache Beispiel einer raumbasierten Chat-App wie Hangouts an, die Links generiert, um Personen zu Chatrooms einzuladen.

iOS

chat app screenshotchat app screenshot with share sheet

Android

chat app screenshotchat app screenshot with share sheet

Schnell

Hinweis: Dieses Firebase-Produkt ist auf macOS-, Mac Catalyst-, tvOS- oder watchOS-Zielen nicht verfügbar.
func generateContentLink() -> URL {
  let baseURL = URL(string: "https://your-custom-name.page.link")!
  let domain = "https://your-app.page.link"
  let linkBuilder = DynamicLinkComponents(link: baseURL, domainURIPrefix: domain)
  linkBuilder?.iOSParameters = DynamicLinkIOSParameters(bundleID: "com.your.bundleID")
  linkBuilder?.androidParameters =
      DynamicLinkAndroidParameters(packageName: "com.your.packageName")


  // Fall back to the base url if we can't generate a dynamic link.
  return linkBuilder?.link ?? baseURL
}

Ziel c

Hinweis: Dieses Firebase-Produkt ist auf macOS-, Mac Catalyst-, tvOS- oder watchOS-Zielen nicht verfügbar.
- (NSURL *)generateContentLink {
  NSURL *baseURL = [NSURL URLWithString:@"https://your-custom-name.page.link"];
  NSString *domain = @"https://your-app.page.link";
  FIRDynamicLinkComponents *builder = [[FIRDynamicLinkComponents alloc] initWithLink:baseURL domainURIPrefix:domain];
  builder.iOSParameters = [FIRDynamicLinkIOSParameters parametersWithBundleID:@"com.your.bundleID"];
  builder.androidParameters = [FIRDynamicLinkAndroidParameters parametersWithPackageName:@"com.your.packageName"];

  // Fall back to the base url if we can't generate a dynamic link.
  return builder.link ?: baseURL;
}

Java

public static Uri generateContentLink() {
    Uri baseUrl = Uri.parse("https://your-custom-name.page.link");
    String domain = "https://your-app.page.link";

    DynamicLink link = FirebaseDynamicLinks.getInstance()
            .createDynamicLink()
            .setLink(baseUrl)
            .setDomainUriPrefix(domain)
            .setIosParameters(new DynamicLink.IosParameters.Builder("com.your.bundleid").build())
            .setAndroidParameters(new DynamicLink.AndroidParameters.Builder("com.your.packageName").build())
            .buildDynamicLink();

    return link.getUri();
}

Kotlin+KTX

fun generateContentLink(): Uri {
    val baseUrl = Uri.parse("https://your-custom-name.page.link")
    val domain = "https://your-app.page.link"

    val link = FirebaseDynamicLinks.getInstance()
            .createDynamicLink()
            .setLink(baseUrl)
            .setDomainUriPrefix(domain)
            .setIosParameters(DynamicLink.IosParameters.Builder("com.your.bundleid").build())
            .setAndroidParameters(DynamicLink.AndroidParameters.Builder("com.your.packageName").build())
            .buildDynamicLink()

    return link.uri
}

Sobald Sie einen dynamischen Link haben, können Sie Ihrer Benutzeroberfläche eine Teilen-Schaltfläche hinzufügen, die den standardmäßigen Plattform-Freigabeablauf startet:

Schnell

Hinweis: Dieses Firebase-Produkt ist auf macOS-, Mac Catalyst-, tvOS- oder watchOS-Zielen nicht verfügbar.
lazy private var shareController: UIActivityViewController = {
  let activities: [Any] = [
    "Learn how to share content via Firebase",
    URL(string: "https://firebase.google.com")!
  ]
  let controller = UIActivityViewController(activityItems: activities,
                                            applicationActivities: nil)
  return controller
}()

@IBAction func shareButtonPressed(_ sender: Any) {
  let inviteController = UIStoryboard(name: "Main", bundle: nil)
    .instantiateViewController(withIdentifier: "InviteViewController")
  self.navigationController?.pushViewController(inviteController, animated: true)
}

Ziel c

Hinweis: Dieses Firebase-Produkt ist auf macOS-, Mac Catalyst-, tvOS- oder watchOS-Zielen nicht verfügbar.
- (UIActivityViewController *)shareController {
  if (_shareController == nil) {
    NSArray *activities = @[
      @"Learn how to share content via Firebase",
      [NSURL URLWithString:@"https://firebase.google.com"]
    ];
    UIActivityViewController *controller = [[UIActivityViewController alloc] initWithActivityItems:activities applicationActivities:nil];
    _shareController = controller;
  }
  return _shareController;
}

- (IBAction)shareLinkButtonPressed:(UIView *)sender {
  if (![sender isKindOfClass:[UIView class]]) {
    return;
  }

  self.shareController.popoverPresentationController.sourceView = sender;
  [self presentViewController:self.shareController animated:YES completion:nil];
}

Java

private void onShareClicked() {
    Uri link = DynamicLinksUtil.generateContentLink();

    Intent intent = new Intent(Intent.ACTION_SEND);
    intent.setType("text/plain");
    intent.putExtra(Intent.EXTRA_TEXT, link.toString());

    startActivity(Intent.createChooser(intent, "Share Link"));
}

Kotlin+KTX

private fun onShareClicked() {
    val link = DynamicLinksUtil.generateContentLink()

    val intent = Intent(Intent.ACTION_SEND)
    intent.type = "text/plain"
    intent.putExtra(Intent.EXTRA_TEXT, link.toString())

    startActivity(Intent.createChooser(intent, "Share Link"))
}

In diesem Beispiel zeigt die standardmäßige Freigabe-Benutzeroberfläche automatisch eine Liste von Apps zum Teilen des Links an, sodass Sie dies mit nur wenigen Codezeilen in Ihrer eigenen App einrichten können.

Anstatt den Benutzer Kontakte auswählen und die Nachricht in Ihrer App verfassen zu lassen, werden diese Aktionen an die App delegiert, die er im Dialogfeld „Teilen“ auswählt. Darüber hinaus bedeutet das Delegieren der Freigabe an andere Apps, dass Sie den Benutzer nicht nach Kontaktberechtigungen fragen müssen, und ermöglicht Benutzern, aus einer erweiterten Kontaktliste in der von ihnen gewählten App auszuwählen. Um das Teilen in sozialen Netzwerken zu erleichtern, können Sie Ihrem dynamischen Link Social-Media-Vorschau-Metadaten hinzufügen , die zusammen mit dem Link in den wichtigsten sozialen Kanälen angezeigt werden.

Manchmal reicht es jedoch nicht aus, nur einen bloßen Link ohne Text zu senden, um eine überzeugende Empfehlung zu erhalten. Indem der Link mit einer kurzen Nachricht und, wenn möglich, einer reichhaltigeren Präsentation begleitet wird, können Benutzer das Wertversprechen der Empfehlung verstehen, wenn sie sie erhalten:

iOS

rewarded referral screenshotrewarded referral screenshot with share sheet

Android

rewarded referral screenshotrewarded referral screenshot with share sheet

Obwohl dies komplexer ist als das letzte Beispiel, wird der Ansatz mehr oder weniger derselbe sein. Auf diesem Bildschirm gibt es eine große Grafik mit dem Leistungsversprechen der Einladung und Schaltflächen zum Teilen auf wichtigen sozialen Kanälen. In diesem UI-Flow gibt es eine gewisse Redundanz – einige Freigabekanäle werden einzeln dargestellt, um eine kanalspezifischere Nachrichtenanpassung zu ermöglichen, z. B. das Hinzufügen einer Betreffzeile zu E-Mail-Einladungen. In diesem Einladungsmenü:

  • Präsentieren Sie Schaltflächen zum Teilen von E-Mails, Textnachrichten und zum Kopieren von Links und passen Sie deren Nachrichten entsprechend an. E-Mails enthalten einen Betreff und können einen längeren Text mit Zeilenumbrüchen, Bildern und Leerzeichen enthalten; Text sollte einen kürzeren Körper mit Zeilenumbrüchen, aber wenig Leerzeichen und keine Bilder enthalten; und das Kopieren von Links sollte nur den Link kopieren und sonst nichts.
  • Verwenden Sie die Systemfreigabe-Benutzeroberfläche für alles andere, einschließlich einer kurzen Einladungsnachricht, die den Link begleitet.
  • Deep-Link über ein URL-Schema oder einen universellen Link zu einer anderen App, die über eine spezielle Logik zur Handhabung der Einladungen Ihrer App verfügt. Dies funktioniert nicht außerhalb einer Partnerschaft zwischen Ihrer Organisation und der anderen App und ist wahrscheinlich keine Option für kleinere Organisationen. Allerdings können einige Apps ihr universelles/deep-linking-Verhalten öffentlich dokumentieren. Wir werden eine Dummy-Version davon in unserem Beispiel implementieren.

Definieren Sie zunächst einen Einladungsinhaltstyp, der nur die Informationen in einer Einladung kapselt und keine Funktionalität enthält. Auf diese Weise können Sie mit den Datentypen beginnen und über Ihren Code nachdenken, wie er diese Daten zusammenfügt.

Schnell

Hinweis: Dieses Firebase-Produkt ist auf macOS-, Mac Catalyst-, tvOS- oder watchOS-Zielen nicht verfügbar.
/// The content within an invite, with optional fields to accommodate all presenters.
/// This type could be modified to also include an image, for sending invites over email.
struct InviteContent {

  /// The subject of the message. Not used for invites without subjects, like text message invites.
  var subject: String?

  /// The body of the message. Indispensable content should go here.
  var body: String?

  /// The URL containing the invite. In link-copy cases, only this field will be used.
  var link: URL

}

Ziel c

Hinweis: Dieses Firebase-Produkt ist auf macOS-, Mac Catalyst-, tvOS- oder watchOS-Zielen nicht verfügbar.
/// The content within an invite, with optional fields to accommodate all presenters.
/// This type could be modified to also include an image, for sending invites over email.
@interface InviteContent : NSObject <NSCopying>

/// The subject of the message. Not used for invites without subjects, like text message invites.
@property (nonatomic, readonly, nullable) NSString *subject;

/// The body of the message. Indispensable content should go here.
@property (nonatomic, readonly, nullable) NSString *body;

/// The URL containing the invite. In link-copy cases, only this field will be used.
@property (nonatomic, readonly) NSURL *link;

- (instancetype)initWithSubject:(nullable NSString *)subject
                           body:(nullable NSString *)body
                           link:(NSURL *)link NS_DESIGNATED_INITIALIZER;

- (instancetype)init NS_UNAVAILABLE;

@end

Java

/**
 * The content of an invitation, with optional fields to accommodate all presenters.
 * This type could be modified to also include an image, for sending invites over email.
 */
public class InviteContent {

    /**
     * The subject of the message. Not used for invites without subjects, like SMS.
     **/
    @Nullable
    public final String subject;

    /**
     * The body of the message. Indispensable content should go here.
     **/
    @Nullable
    public final String body;

    /**
     * The URL containing the link to invite. In link-copy cases, only this field will be used.
     **/
    @NonNull
    public final Uri link;

    public InviteContent(@Nullable String subject, @Nullable String body, @NonNull Uri link) {
        // ...
    }

}

Kotlin+KTX

/**
 * The content of an invitation, with optional fields to accommodate all presenters.
 * This type could be modified to also include an image, for sending invites over email.
 */
data class InviteContent(
    /** The subject of the message. Not used for invites without subjects, like SMS.  */
    val subject: String?,
    /** The body of the message. Indispensable content should go here.  */
    val body: String?,
    /** The URL containing the link to invite. In link-copy cases, only this field will be used.  */
    val link: Uri
)

Das einzige erforderliche Datenelement ist hier die URL, ohne die Sie keine Benutzer zu Ihrer App einladen können. Die anderen Datenelemente sind klar auf das Versenden von E-Mails ausgerichtet, was sie in einigen anderen Fällen etwas umständlich macht – beim Versenden einer Einladung per Text liest sich der Klappentext, der den Link begleitet, möglicherweise ähnlich wie ein E-Mail-Betreff, aber beim Teilen in sozialen Medien Der Link-Begleittext könnte eher einem E-Mail-Text ähneln. Sie müssen damit selbst experimentieren, um die beste Balance für Ihre App zu finden, und wenn Sie sich nicht sicher sind, können Sie jederzeit einen Dienst wie Remote Config verwenden, damit Sie die Textwerte nach dem Start der App ändern können.

Schnell

Hinweis: Dieses Firebase-Produkt ist auf macOS-, Mac Catalyst-, tvOS- oder watchOS-Zielen nicht verfügbar.
/// A type responsible for presenting an invite given using a specific method
/// given the content of the invite.
protocol InvitePresenter {

  /// The name of the presenter. User-visible.
  var name: String { get }

  /// An icon representing the invite method. User-visible.
  var icon: UIImage? { get }

  /// Whether or not the presenter's method is available. iOS devices that aren't phones
  /// may not be able to send texts, for example.
  var isAvailable: Bool { get }

  /// The content of the invite. Some of the content type's fields may be unused.
  var content: InviteContent { get }

  /// Designated initializer.
  init(content: InviteContent, presentingController: UIViewController)

  /// This method should cause the presenter to present the invite and then handle any actions
  /// required to complete the invite flow.
  func sendInvite()

}

Ziel c

Hinweis: Dieses Firebase-Produkt ist auf macOS-, Mac Catalyst-, tvOS- oder watchOS-Zielen nicht verfügbar.
/// A type responsible for presenting an invite given using a specific method
/// given the content of the invite.
@protocol InvitePresenter <NSObject>

/// The name of the presenter. User-visible.
@property (nonatomic, readonly) NSString *name;

/// An icon representing the invite method. User-visible.
@property (nonatomic, readonly, nullable) UIImage *icon;

/// Whether or not the presenter's method is available. iOS devices that aren't phones
/// may not be able to send texts, for example.
@property (nonatomic, readonly) BOOL isAvailable;

/// The content of the invite. Some of the content type's fields may be unused.
@property (nonatomic, readonly) InviteContent *content;

/// Designated initializer.
- (instancetype)initWithContent:(InviteContent *)content presentingViewController:(UIViewController *)controller;

/// This method should cause the presenter to present the invite and then handle any actions
/// required to complete the invite flow.
- (void)sendInvite;

@end

Java

/**
 * Presents the invite using a specific method, such as email or social.
 */
public class InvitePresenter {

    /**
     * The user-visible name of the invite method, like 'Email' or 'SMS'
     **/
    public final String name;

    /**
     * An icon representing the invite method.
     **/
    @DrawableRes
    public final int icon;

    /**
     * Whether or not the method is available on this device. For example, SMS is phone only.
     **/
    public final boolean isAvailable;

    /**
     * The Content of the invitation
     **/
    public final InviteContent content;

    public InvitePresenter(String name, @DrawableRes int icon, boolean isAvailable, InviteContent content) {
        // ...
    }

    /**
     * Send the invitation using the specified method.
     */
    public void sendInvite(Context context) {
        // ...
    }

}

Kotlin+KTX

/**
 * Presents the invite using a specific method, such as email or social.
 */
open class InvitePresenter(
    /** The user-visible name of the invite method, like 'Email' or 'SMS'  */
    val name: String,
    /** An icon representing the invite method.  */
    @param:DrawableRes @field:DrawableRes
    val icon: Int,
    /** Whether or not the method is available on this device. For example, SMS is phone only.  */
    val isAvailable: Boolean,
    /** The Content of the invitation  */
    val content: InviteContent
) {
    /**
     * Send the invitation using the specified method.
     */
    open fun sendInvite(context: Context) {
        // ...
    }
}

Jetzt müssen Sie dies nur noch in eine UI-Komponente Ihrer Wahl stecken. Die vollständige Implementierung dieses Einladungsablaufs finden Sie in den Beispielen auf GitHub für iOS und Android .

Dies sind alles Methoden, mit denen Ihre Benutzer Einladungen an ihre Freunde senden können, was die einfachste Einladungslösung ist. Viele beliebte Apps liefern Einladungen auch durch das Versenden von E-Mails über ihr eigenes Backend, was die Integration eines E-Mail-Versanddienstes erfordert, aber eine Reihe von Vorteilen bietet, die sonst nicht verfügbar sind, mit nur ein paar kleinen Nachteilen.

Vorteile:

  • Ermöglicht E-Mails mit komplexem Markup, die von Ihrem Benutzer vor dem Senden nicht geändert werden können.
  • Ermöglicht eine granularere Nachverfolgung/Analyse (z. B. Senden von Erfolgen und Fehlern an Ihr Backend).

Nachteile:

  • E-Mails werden eher als Spam gekennzeichnet
  • Erfordert die Integration mit einem E-Mail-Zustelldienst
  • Erfordert In-App-Kontakte-Berechtigungen

Im Allgemeinen bietet das Versenden von Einladungen über Ihren eigenen E-Mail-Zustelldienst ein konsistenteres und möglicherweise reichhaltigeres Einladungserlebnis auf Kosten der Vielseitigkeit.

Öffnen Sie den verknüpften Inhalt in Ihrer App

Schließlich müssen Sie den Link erhalten, der an Ihre App weitergegeben wird, damit Sie den verknüpften Inhalt dem Empfänger anzeigen können. Mit dem Dynamic Links SDK geht das ganz einfach:

iOS

Unter iOS erhalten Sie den dynamischen Link, indem Sie die Methode application:continueUserActivity:restorationHandler: implementieren. Im Wiederherstellungshandler können Sie den dynamischen Link abrufen, indem handleUniversalLink:completion: aufrufen. Wenn ein dynamischer Link an Ihre App übergeben wurde, können Sie ihn aus der url -Eigenschaft von FIRDynamicLink . Zum Beispiel:

Ziel c

Hinweis: Dieses Firebase-Produkt ist auf macOS-, Mac Catalyst-, tvOS- oder watchOS-Zielen nicht verfügbar.
[[FIRDynamicLinks dynamicLinks]
    handleUniversalLink:userActivity.webpageURL
             completion:^(FIRDynamicLink * _Nullable dynamicLink,
                          NSError * _Nullable error) {
      NSString *link = dynamicLink.url;
      BOOL strongMatch = dynamicLink.matchConfidence == FIRDynamicLinkMatchConfidenceStrong;
      // ...
    }];

Schnell

Hinweis: Dieses Firebase-Produkt ist auf macOS-, Mac Catalyst-, tvOS- oder watchOS-Zielen nicht verfügbar.
FIRDynamicLinks.dynamicLinks()?.handleUniversalLink(userActivity.webpageURL!) { (dynamiclink, error) in
    let link = dynamicLink.url
    let strongMatch = dynamicLink.matchConfidence == FIRDynamicLinkMatchConfidenceStrong
    // ...
}

Darüber hinaus müssen Sie dynamicLinkFromCustomSchemeURL: in der Methode application:openURL:options: aufrufen, um dynamische Links zu erhalten, die als benutzerdefinierte Schema-URLs an Ihre App übergeben werden. Zum Beispiel:

Ziel c

Hinweis: Dieses Firebase-Produkt ist auf macOS-, Mac Catalyst-, tvOS- oder watchOS-Zielen nicht verfügbar.
FIRDynamicLink *dynamicLink = [[FIRDynamicLinks dynamicLinks] dynamicLinkFromCustomSchemeURL:url];
if (dynamicLink) {
  NSString *link = dynamicLink.url;
  BOOL strongMatch = dynamicLink.matchConfidence == FIRDynamicLinkMatchConfidenceStrong;
  // ...
  return YES;
}

Schnell

Hinweis: Dieses Firebase-Produkt ist auf macOS-, Mac Catalyst-, tvOS- oder watchOS-Zielen nicht verfügbar.
let dynamicLink = FIRDynamicLinks.dynamicLinks()?.dynamicLinkFromCustomSchemeURL(url)
if let dynamicLink = dynamicLink {
  let link = dynamicLink.url
  let strongMatch = dynamicLink.matchConfidence == FIRDynamicLinkMatchConfidenceStrong
  // ...
  return true
}

Nachdem Sie nun den Wert des link -Parameters haben, können Sie dem Empfänger den verlinkten Inhalt anzeigen oder die durch den Parameter angegebenen Daten auf andere Weise verarbeiten. Eine URL-Routing-Bibliothek wie JLRoutes kann bei dieser Aufgabe helfen.

Wenn Sie einen Link erhalten, der für einen bestimmten Empfänger bestimmt ist, stellen Sie sicher, dass das Übereinstimmungskonfidenz des dynamischen Links strong ist, bevor Sie eine benutzerspezifische Logik ausführen.

Android

Unter Android verwenden Sie die getDynamicLink() Methode, um Daten vom dynamischen Link abzurufen:

Java

FirebaseDynamicLinks.getInstance()
        .getDynamicLink(getIntent())
        .addOnCompleteListener(new OnCompleteListener<PendingDynamicLinkData>() {
            @Override
            public void onComplete(@NonNull Task<PendingDynamicLinkData> task) {
                if (!task.isSuccessful()) {
                    // Handle error
                    // ...
                }

                FirebaseAppInvite invite = FirebaseAppInvite.getInvitation(task.getResult());
                if (invite != null) {
                    // Handle invite
                    // ...
                }
            }
        });

Kotlin+KTX

Firebase.dynamicLinks
        .getDynamicLink(intent)
        .addOnCompleteListener { task ->
            if (!task.isSuccessful) {
                // Handle error
                // ...
            }

            val invite = FirebaseAppInvite.getInvitation(task.result)
            if (invite != null) {
                // Handle invite
                // ...
            }
        }

Nachdem Sie nun den Wert des link -Parameters haben, können Sie dem Empfänger den verlinkten Inhalt anzeigen oder die durch den Parameter angegebenen Daten auf andere Weise verarbeiten. Eine URL-Routing-Bibliothek kann bei dieser Aufgabe helfen.