SDK Runtime impone delle restrizioni sul modo in cui gli SDK possono avviare nuove attività. Ciò rappresenta una sfida per i formati di annunci a schermo intero che in genere si basano sull'avvio di un'attività separata per un maggiore controllo e un'esperienza utente. Per risolvere questo problema, SDK Runtime introduce un nuovo meccanismo per le attività con sandbox.
Gli SDK caricati nell'ambiente SDK Runtime non possono definire direttamente i tag <activity>
nel file manifest o avviare le proprie attività.
Viene invece introdotta una nuova azione per intent, START_SANDBOXED_ACTIVITY
.
Anche se gli SDK non possono lanciare intent con questa azione, gli SDK possono richiedere all'app del client di avviare questo intent. Il sistema crea quindi un'attività definita dalla piattaforma e la passa all'SDK. L'attività verrà eseguita tra la stessa procedura dell'SDK.
L'SDK può quindi utilizzare questa attività per implementare e gestire l'annuncio a schermo intero. un'esperienza senza intervento manuale.
L'attività fornita dalla piattaforma è un android.app.Activity
standard,
come parte dell'attività dell'app client.
Creazione di attività in SDK Runtime
Hai due metodi principali per creare attività: utilizzare le librerie attività Jetpack semplificate o interagire direttamente con le API Platform.
Ti consigliamo di utilizzare le librerie attività perché semplificano la creazione delle attività astraendo la complessità di base.
Librerie attività
Attività librerie offrono diverse vantaggi:
- Astrai i dettagli interni per la registrazione dei gestori di attività e la condivisione dei loro identificatori con le app client.
- Offre agli sviluppatori di app un maggiore controllo sul modo in cui gli SDK creano attività all'interno delle loro app, consentendo loro di impostare le condizioni (predicati) da soddisfare.
- Crea un modo unificato per consentire agli SDK di definire le API che avviano le attività.
Esistono tre librerie di attività: core, client e provider.
- La libreria principale fornisce le interfacce utilizzate dalle app client e tramite le librerie dei provider.
- La libreria provider fornisce le API per gli SDK per avviare le attività.
- La libreria client fornisce le API per le app client per creare un'Avvio attività, che gli SDK possono usare per richiedere alle app di avviare attività.
Queste librerie introducono le seguenti API:
SdkActivityLauncher
: Avvio attività consente agli SDK di gestire l'avvio delle attività dall'app client. Le app client devono creare un'Avvio app e passarlo come parametro alle API dell'SDK che avviano attività.<T : Activity & LifecycleOwner> T.createSdkActivityLauncher(() -> Boolean )
: Una funzione di estensione che l'app client può chiamare dalle proprie attività per creare Avvio applicazioni.SdkActivityLauncher.launchSdkActivity(IBinder)
: un metodo utilizzato dall'SDK per richiedere all'app di avviare attività.
Il flusso per avviare le attività con raccolte di attività è il seguente:
- L'SDK aggiunge un parametro del tipo
SdkActivityLauncher
a tutte le API che avvieranno le attività. - L'app client chiama
createSdkActivityLauncher
in una delle sue attività per creare un'Avvio app che possa essere passato all'SDK durante le chiamate API. - L'SDK chiama
SdkSandboxControllerCompat.registerSdkSandboxActivityHandler(SdkSandboxActivityHandlerCompat)
e recupera il token dell'identificatore. - L'SDK chiama
launchSdkActivity
per avviare l'attività.
Il seguente diagramma mostra il flusso in caso di utilizzo delle librerie di attività.
API della piattaforma
La piattaforma introduce le seguenti API per facilitare la creazione e gestione delle attività con sandbox all'interno di SDK Runtime:
SdkSandboxActivityHandler
: Il gestore di attività viene utilizzato per informare l'SDK quando viene creata un'attività e quando viene registrata dall'SDK.- Per facilitare la registrazione dei gestori di attività, l'SDK può utilizzare i seguenti metodi in
SdkSandboxController
:.registerSdkSandboxActivityHandler(SdkSandboxActivityHandler)
: Registra un'istanza diSdkSandboxActivityHandler
, che restituisce un identificatoreIBinder
..unregisterSdkSandboxActivityHandler(SdkSandboxActivityHandler)
: Annulla la registrazione di un'istanza registrata diSdkSandboxActivityHandler
utilizzando il proprio identificatore.
SdkSandboxManager.startSdkSandboxActivity(Activity, IBinder)
: Richiamato dall'app client, questo metodo attiva la creazione di attività per l'SDK. L'app client deve passare come parametri l'attività di avvio scelta e l'identificatore del gestore attività dell'SDK.
Per avviare un'attività utilizzando le API della piattaforma, gli SDK devono seguire questo flusso:
- L'SDK registra un gestore di attività utilizzando le API fornite e ottiene un identificatore.
- L'SDK condivide questo identificatore con la sua app client.
- L'app client chiama il metodo per avviare un'attività in SDK Runtime con l'API della piattaforma
startSdkSandboxActivity(Activity, IBinder)
, passando come parametri l'attività di avvio scelta per la nuova attività e l'identificatore del gestore di attività. - La piattaforma avvia un'attività e invia una notifica all'SDK tramite un callback nel gestore di attività (
SdkSandboxActivityHandler.onActivityCreated(Activity)
). - L'SDK usa l'attività per completarla con un annuncio.
L'utilizzo delle API Platform rende l'SDK responsabile della condivisione SdkSandboxActivityHandler un identificatore univoco con l'app client tramite le relative API al momento opportuno e possono aiutare le app client a usarle.
Nel seguente diagramma di flusso, l'SDK di esempio ha un metodo launchActivity(AppCallback)
che prevede un
(definito come parte dell'API dell'SDK). Questo callback è utilizzato
SDK per condividere il gestore attività (SdkSandboxActivityHandler
)
con l'app client.
Visibilità
In SDK Runtime, gli annunci integrati nella gerarchia delle visualizzazioni dell'app client lato canali per eseguire il rendering delle viste SDK dal processo SDK a quello dell'app client.
L'SDK non può utilizzare le stesse API View che utilizzano al di fuori del runtime dell'SDK per determinare se l'annuncio è visibile all'utente, in quanto la visualizzazione dell'annuncio non viene allegati alla finestra dell'applicazione (Visibilità).
Al contrario, l'attività fornita dalla piattaforma viene eseguita in modo nativo nel processo SDK Runtime, eliminando la necessità di canali laterali e consentendo agli SDK di utilizzare le API Android Activity
e View
standard.
A causa di queste diverse implementazioni, gli sforzi continui mirano a unificare per recuperare gli indicatori di visibilità indipendentemente dal contesto di caricamento dell'annuncio.
Lifecycle
La
ActivityHolder
passati all'SDK
SdkSandboxActivityHandlerCompat.onActivityCreated(ActivityHolder)
implementa
LifecycleOwner
e può essere utilizzato per conoscere
Lifecycle.Event
.
Navigazione a ritroso
Il metodo
ActivityHolder.getOnBackPressedDispatcher()
resi
OnBackPressedDispatcher
che può essere utilizzato per registrare
OnBackPressedCallback
per gestire la navigazione a ritroso.