iOS SDK Integration Guide

Version applicable

Cet article concerne la version du SDK MTPush iOS : v3.0.0 et ultérieures.

Fichier de ressources

Nom du package : engagelab-ios-{numéro de version}

À partir de la version 4.3.3, le package .a ne sera plus fourni. Seuls les packages .xcframework seront proposés.

  • Dossier lib : contient mtpush-ios-x.x.x.xcframework, mtpush-extension-ios-x.x.x.xcframework. (Remarque : APNs n'est pas pris en charge sur les simulateurs).
  • Fichier README : instructions relatives au SDK
  • Dossier demo : exemples

Obtention des informations de l'application

Après la création d'une application sur la console, un AppKey est automatiquement généré pour identifier l'application.

Configuration du projet

Importer le SDK

Importation via Cocoapods

pod 'MTPush' Remarque : Si vous ne pouvez pas importer la dernière version, exécutez la commande pod repo update master pour mettre à jour la bibliothèque pod locale puis relancez pod 'MTPush'.
              
                  pod 'MTPush'

    Remarque : Si vous ne pouvez pas importer la dernière version, exécutez la commande pod repo update master pour mettre à jour la bibliothèque pod locale puis relancez pod 'MTPush'.

            
Afficher ce bloc de code dans la fenêtre flottante
  • Si vous devez installer une version spécifique, utilisez la méthode suivante (exemple avec MTPush 3.5.0) :
pod 'MTPush', '3.5.0'
              
                  pod 'MTPush', '3.5.0'

            
Afficher ce bloc de code dans la fenêtre flottante

Importation manuelle

  • Décompressez le package SDK, dans Xcode, sélectionnez "Add files to 'Nom de votre projet'...", et ajoutez mtpush-ios-x.x.x.xcframework à votre répertoire de projet.
  • Ajouter les Frameworks
    • CFNetwork.framework
    • CoreFoundation.framework
    • CoreTelephony.framework
    • SystemConfiguration.framework
    • CoreGraphics.framework
    • Foundation.framework
    • UIKit.framework
    • Security.framework
    • libz.tbd
    • UserNotifications.framework
    • libresolv.tbd
    • libsqlite3.tbd

Paramètres de compilation (Build Settings)

Si votre projet doit prendre en charge des systèmes d'exploitation iOS inférieurs à 7.0, veuillez aller dans Build Settings et désactiver l'option bitCode. Sinon, la compilation échouera.

  • Définissez les User Header Search Paths et Library Search Paths dans Search Paths. Par exemple, si le dossier SDK (par défaut lib) est au même niveau que le fichier projet, définissez ce paramètre sur $(SRCROOT)/{Nom du dossier contenant la bibliothèque statique}.

Capacités

Si vous développez avec Xcode 8 ou supérieur, activez l'option Capabilities->Push Notifications dans l'Application Target, comme illustré ici : 1.png
Si vous développez dans un environnement Xcode 10 ou supérieur, activez l'option Capabilities->Access WIFI Infomation sur votre Application Target.
image.png

Ajout d'un fichier d'en-tête

Ajoutez le code suivant à l'emplacement du fichier d'en-tête de référence AppDelegate.m.

// importer le fichier d'en-tête nécessaire pour la fonction MTPush #import "MTPushService.h" // iOS10 Enregistrer le fichier d'en-tête requis pour APNs #ifdef NSFoundationVersionNumber_iOS_9_x_Max #import <UserNotifications/UserNotifications.h> #endif // Fichiers d'en-tête à importer si vous souhaitez utiliser la fonctionnalité idfa (optionnel) #import <AdSupport/AdSupport.h>
              
              // importer le fichier d'en-tête nécessaire pour la fonction MTPush
#import "MTPushService.h"
// iOS10 Enregistrer le fichier d'en-tête requis pour APNs
#ifdef NSFoundationVersionNumber_iOS_9_x_Max
#import <UserNotifications/UserNotifications.h>
#endif
// Fichiers d'en-tête à importer si vous souhaitez utiliser la fonctionnalité idfa (optionnel)
#import <AdSupport/AdSupport.h>

            
Afficher ce bloc de code dans la fenêtre flottante

Ajouter le Delegate

Ajoutez un Delegate à l'AppDelegate. Référez-vous au code suivant :

@interface AppDelegate ()<MTPushRegisterDelegate> @end
              
              @interface AppDelegate ()<MTPushRegisterDelegate>

@end

            
Afficher ce bloc de code dans la fenêtre flottante

Ajouter le code d'initialisation

Ajouter le code d'initialisation APNs

Veuillez ajouter le code suivant à -(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

//Obligatoire MTPushRegisterEntity * entity = [[MTPushRegisterEntity alloc] init]; entity.types = MTPushAuthorizationOptionAlert|MTPushAuthorizationOptionSound|MTPushAuthorizationOptionProvidesAppNotificationSettings; if ([[UIDevice currentDevice].systemVersion floatValue] >= 8.0) { // Des personnalisations peuvent être ajoutées aux catégories // NSSet<UNNotificationCategory *> *categories pour iOS10 ou ultérieur // NSSet<UIUserNotificationCategory *> *categories pour iOS8 et iOS9 } [MTPushService registerForRemoteNotificationConfig:entity delegate:self];
              
                //Obligatoire
 
    MTPushRegisterEntity * entity = [[MTPushRegisterEntity alloc] init];
  entity.types = MTPushAuthorizationOptionAlert|MTPushAuthorizationOptionSound|MTPushAuthorizationOptionProvidesAppNotificationSettings;
  if ([[UIDevice currentDevice].systemVersion floatValue] >= 8.0) {
    // Des personnalisations peuvent être ajoutées aux catégories
    // NSSet<UNNotificationCategory *> *categories pour iOS10 ou ultérieur
    // NSSet<UIUserNotificationCategory *> *categories pour iOS8 et iOS9
  }
  [MTPushService registerForRemoteNotificationConfig:entity delegate:self];

            
Afficher ce bloc de code dans la fenêtre flottante

Ajouter le code d'initialisation MTPush

Veuillez ajouter le code suivant à -(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

// Optionnel // Obtenir l'IDFA // Pour utiliser la fonction IDFA, ajoutez ce code et renseignez le paramètre advertisingIdentifier pour la méthode d'initialisation NSString *advertisingId = [[[ASIdentifierManager sharedManager] advertisingIdentifier] UUIDString]; // Obligatoire // Initialiser Push [MTPushService setupWithOption:launchOptions appKey:appKey channel:channel apsForProduction:isProduction advertisingIdentifier:advertisingId];
              
              // Optionnel
// Obtenir l'IDFA
// Pour utiliser la fonction IDFA, ajoutez ce code et renseignez le paramètre advertisingIdentifier pour la méthode d'initialisation
NSString *advertisingId = [[[ASIdentifierManager sharedManager] advertisingIdentifier] UUIDString];

// Obligatoire
// Initialiser Push
[MTPushService setupWithOption:launchOptions appKey:appKey
                      channel:channel
             apsForProduction:isProduction
        advertisingIdentifier:advertisingId];

            
Afficher ce bloc de code dans la fenêtre flottante
Description des paramètres
  • appKey
    • Assurez-vous que l'appkey configuré dans l'application est identique à celui généré après la création de l'application sur la Console.
  • channel
    • Spécifiez le canal de téléchargement du package applicatif. Pour faciliter les statistiques par canal, vous pouvez définir la valeur spécifique vous-même, par exemple App Store.
  • apsForProduction
    • Ce paramètre identifie l'environnement du certificat APNs utilisé par l'application actuelle.
    • 0 (valeur par défaut) indique qu'un certificat de développement est utilisé, et 1 indique qu'un certificat de production est utilisé pour publier les applications.
    • Remarque : La valeur de ce champ doit être identique à l'environnement du certificat configuré dans Code Signing pour Build Settings.

APNs est enregistré avec succès et le DeviceToken est signalé.

Astuce : Vous pouvez vous connecter à EngageLab sans appeler cette méthode. Cependant, les notifications APNs ne seront pas disponibles, seules les messages personnalisés pourront être utilisés.

Implémentez la méthode de rappel dans AppDelegate.m et ajoutez le code dans la méthode de rappel :

- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken { /// Obligatoire - DeviceToken enregistré [MTPushService registerDeviceToken:deviceToken]; }
              
              - (void)application:(UIApplication *)application
didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {

  /// Obligatoire - DeviceToken enregistré
  [MTPushService registerDeviceToken:deviceToken];
}

            
Afficher ce bloc de code dans la fenêtre flottante

Implémenter l'interface d'échec d'enregistrement APNs (Optionnel)

- (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error { //Optionnel NSLog(@"did Fail To Register For Remote Notifications With Error: %@", error); [MTPushService registerDeviceToken:deviceToken]; }
              
              - (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error {
  //Optionnel
  NSLog(@"did Fail To Register For Remote Notifications With Error: %@", error);
   [MTPushService registerDeviceToken:deviceToken];
}

            
Afficher ce bloc de code dans la fenêtre flottante

Ajouter une méthode de rappel pour gérer les notifications APNs

Implémentez la méthode de rappel dans AppDelegate.m et ajoutez le code dans la méthode de rappel :

#pragma mark- MTPushRegisterDelegate // Support iOS 12 - (void)mtpNotificationCenter:(UNUserNotificationCenter *)center openSettingsForNotification:(UNNotification *)notification{if (notification && [notification.request.trigger isKindOfClass:[UNPushNotificationTrigger class]]) {// Entrée directe dans l'application depuis l'interface de notification.}else{// Entrée dans l'application depuis l'interface des paramètres de notification.} } // Support iOS 10 - (void)mtpNotificationCenter:(UNUserNotificationCenter *)center willPresentNotification:(UNNotification *)notification withCompletionHandler:(void (^)(NSInteger))completionHandler { // Obligatoire NSDictionary * userInfo = notification.request.content.userInfo; if([notification.request.trigger isKindOfClass:[UNPushNotificationTrigger class]]) {[MTPushService handleRemoteNotification:userInfo]; } completionHandler(UNNotificationPresentationOptionAlert); // Pour exécuter cette méthode, choisissez d'alerter ou non l'utilisateur. Trois types sont disponibles : Badge, Son et alerte. } // Support iOS 10 - (void)mtpNotificationCenter:(UNUserNotificationCenter *)center didReceiveNotificationResponse:(UNNotificationResponse *)response withCompletionHandler:(void (^)())completionHandler { // Obligatoire NSDictionary * userInfo = response.notification.request.content.userInfo; if([response.notification.request.trigger isKindOfClass:[UNPushNotificationTrigger class]]) {[MTPushService handleRemoteNotification:userInfo]; } completionHandler(); // Le système exige l'exécution de cette méthode} - (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler { // Obligatoire, support iOS 7 [MTPushService handleRemoteNotification:userInfo]; completionHandler(UIBackgroundFetchResultNewData); } - (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo { // Obligatoire, pour les systèmes iOS 6 ou antérieurs [MTPushService handleRemoteNotification:userInfo]; }
              
              #pragma mark- MTPushRegisterDelegate

// Support iOS 12
- (void)mtpNotificationCenter:(UNUserNotificationCenter *)center openSettingsForNotification:(UNNotification *)notification{if (notification && [notification.request.trigger isKindOfClass:[UNPushNotificationTrigger class]]) {// Entrée directe dans l'application depuis l'interface de notification.}else{// Entrée dans l'application depuis l'interface des paramètres de notification.}
}

// Support iOS 10
- (void)mtpNotificationCenter:(UNUserNotificationCenter *)center willPresentNotification:(UNNotification *)notification withCompletionHandler:(void (^)(NSInteger))completionHandler {
  // Obligatoire
  NSDictionary * userInfo = notification.request.content.userInfo;
  if([notification.request.trigger isKindOfClass:[UNPushNotificationTrigger class]]) {[MTPushService handleRemoteNotification:userInfo];
  }
  completionHandler(UNNotificationPresentationOptionAlert); // Pour exécuter cette méthode, choisissez d'alerter ou non l'utilisateur. Trois types sont disponibles : Badge, Son et alerte.
}

// Support iOS 10
- (void)mtpNotificationCenter:(UNUserNotificationCenter *)center didReceiveNotificationResponse:(UNNotificationResponse *)response withCompletionHandler:(void (^)())completionHandler {
  // Obligatoire
  NSDictionary * userInfo = response.notification.request.content.userInfo;
  if([response.notification.request.trigger isKindOfClass:[UNPushNotificationTrigger class]]) {[MTPushService handleRemoteNotification:userInfo];
  }
  completionHandler();	// Le système exige l'exécution de cette méthode}

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler {

  // Obligatoire, support iOS 7
  [MTPushService handleRemoteNotification:userInfo];
  completionHandler(UIBackgroundFetchResultNewData);
}

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo {

  // Obligatoire, pour les systèmes iOS 6 ou antérieurs
  [MTPushService handleRemoteNotification:userInfo];
}

            
Afficher ce bloc de code dans la fenêtre flottante

Ajout d'une méthode de rappel pour gérer les messages personnalisés MTPush

Pour utiliser la fonctionnalité de message personnalisé de MTPush, consultez le 【Guide API iOS】 pour implémenter les callbacks de traitement des messages personnalisés.

Exécution réussie

Déboguez le projet. Si la console affiche le log suivant, l'intégration a réussi.

2016-08-19 17:12:12.745823 219b28[1443:286814] | MTP | I - [MTCORETcpEventController] ----- login result ----- uid:123456 registrationID:171976fa8a8620a14a4 idc:0
              
              2016-08-19 17:12:12.745823 219b28[1443:286814] | MTP | I - [MTCORETcpEventController] 
----- login result -----
uid:123456 
registrationID:171976fa8a8620a14a4 
idc:0

            
Afficher ce bloc de code dans la fenêtre flottante

Si vous rencontrez des problèmes lors du débogage, veuillez vous référer au 【Guide de débogage SDK iOS】.

Fonctionnalités avancées

Écoute des événements liés au SDK MTPush

Il est recommandé que les développeurs incluent les types de notifications suivants fournis dans l'API :

extern NSString *const kMTCNetworkIsConnectingNotification; // Connexion en cours
extern NSString * const kMTCNetworkDidSetupNotification; // Connexion établie
extern NSString * const kMTCNetworkDidCloseNotification; // Connexion fermée
extern NSString * const kMTCNetworkDidRegisterNotification; // Enregistrement réussi
extern NSString *const kMTCNetworkFailedRegisterNotification; // Échec de l'enregistrement
extern NSString * const kMTCNetworkDidLoginNotification; // Connexion réussie

Conseil : Ajoutez et enregistrez la méthode de notification kMTCNetworkDidLoginNotification et récupérez l'identifiant d'enregistrement dans cette méthode, ou utilisez la méthode registrationIDCompletionHandler: pour l'obtenir via le completionHandler.

extern NSString * const kMTCNetworkDidReceiveMessageNotification; // Message personnalisé reçu (non-APNS)
Le transfert de données kMTCNetworkDidReceiveMessageNotification peut être obtenu via userInfo dans NSNotification, incluant le titre, le contenu et les informations supplémentaires, etc. Veuillez consulter le document : API SDK iOS

Service de statistiques des notifications

Conseil : La Notification Service Extension est une nouvelle fonctionnalité d'iOS 10, contrôlée par le champ mutable-content. Si vous utilisez la console Web pour envoyer des notifications, cochez l'option mutable-content dans les paramètres optionnels. Si vous utilisez une API RESTFul pour envoyer, définissez le champ mutable-content à true.

Les développeurs peuvent utiliser le SDK Notification Service Extension pour signaler le statut de livraison de chaque message APNs. Remarque : Les données d'Impressions affichées sur la console EngageLab proviennent des données de livraison signalées ici.

alt text

Utilisation :

  • Créez un Service Extension. Pour plus de détails, voir iOS 10 Service Extension.
  • Importez le fichier mtpush-extension-ios-xxx.xcframework dans votre projet Service Extension.
  • Ajoutez les Frameworks : libz.tbd et libresolv.tbd.
  • Appelez [mtpushSetAppkey:] pour définir votre appkey. Veuillez noter que cet appkey doit être identique à celui de votre application EngageLab.
  • Appelez la méthode [mtpushReceiveNotificationRequest:] pour signaler votre apns, les statistiques sont alors prises en compte ; affichez l'apns dans le callback block de la méthode.

Pour des exemples d'utilisation plus précis, référez-vous au code Demo inclus dans le package zip de la version. Document de référence : API SDK iOS

Voip Push

  • Introduit dans iOS 8, le push Voip basé sur le framework PushKit permet à l'application de l'utilisateur de se réveiller et d'exécuter du code même lorsqu'elle est tuée.
  • Voip ne distingue pas les certificats de développement et de production. Les certificats Apple Push Notification service SSL (Sandbox & Production) et VoIP Services Certificate prennent en charge le push Voip.

Ajouter la bibliothèque PushKit.Framework

  • Ajoutez la bibliothèque PushKit.framework dans Xcode Build Phases - Link Binary With Libraries.
  • Importez le fichier d'en-tête #import <PushKit/PushKit.h>.
  • Implémentez le protocole PKPushRegistryDelegate dans AppDelegate.

Ajouter l'autorisation Voip

Dans Project->Capabilities->Background Modes, activez l'option Voice over IP.

Implémentation du code

  • Implémentez l'enregistrement Voip dans la méthode didFinishLaunchingWithOptions.
- (void)voipRegistration{ dispatch_queue_t mainQueue = dispatch_get_main_queue(); PKPushRegistry *voipRegistry = [[PKPushRegistry alloc] initWithQueue:mainQueue]; voipRegistry.delegate = self; // Définir le type de push sur VoIP voipRegistry.desiredPushTypes = [NSSet setWithObject:PKPushTypeVoIP]; }
              
              - (void)voipRegistration{
  dispatch_queue_t mainQueue = dispatch_get_main_queue();
  PKPushRegistry *voipRegistry = [[PKPushRegistry alloc] initWithQueue:mainQueue];
  voipRegistry.delegate = self;
  // Définir le type de push sur VoIP
  voipRegistry.desiredPushTypes = [NSSet setWithObject:PKPushTypeVoIP];
}

            
Afficher ce bloc de code dans la fenêtre flottante
  • Soumettre le Token
/// Le système retourne le VoipToken, à signaler au serveur EngageLab - (void)pushRegistry:(PKPushRegistry *)registry didUpdatePushCredentials:(PKPushCredentials *)pushCredentials forType:(PKPushType)type{ if (type == PKPushTypeVoIP) { [MTPushService registerVoipToken:pushCredentials.token]; } }
              
              /// Le système retourne le VoipToken, à signaler au serveur EngageLab
- (void)pushRegistry:(PKPushRegistry *)registry didUpdatePushCredentials:(PKPushCredentials *)pushCredentials forType:(PKPushType)type{
   if (type == PKPushTypeVoIP) {
    [MTPushService registerVoipToken:pushCredentials.token];
   }
}

            
Afficher ce bloc de code dans la fenêtre flottante
  • Lors de la réception d'un push Voip, appelez l'interface de réception pour compter les livraisons Voip.
- (void)pushRegistry:(PKPushRegistry *)registry didReceiveIncomingPushWithPayload:(PKPushPayload *)payload forType:(PKPushType)type{ if (type == PKPushTypeVoIP) { // Soumettre le reçu au serveur EngageLab [MTPushService handleVoipNotification:payload.dictionaryPayload]; } } - (void)pushRegistry:(PKPushRegistry *)registry didReceiveIncomingPushWithPayload:(PKPushPayload *)payload forType:(PKPushType)type withCompletionHandler:(void(^)(void))completion{ if (type == PKPushTypeVoIP) { // Soumettre le reçu au serveur EngageLab [MTPushService handleVoipNotification:payload.dictionaryPayload]; } }
              
              - (void)pushRegistry:(PKPushRegistry *)registry didReceiveIncomingPushWithPayload:(PKPushPayload *)payload forType:(PKPushType)type{
  if (type == PKPushTypeVoIP) {
    // Soumettre le reçu au serveur EngageLab
    [MTPushService handleVoipNotification:payload.dictionaryPayload];
  }
}

- (void)pushRegistry:(PKPushRegistry *)registry didReceiveIncomingPushWithPayload:(PKPushPayload *)payload forType:(PKPushType)type withCompletionHandler:(void(^)(void))completion{
   if (type == PKPushTypeVoIP) {
    // Soumettre le reçu au serveur EngageLab
    [MTPushService handleVoipNotification:payload.dictionaryPayload];
   }
}

            
Afficher ce bloc de code dans la fenêtre flottante

Support technique

En cas de problème lors de l'intégration

  • Veuillez lire attentivement la documentation pour vérifier s'il n'y a pas d'omissions.
  • Vous pouvez aller sur EngageLab pour rechercher une question similaire. Pour résoudre le problème plus rapidement, veuillez fournir les informations suivantes lors de votre demande d'aide :
    • Le produit pour lequel vous souhaitez consulter est MTPush, et si vous utilisez d'autres produits EngageLab.
    • Quelle API vous appelez, les paramètres transmis, le message d'erreur complet et le moment où l'exception s'est produite.
    • Si aucun message n'est reçu, fournissez l'Appkey de l'application, l'ID du message et l'ID d'enregistrement de l'appareil.
    • Si le problème est causé par le SDK, veuillez fournir la version du SDK concernée ainsi que les logs complets. Téléchargez les informations de logs au format TXT.
    • Si l'appareil défectueux est sous iOS, veuillez fournir le modèle et le système précis.
icon
Contactez-nous