Passer au contenu principal

Vue d’ensemble

OneSignal propose deux éditeurs de messages in-app :
  • Glisser-déposer GUI pour les créateurs non techniques
  • Éditeur HTML pour les développeurs qui souhaitent un contrôle pixel parfait sur la mise en page, le comportement et la réactivité.

Image illustrant le code in-app à côté d'un rendu in-app

Ce que vous pouvez faire avec l’éditeur HTML :
  • Mises en page : Créez des mises en page responsives complexes (par ex., CTA côte à côte).
  • Formulaires : Collectez des entrées en ligne (e-mail, commentaires, enquête).
  • Polices et marque : Utilisez des polices web personnalisées et des variables CSS.
  • Actions JS : Suivez les clics, étiquetez les utilisateurs, envoyez des résultats et plus encore.

Prérequis

  • iOS : 3.9.0+
  • Android : 4.6.3+
    • Si votre application utilise un SDK plus ancien, les messages in-app s’afficheront dans une mise en page Center Modal à la place.

Créer et prévisualiser un in-app HTML

Accédez à Messages > New In-App pour créer, modifier, tester, mettre en pause, dupliquer ou supprimer vos messages in-app. Entrez votre code HTML sur le côté gauche et prévisualisez-le en direct. Utilisez Send Test In-App pour tester la réactivité et la conception.

Image montrant l'éditeur HTML à côté de l'aperçu

Ajouter des étiquettes traçables

Ajoutez data-onesignal-unique-label sur les éléments interactifs afin que les clics soient suivis et exploitables.
<button class="tag-user" data-onesignal-unique-label="my-tag-user-button">Tag User</button>

Lier les actions de clic avec JavaScript

// Tag the user when they click a button
document.querySelector(".tag-user").onclick = (e) => {
  OneSignalIamApi.tagUser(e, { fiz: "baz" });
};

Support des ressources

Les ressources se chargent au moment du rendu à partir des URL que vous fournissez.
<img src="https://media.onesignal.com/iam/default_image_20200320.png" alt="Promo" />

Personnalisation

Insérez dynamiquement les valeurs de données utilisateur en utilisant la syntaxe Liquid :
<div>Hi there {{ name | default: 'you' }}!</div>
Contextes pris en charge :
  • Texte à l’intérieur d’éléments comme div, p, li
  • À l’intérieur des blocs <style>
  • Dans les attributs href, src, action et data
Non pris en charge dans :
  • À l’intérieur des balises <script>
  • À travers un contenu imbriqué complexe où l’analyse devient ambiguë, par ex. :
<div>
  Hi {{name}}
  <span>Here's your coupon!</span>
</div>

Accessibilité et conception responsive

Utilisez des requêtes média CSS et la typographie de plateforme pour s’adapter à la taille de l’appareil et aux paramètres de texte du système d’exploitation.
@media only screen and (max-width: 620px) {
  .btn-primary { width: 100% !important; }
}
/* Respect dynamic text sizes on iOS */
:root { font: -apple-system-body; }

Zones sûres (encoches, barres d’accueil)

Les appareils modernes ont des zones sûres (comme des encoches ou des barres d’accueil). Utilisez les variables safe-area-inset-* pour rembourrer votre mise en page :
body {
  padding-top: var(--safe-area-inset-top);
  padding-right: var(--safe-area-inset-right);
  padding-bottom: calc(var(--safe-area-inset-bottom) + 20px);
  padding-left: var(--safe-area-inset-left);
  margin: 0;
}

Style en mode sombre

Les appareils mobiles et les applications appliquent souvent des ajustements automatiques en mode sombre en fonction du thème système de l’utilisateur. Cela peut faire apparaître les messages in-app (IAM) différemment de ce qui était prévu. Par exemple, le texte peut inverser la couleur ou les images d’arrière-plan peuvent sembler atténuées. Pour garantir que votre IAM ait un aspect cohérent sur les thèmes clair et sombre, définissez des styles explicites pour les deux modes.

Meilleures pratiques

  • Définissez des couleurs explicites. Définissez toujours le texte, l’arrière-plan et les couleurs des boutons directement dans votre HTML ou CSS. Évitez les couleurs transparentes ou par défaut qui reposent sur le comportement du système.
  • Utilisez les requêtes média prefers-color-scheme. Vous pouvez inclure des remplacements en mode sombre avec :
    @media (prefers-color-scheme: dark) {
      body {
        background-color: #000000;
        color: #ffffff;
      }
      .button {
        background-color: #ffffff;
        color: #000000;
      }
    }
    
  • Optimisez les images pour les deux modes. Utilisez des PNG transparents ou des SVG lorsque c’est possible. Pour les images d’arrière-plan, testez la lisibilité dans les thèmes clair et sombre.
  • Évitez les doubles inversions. Certaines versions d’Android et d’iOS peuvent ajuster automatiquement les couleurs. L’utilisation de styles en mode sombre explicites aide à empêcher votre thème sombre personnalisé d’être inversé à nouveau par le système d’exploitation.
  • Prévisualisez dans les deux modes. Utilisez les thèmes sombre et clair de votre application pour vérifier que le texte, les boutons et les arrière-plans ont suffisamment de contraste et restent accessibles.
Testez sur toutes les plateformes. Android WebView, iOS WKWebView et les builds web gèrent le mode sombre différemment. Prévisualisez toujours votre message in-app dans les deux thèmes avant de publier.

Intégrer des vidéos

Vous pouvez intégrer des vidéos (par ex., YouTube, Vimeo) directement dans vos messages in-app en utilisant <iframe>. Ceci est utile pour les démos, les promos ou les flux d’intégration. La plupart des navigateurs n’autorisent la lecture automatique que si la vidéo démarre en sourdine, incluez donc toujours &mute=1 dans l’URL d’intégration.
La lecture automatique de vidéo peut impacter les performances. Gardez les vidéos courtes et évitez plusieurs intégrations en lecture automatique dans un seul in-app.

Exemple : Intégration YouTube en lecture automatique

L’extrait ci-dessous montre comment centrer une vidéo YouTube au milieu de l’in-app avec une taille fixe (560×315) :
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <style>
      body {
        margin: 0;
        height: 100vh;
        display: flex;
        justify-content: center; /* center horizontally */
        align-items: center;     /* center vertically */
        background: #f0f0f0;     /* optional background */
      }
      .video-box {
        width: 560px;  /* fixed width */
        height: 315px; /* fixed height (16:9 ratio) */
        box-shadow: 0 4px 12px rgba(0,0,0,0.2);
        border-radius: 8px;
        overflow: hidden;
        background: #000;
      }
      .video-box iframe {
        width: 100%;
        height: 100%;
        border: none;
      }
    </style>
  </head>
  <body>
    <div class="video-box">
      <iframe src="https://www.youtube.com/embed/bH60T1PZg1c?autoplay=1&mute=1"
        allow="autoplay; encrypted-media"
        allowfullscreen>
      </iframe>
    </div>
  </body>
</html>

Comprendre le comportement de lecture automatique

  • L’URL d’intégration (/embed/VIDEO_ID) est requise pour la lecture automatique — les liens watch?v= normaux ne fonctionneront pas.
  • L’ajout de ?autoplay=1&mute=1 garantit que la vidéo se lit automatiquement et respecte les règles de lecture automatique du navigateur.
  • L’attribut allow=“autoplay; encrypted-media” accorde la permission pour la lecture automatique.
  • Le .video-box utilise une taille fixe de 560×315px (16:9 par défaut de YouTube) pour que la vidéo apparaisse contenue au lieu de s’étirer en plein écran.
  • Le body est défini comme un conteneur flex avec justify-content: center et align-items: center pour positionner la boîte vidéo au milieu exact de l’écran.

Conseils de performance

  • Préférez le CSS critique en ligne ; différez les scripts lourds.
  • Optimisez les images (dimensionnées <img> avec object-fit), utilisez des formats modernes lorsque c’est possible.
  • Gardez les charges utiles HTML concises ; évitez les gros blobs base64.
  • Utilisez les polices système ou hébergez des polices web performantes avec font-display: swap.
  • Réduisez les tailles de fichiers et utilisez la résolution appropriée :

Testez sur tous les appareils

Envoyez fréquemment des messages de test pour confirmer le comportement et la mise en page sur différents types d’appareils. Consultez Trouver et définir des abonnements de test.

FAQ

Puis-je supprimer l’arrière-plan gris ou l’ombre portée des in-apps de style bannière ?

Oui. Pour les bannières en haut/bas, mettez à jour vos SDK et définissez : iOS 5.1.5+
<key>OneSignal_in_app_message_hide_drop_shadow</key>
<true/>
<key>OneSignal_in_app_message_hide_gray_overlay</key>
<true/>
Android 5.1.9+
<meta-data android:name="com.onesignal.inAppMessageHideGrayOverlay" android:value="true"/>
<meta-data android:name="com.onesignal.inAppMessageHideDropShadow" android:value="true"/>

Puis-je réutiliser des modèles in-app d’autres fournisseurs ?

Oui. Collez votre HTML dans l’éditeur et remplacez les analyses/actions par les méthodes JS in-app OneSignal.

Je n’ai pas de modèles. Comment puis-je commencer ?

Utilisez le modèle de démarrage fourni ou parcourez les modèles disponibles. Une certaine expérience HTML/CSS est recommandée.

Quelle version du SDK est requise ?

  • iOS : 3.9.0+
  • Android : 4.6.3+
Les SDK plus anciens reviendront au rendu Center Modal.

Les messages in-app fonctionnent-ils hors ligne ?

Non. Les messages nécessitent une connexion Internet active pour récupérer et afficher le contenu.