Partager via


Adaptateurs personnalisés iOS

Les adaptateurs personnalisés permettent à notre SDK d’appeler un autre SDK installé sur le même appareil, généralement à des fins de médiation. Ce document décrit le code que vous devez écrire pour créer vos propres adaptateurs personnalisés.

Remarque

Les protocoles décrits ici sont exactement ceux que nous avons utilisés pour implémenter nos propres adaptateurs de médiation.

Bannières

Pour effectuer des appels de médiation à un autre sdk afin d’afficher des bannières, vous devez implémenter le ANCustomAdapterBanner protocole . Il n’existe qu’une seule méthode spécifiée par ce protocole : requestBannerAdWithSize. Cette méthode gère l’instanciation du Kit de développement logiciel (SDK) médié et son utilisation pour effectuer des demandes publicitaires. Il doit déclencher des événements à partir du KIT de développement logiciel (SDK) en appelant des méthodes déléguées telles que didLoadBannerAd. Pour plus d’informations, consultez les exemples ci-dessous.

requestBannerWithAdSize prend les arguments suivants :

  • size: taille de l’affichage publicitaire médiaté.
  • rootViewController: contrôleur de la vue publicitaire médiatée.
  • parameterString: chaîne opaque facultative transmise à partir du serveur, qui peut être utilisée pour définir des paramètres spécifiques au SDK, tels que des informations de ciblage supplémentaires. L’encodage du contenu de cette chaîne est entièrement à la charge de l’implémentation de l’adaptateur sdk tiers. En d’autres termes, le paramètre doit être rempli avec des valeurs comprises par le serveur publicitaire du SDK tiers.
  • idString: ID de l’unité publicitaire, tel qu’il est compris par le serveur publicitaire du SDK tiers. Il fait référence à un endroit spécifique où un annonceur peut afficher des publicités dans une application mobile. Cet ID est opaque pour notre KIT de développement logiciel (SDK) mobile ; le contenu de l’ID et son encodage sont à la charge de l’implémentation du KIT de développement logiciel (SDK) tiers.
  • targetingParameters: tous les paramètres de ciblage publicitaire, tels que l’âge, le sexe ou l’emplacement, que vous souhaitez envoyer au SDK médiaté. Vous êtes responsable de l’envoi des paramètres du SDK médiatés qu’il peut comprendre.

Voici un exemple d’adaptateur qui sert de médiateur à un SDK fictif « Godzilla » pour afficher des bannières publicitaires. Pour plus d’informations sur les rappels de cet exemple, consultez les sections Rappels obligatoires et Rappels facultatifs ci-dessous.

@implementation GodzillaBannerAdaptor
@synthesize delegate;
#pragma mark GodzillaCustomAdapterBanner
- (void)requestBannerAdWithSize:(CGSize)size
             rootViewController:(UIViewController *)rootViewController
                serverParameter:(NSString *)parameterString
                       adUnitId:(NSString *)idString
            targetingParameters:(ANTargetingParameters *)targetingParameters
{
    // Here is where you are responsible for (1) instantiating the mediated SDK,
    // (2) building a request object using the elements of `targetingParameters`.
    // Note that you are responsible for ensuring that the targeting
    // parameters can be understood by the mediated SDK.  We also assume that (3)
    // you create a view in the mediated SDK that you can use to make the ad request.
    // Next, we tell the mediated SDK's ad view to request a banner ad from their ad
    // server.  If it works, we call the `didLoadBannerAd` method on our delegate to
    // notify it that we've successfully loaded an ad.
    [self.gzAdView getAdWithRequest:request onCompletion:^(BOOL success, NSError *error) {
        if (success) {
            [self.delegate didLoadBannerAd:self.gzAdView];
        } else {
    // If the mediated SDK was not able to load an ad successfully, we are responsible 
    // for translating the mediated SDK's error codes into something that we can 
    // understand and report to our delegate using `didFailToLoadAd`.
            ANAdResponseCode code = ANAdResponseInternalError;
            switch (error.code) {
                case GodzillaAdUnknownError:
                    code = ANAdResponseInternalError;
                    break;
                case GodzillaAdServerError:
                    code = ANAdResponseNetworkError;
                    break;
                case GodzillaAdUnavailable:
                    code = ANAdResponseUnableToFill;
                    break;
                case GodzillaAdDisabled:
                    code = ANAdResponseInvalidRequest;
                    break;
                default:
                    code = ANAdResponseInternalError;
                    break;
            }
            [self.delegate didFailToLoadAd:code];
        }
    }];
}
#pragma mark GodzillaBannerDelegate
// Implement the required callbacks that allow the mediated SDK to
// communicate with ours.
- (void)GodzillaAdWillPresent:(GodzillaBanner *)bannerAd {
    [self.delegate willPresentAd];
}
- (void)GodzillaAdDidPresent:(GodzillaBanner *)bannerAd {
    [self.delegate didPresentAd];
}
- (void)GodzillaAdWillDismiss:(GodzillaBanner *)bannerAd {
    [self.delegate willCloseAd];
}
- (void)GodzillaAdDidDismiss:(GodzillaBanner *)bannerAd {
    [self.delegate didCloseAd];
}
- (void)GodzillaAdDidInteract:(GodzillaBanner *)bannerAd {
    [self.delegate adWasClicked];
}
- (void)GodzillaAdWillLeaveApplication:(GodzillaBanner *)bannerAd {
    [self.delegate willLeaveApplication];
}

Interludes

Pour effectuer des appels de médiation à un autre sdk afin d’afficher des interstitiels, vous devez implémenter le ANCustomAdapterInterstitial protocole . Trois méthodes sont spécifiées par ce protocole :

  • requestInterstitialAdWithParameter: demande les annonces publicitaires à partir du KIT de développement logiciel (SDK) médiatté. Il prend trois arguments :
    • parameterString: chaîne opaque facultative transmise à partir du serveur, qui peut être utilisée pour définir des paramètres spécifiques au SDK, tels que des informations de ciblage supplémentaires. L’encodage du contenu de cette chaîne est entièrement à la charge de l’implémentation de l’adaptateur sdk tiers. En d’autres termes, le paramètre doit être rempli avec des valeurs comprises par le serveur publicitaire du SDK tiers.
    • idString: ID de l’unité publicitaire, tel qu’il est compris par le serveur publicitaire du SDK tiers. Il fait référence à un endroit spécifique où un annonceur peut afficher des publicités dans une application mobile. Cet ID est opaque pour notre KIT de développement logiciel (SDK) mobile ; le contenu de l’ID et son encodage sont à la charge de l’implémentation du KIT de développement logiciel (SDK) tiers.
    • targetingParameters: tous les paramètres de ciblage publicitaire, tels que l’âge, le sexe ou l’emplacement, que vous souhaitez envoyer au SDK médiaté. Vous êtes responsable de l’envoi des paramètres du SDK médiatés qu’il peut comprendre.
  • isReady: indique si une annonce publicitaire est chargée et prête à être affichée à l’utilisateur.
  • presentFromViewController: affiche l’annonce publicitaire à l’utilisateur. Doit inclure un case activée pour isReady voir s’il peut fonctionner. Prend un argument, viewController, qui est le contrôleur de vue utilisé pour afficher l’interstitiel.

Dans cet exemple de code, nous médions un SDK fictif « Godzilla » et nous lui faisons afficher une publicité interstitielle :

@implementation GodzillaInterstitialAdaptor
@synthesize delegate;
#pragma mark GodzillaCustomAdapterInterstitial
- (void)requestInterstitialAdWithParameter:(NSString *)parameterString
                                  adUnitId:(NSString *)idString
                       targetingParameters:(ANTargetingParameters *)targetingParameters
{
    // Here is where you are responsible for (1) instantiating the mediated SDK,
    // (2) building a request object using the elements of `targetingParameters`.
    // Note that you are responsible for ensuring that the targeting
    // parameters can be understood by the mediated SDK.  We also assume that (3)
    // you create a view in the mediated SDK that you can use to make the ad request.
    // Next, we tell the mediated SDK's ad view to request an interstitial ad from their
    // ad server.  If it works, we call the `didLoadInterstitialAd` method on our 
    // delegate to notify it that we've successfully loaded the ad.
    [GodzillaInterstitial fetchWithRequest:request
                          UUID:idString
                          onCompletion:^(BOOL success, NSError *error) {
                          if (success) {
                            [self.delegate didLoadInterstitialAd:self];
                          }
                          else {
    // If the mediated SDK was not able to load an ad successfully, we are responsible 
    // for translating the mediated SDK's error codes into something that we can 
    // understand and report to our delegate using `didFailToLoadAd`.
    ANAdResponseCode code = ANAdResponseInternalError;
    switch (error.code) {
                    case GodzillaAdUnknownError:
                        code = ANAdResponseInternalError;
                        break;
                    case GodzillaAdServerError:
                        code = ANAdResponseNetworkError;
                        break;
                    case GodzillaAdUnavailable:
                        code = ANAdResponseUnableToFill;
                        break;
                    case GodzillaAdDisabled:
                        code = ANAdResponseInvalidRequest;
                        break;
                    default:
                        code = ANAdResponseInternalError;
                        break;
                }
                [self.delegate didFailToLoadAd:code];
            }
        }];
}
- (void)presentFromViewController:(UIViewController *)viewController {
    // First, we check if the ad is not ready to show.  If true, we
    // fire the `failedToDisplayAd` event and exit.
    if (![self isReady]) {
        [self.delegate failedToDisplayAd];
        return;
    }
    // At this point, we know that an ad is ready.  We tell the
    // mediated interstitial view to show the ad, and if it fails,
    // we fire the `failedToDisplayAd` method.
    [GodzillaInterstitial displayfromViewController:viewController
                          onCompletion:^(BOOL success, NSError *error) {
                          if (!success) {
                              NSLog(@"Godzilla interstitial call to display ad failed");
                              [self.delegate failedToDisplayAd];
                          }
                      }];
}
- (BOOL)isReady {
    // Check whether the mediated SDK has an ad available to show.
    return [GodzillaInterstitial isReady];
}
#pragma mark GodzillaInterstitialDelegate
// Implement the required callbacks that allow the mediated SDK to
// communicate with ours.
- (void)GodzillaAdWillPresent:(GodzillaInterstitial *)interstitialAd {
    [self.delegate willPresentAd];
}
- (void)GodzillaAdDidPresent:(GodzillaInterstitial *)interstitialAd {
    [self.delegate didPresentAd];
}
- (void)GodzillaAdWillDismiss:(GodzillaInterstitial *)interstitialAd {
    [self.delegate willCloseAd];
}
- (void)GodzillaAdDidDismiss:(GodzillaInterstitial *)interstitialAd {
    [self.delegate didCloseAd];
}
- (void)GodzillaAdDidInteract:(GodzillaInterstitial *)interstitialAd {
    [self.delegate adWasClicked];
}
- (void)GodzillaAdWillLeaveApplication:(GodzillaInterstitial *)interstitialAd {
    [self.delegate willLeaveApplication];
}

Rappels requis

Les rappels répertoriés ci-dessous doivent être implémentés dans votre adaptateur personnalisé. Vous pouvez voir des exemples de leur utilisation dans les exemples de code ailleurs sur cette page.

Pour indiquer qu’une demande d’annonce a réussi, appelez l’un des éléments suivants, selon qu’il s’agit d’une bannière ou d’un message d’interstitiel :

  • - (void)didLoadBannerAd:(UIView *)view: la demande publicitaire du KIT de développement logiciel (SDK) s’est terminée et a retourné une bannière avec succès.
  • - (void)didLoadInterstitialAd:(id<ANCustomAdapterInterstitial>)adaptor: la demande publicitaire du KIT de développement logiciel (SDK) médiée s’est terminée et a retourné un message d’interstitiel. Transmettez une référence à l’adaptateur actuel.

Pour indiquer qu’une demande d’annonce n’a pas abouti, qu’il s’agisse d’une bannière ou d’une annonce, appelez :

  • - (void)didFailToLoadAd:(ANAdResponseCode)errorCode: la demande de publicité du KIT de développement logiciel (SDK) n’a pas pu retourner une publicité valide.

En outre, pour les adaptateurs interstitiels, une tentative de show() ayant échoué doit appeler :

  • - (void)failedToDisplayAd: le KIT de développement logiciel (SDK) médiatise a reçu un appel pour présenter une annonce, mais aucune annonce n’était disponible ou le KIT de développement logiciel (SDK) n’a pas pu être présenté.

Rappels facultatifs

Les rappels répertoriés ci-dessous doivent être implémentés dans des adaptateurs personnalisés pour les bannières et les interstitiels. Notez qu’ils ne sont pas strictement obligatoires.

  • - (void)adWasClicked: l’utilisateur a cliqué sur la publicité lors de son affichage par le SDK médiatisé.
  • - (void)willPresentAd: l’utilisateur interagit avec la publicité et le KIT de développement logiciel (SDK) est sur le point de présenter une vue modale.
  • - (void)didPresentAd: le SDK médiaté a présenté la vue modale.
  • - (void)willCloseAd: le KIT de développement logiciel (SDK) est sur le point de fermer la vue modale.
  • - (void)didCloseAd: le KIT de développement logiciel (SDK) médiatise ferme la vue modale.
  • - (void)willLeaveApplication: le KIT de développement logiciel (SDK) médiatisée lance une application externe.