Aktivitätsunterstützung für Vollbildanzeigen

Feedback geben

Mit der SDK Runtime gelten Einschränkungen dafür, wie SDKs neue Aktivitäten starten können. Dies stellt eine Herausforderung für Vollbildanzeigen dar, bei denen für eine bessere Kontrolle und Nutzererfahrung normalerweise eine separate Aktivität gestartet wird. Um dieses Problem zu beheben, wurde mit SDK Runtime ein neuer Mechanismus für Aktivitäten in einer Sandbox eingeführt.

SDKs, die in der SDK-Laufzeitumgebung geladen werden, können <activity>-Tags nicht direkt in ihrem Manifest definieren oder ihre eigenen Aktivitäten initiieren. Stattdessen wird die neue Intent-Aktion START_SANDBOXED_ACTIVITY eingeführt.

Auch SDKs können mit dieser Aktion keine Intents starten. SDKs können Fordern Sie die Client-App an, diesen Intent zu initiieren. Das System erstellt dann eine plattformdefinierte Aktivität und übergibt sie an das SDK. Diese Aktivität wird ausgeführt in wie beim SDK.

Das SDK kann diese Aktivität dann zur Implementierung und Verwaltung der Vollbildanzeige verwenden. Nutzererfahrung.

Die von der Plattform bereitgestellte Aktivität ist ein Standard-android.app.Activity, im Rahmen der Aufgabe der Client-App eingeführt wird.

Aktivitäten in der SDK-Laufzeit erstellen

Es gibt zwei Hauptmethoden, um Aktivitäten zu erstellen: die optimierten Aktivitätenbibliotheken von Jetpack oder die direkte Interaktion mit Platform-APIs.

Wir empfehlen die Verwendung von Aktivitätsbibliotheken, da sie die Erstellung von Aktivitäten vereinfachen, da sie die zugrunde liegende Komplexität abstrahieren.

Aktivitätenbibliotheken

Aktivität Bibliotheken Vorteile:

  • Abstrahieren Sie die internen Details der Registrierung von Aktivitäts-Handlern und der Freigabe ihrer IDs für Client-Apps.
  • Gibt App-Entwicklern mehr Kontrolle darüber, wie SDKs Aktivitäten in ihren Apps erstellen, indem sie Bedingungen (Prädikate) festlegen können, die erfüllt sein müssen.
  • Erstellen Sie eine einheitliche Möglichkeit für SDKs, APIs zu definieren, die Aktivitäten starten.

Es gibt drei Aktivitätsbibliotheken: Core, Client und Provider.

  • Die Bibliothek core stellt die Schnittstellen bereit, die von Clientanwendungen und Anbieterbibliotheken.
  • Die Bibliothek provider stellt APIs für SDKs zum Starten von Aktivitäten bereit.
  • Die Clientbibliothek stellt APIs für Client-Apps zur Verfügung, mit denen ein Aktivitäts-Launcher erstellt werden kann. Mit diesen APIs können SDKs Apps zum Starten von Aktivitäten auffordern.

Diese Bibliotheken führen die folgenden APIs ein:

Der Ablauf beim Starten von Aktivitäten mit Aktivitätsbibliotheken ist folgender:

  1. Das SDK fügt einen Parameter des Typs SdkActivityLauncher auf alle APIs, die Aktivitäten starten.
  2. Die Client-App ruft auf createSdkActivityLauncher für eine der Aktivitäten zum Erstellen eines Launchers, der bei API-Aufrufen an das SDK übergeben werden kann.
  3. Das SDK ruft auf, SdkSandboxControllerCompat.registerSdkSandboxActivityHandler(SdkSandboxActivityHandlerCompat) und ruft das ID-Token ab.
  4. Das SDK ruft auf, launchSdkActivity um die Aktivität zu starten.

Das folgende Diagramm zeigt den Ablauf für die Verwendung von Aktivitätsbibliotheken.

<ph type="x-smartling-placeholder">
</ph> Sequenzdiagramm der Aktivitätsbibliothek
Sequenzdiagramm, das den Ablauf beim Starten einer Aktivität unter Verwendung einer Aktivität zeigt Bibliotheken.

Plattform-APIs

Die Plattform führt die folgenden APIs ein, um das Erstellen und in einer Sandbox ausgeführte Aktivitäten innerhalb der SDK Runtime verwalten:

Um eine Aktivität mit den Platform APIs zu starten, müssen SDKs so vorgehen:

  1. Das SDK registriert einen Aktivitäts-Handler mithilfe der bereitgestellten APIs und ruft eine Kennung ab.
  2. Das SDK gibt diese Kennung an die Client-App weiter.
  3. Die Client-App ruft die Methode auf, um eine Aktivität in der SDK-Laufzeit mit der Plattform-API startSdkSandboxActivity(Activity, IBinder) zu starten. Dabei werden die ausgewählte Startaktivität für diese neue Aktivität und die ID des Aktivitäts-Handlers als Parameter übergeben.
  4. Die Plattform startet eine Aktivität und benachrichtigt das SDK über einen Callback im Activity Handler (SdkSandboxActivityHandler.onActivityCreated(Activity)).
  5. Das SDK verwendet die Aktivität, um eine Anzeige zu platzieren.

Durch die Verwendung von Platform APIs ist das SDK dafür verantwortlich, die SdkSandboxActivityHandler Kennung mit der Client-App zu einem geeigneten Zeitpunkt über ihre APIs und und zeigen Kunden-Apps, wie sie verwendet werden.

Im folgenden Flussdiagramm enthält das Beispiel-SDK die Methode launchActivity(AppCallback), die ein Callback (als Teil der SDK API definiert). Dieser Callback wird vom SDK zum Freigeben des Aktivitäts-Handlers (SdkSandboxActivityHandler) ID mit der Client-App.

<ph type="x-smartling-placeholder">
</ph> Sequenzdiagramm für Plattform-APIs
Sequenzdiagramm, das den Ablauf zum Starten einer Aktivität mit Plattform-APIs zeigt.

Sichtbarkeit

Innerhalb von SDK Runtime wird für Anzeigen, die in die Ansichtshierarchie der Client-App integriert sind, Seite Kanäle zum Rendern von SDK-Ansichten vom SDK-Prozess in den Prozess der Client-App.

Das SDK kann nicht dieselben View APIs wie außerhalb der SDK-Laufzeit verwenden, um Er kann ermitteln, ob die Anzeige für den Nutzer sichtbar ist, da der Anzeigenaufruf an das Anwendungsfenster (Sichtbarkeit)

Im Gegensatz dazu wird die von der Plattform bereitgestellte Aktivität nativ innerhalb des SDK Runtime-Prozesses ausgeführt, wodurch die Notwendigkeit von Nebenkanälen entfällt und SDKs die Verwendung der standardmäßigen Android-APIs Activity und View ermöglichen.

Aufgrund dieser unterschiedlichen Implementierungen streben wir fortlaufend an einer Vereinheitlichung der um die Sichtbarkeitssignale unabhängig vom Ladekontext der Anzeige abzurufen.

Lifecycle

Die ActivityHolder übergeben an das SDK über SdkSandboxActivityHandlerCompat.onActivityCreated(ActivityHolder) implementiert LifecycleOwner und kann genutzt werden, um Lifecycle.Event

Rückwärtsnavigation

Die Methode ActivityHolder.getOnBackPressedDispatcher() Rücksendungen OnBackPressedDispatcher die zum Registrieren von OnBackPressedCallback für die Rückwärtsnavigation nutzen.