SDK's voor campagnes integreren met uw app integrate-campaign-sdk
Met de SDK's voor campagnes voor iOS en Android kunt u de integratie van uw mobiele toepassing in het Adobe Campaign-platform vergemakkelijken.
Android en iOS steunden versies, en de compatibele versies van SDKs van de Campagne voor Campagne v8 zijn vermeld in de matrijs van de Verenigbaarheid.
Als beheerder van de Campagne, kunt u Campagne SDKs van de Distributie van de Software van het Experience Cloud downloaden. Voor meer informatie, contacteer š de Zorg van de Klant van de Adobe .
Integratie-instellingen declareren declaring-integration-settings
Als u de campagne-SDK wilt integreren in de mobiele toepassing, moet de functionele beheerder de ontwikkelaar de volgende informatie geven:
-
een integratiesleutel: om het platform van Adobe Campaign toe te laten om de mobiele toepassing te identificeren.
note note NOTE Deze integratietoets wordt ingevoerd in de Adobe Campaign-console, op het tabblad Information van de service die is toegewezen aan de mobiele toepassing. -
het volgen URL van A: die het adres van de het volgen van Adobe Campaign server aanpast.
-
A marketing URL: om de inzameling van abonnementen toe te laten.
-
in Android:
code language-sql Neolane.getInstance().setIntegrationKey("your Adobe mobile app integration key"); Neolane.getInstance().setMarketingHost("https://yourMarketingHost:yourMarketingPort/"); Neolane.getInstance().setTrackingHost("https://yourTrackingHost:yourTrackingPort/");
-
in iOS:
code language-sql Neolane_SDK *nl = [Neolane_SDK getInstance]; [nl setMarketingHost:strMktHost]; [nl setTrackingHost:strTckHost]; [nl setIntegrationKey:strIntegrationKey];
Android SDK integreren
Android SDK is een jar-bibliotheek geschreven in JAVA. Hiermee kunnen Android-ontwikkelaars integreren met Adobe Campaign: een nieuw apparaat registreren, het apparaat koppelen aan een gebruiker, gedrag bijhouden en nog veel meer.
In deze sectie, leer hoe te om de SDK van Android in een toepassing te gebruiken die van Android het Overseinen van de Wolk van de Wolk van Google uitvoeren (FCM).
FCM configureren
Als u de pushmelding op Android wilt gebruiken, hebt u een FCM-account nodig, configureert u uw Android-toepassing om uw melding te ontvangen en koppelt u uw toepassing aan de FCM-account. Leer meer in Documentatie van Google.
Verwijs naar Documentatie van Googleom Vuurbasis aan uw project van Android toe te voegen.
Leer hoe te om FCM in uw toepassing in documentatie van Google uit te voeren.
-
Vergeet niet google-services.json aan uw project te downloaden en toe te voegen.
-
De
apiKey
moet overeenkomen met deprojectKey
-set in de Adobe Campaign Mobile-toepassing die aan deze Android-toepassing is gekoppeld.
Android SDK configureren
-
initialiseer SDK
Voordat u de SDK van Android kunt gebruiken, moet u deze initialiseren. De SDK-initialisatie kan worden uitgevoerd in de functie
onCreate
van een activiteit.code language-sql /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // initialize Campaign SDK SharedPreferences settings = getSharedPreferences(YourApplicationActivity.APPLICATION_PREF_NAME, Context.MODE_PRIVATE); Neolane.getInstance().setIntegrationKey(settings.getString(YourApplicationActivity.APPUUID_NAME, YourApplicationActivity.DFT_APPUUID)); Neolane.getInstance().setMarketingHost(settings.getString(YourApplicationActivity.SOAPRT_NAME, YourApplicationActivity.DFT_SOAPRT)); Neolane.getInstance().setTrackingHost(settings.getString(YourApplicationActivity.TRACKRT_NAME, YourApplicationActivity.DFT_TRACKRT)); ... }
De
IntegrationKey
moet overeenkomen met de 'IntegrationKey' die is ingesteld in de Adobe Campaign Mobile-toepassing die is gekoppeld aan deze Android-toepassing. -
Registreer het mobiele apparaat aan de server van Adobe Campaign
Met de registratiefunctie kunt u:
- Stuur de bericht-id of push-id (deviceToken voor iOS en registrationID voor Android) naar Adobe Campaign.
- de afstemmingssleutel of de gebruikersnaam herstellen (bijvoorbeeld e-mail- of accountnummer)
U moet uw apparaat registreren bij Adobe Campaign, bij de initialisatie van de app of bij actie van de gebruiker. Dit kan eenvoudig worden gedaan met de methode
registerDevice
.code language-sql public void onClick(View v) { SharedPreferences settings = this.context.getSharedPreferences(YourApplicationActivity.APPLICATION_PREF_NAME, Context.MODE_PRIVATE); EditText mailEdit = (EditText) this.context.findViewById(R.id.editText1); final String FCMRegistrationId = FirebaseInstanceId.getInstance().getToken(); if (FCMRegistrationId != null) NeoTripActivity.registerOnNeolane(this.context, FCMRegistrationId, mailEdit.getText().toString()); }
YourApplicationActivity.java
code language-sql public static void registerOnNeolane(final Context ctx, String registrationId, String userKey) { NeolaneAsyncRunner neolaneAs = new NeolaneAsyncRunner(Neolane.getInstance()); // Additional Subscription Parameters Map<String,Object> additionnalParam = new HashMap<String, Object>(); additionnalParam.clear(); SharedPreferences settings = ctx.getSharedPreferences(YourApplicationActivity.APPLICATION_PREF_NAME, Context.MODE_PRIVATE); if (settings.getBoolean(YourApplicationActivity.SUBPARAMEN1_NAME, false)) { additionnalParam.put(settings.getString(YourApplicationActivity.SUBPARAMNAME1_NAME, "") , settings.getString(YourApplicationActivity.SUBPARAMVALUE1_NAME, "")); } if (settings.getBoolean(YourApplicationActivity.SUBPARAMEN2_NAME, false)) { additionnalParam.put(settings.getString(YourApplicationActivity.SUBPARAMNAME2_NAME, "") , settings.getString(YourApplicationActivity.SUBPARAMVALUE2_NAME, "")); } if ( additionnalParam.isEmpty() ) { additionnalParam = null; } // Campaign Registration neolaneAs.registerDevice(registrationId, userKey, additionnalParam, ctx, new RequestListener() { public void onComplete(String e, Object obj) { Intent upd = new Intent(); upd.setAction(BROADCAST_NEWREGISTER_ACTION); ctx.sendBroadcast(upd); } public void onNeolaneException(NeolaneException e, Object obj) { sendErrorMsg(e.getErrorString()); } public void onIOException(IOException e, Object obj) { sendErrorMsg(e.getMessage()); } public void sendErrorMsg(String err) { SharedPreferences.Editor edit = ctx.getSharedPreferences(YourApplicationActivity.APPLICATION_PREF_NAME, Context.MODE_PRIVATE).edit(); edit.putBoolean(YourApplicationActivity.REGISTRATION_ERROR_NEOLANE_KEYNAME, true); edit.commit(); Intent toast = new Intent(); toast.setAction(BROADCAST_TOAST_DISPLAY_TEXT); toast.putExtra("text", "An error happened, please register again (" + err + ")"); ctx.sendBroadcast(toast); } }); }
-
waarschuwen Campagne wanneer het mobiele apparatenteken van de gebruiker verandert
We raden u aan de functie
registerDevice
te gebruiken wanneer u de functieonTokenRefresh
aanroept om Adobe Campaign op de hoogte te stellen van de wijziging in het token voor mobiele apparaten van de gebruiker.Bijvoorbeeld:
YourApplicationFirebaseInstanceIDService.java
code language-sql package com.android.YourApplication; import android.content.Context; import android.content.SharedPreferences; import android.util.Log; import com.google.firebase.iid.FirebaseInstanceId; import com.google.firebase.iid.FirebaseInstanceIdService; import static android.content.SharedPreferences.*; public class YourApplicationFirebaseInstanceIDService extends FirebaseInstanceIdService { @Override public void onTokenRefresh() { SharedPreferences settings = getSharedPreferences(YourApplicationActivity.APPLICATION_PREF_NAME, Context.MODE_PRIVATE); if (!settings.getBoolean(YourApplicationActivity.USE_GCM, false)) { String refreshedToken = FirebaseInstanceId.getInstance().getToken(); String userKey = settings.getString(YourApplicationActivity.USERKEY_NAME, ""); Editor edit = settings.edit(); edit.putString(YourApplicationActivity.FCM_REGISTRATIONID_NAME, refreshedToken); edit.commit(); YourApplicationActivity.registerOnNeolane(this, refreshedToken, userKey); } } }
-
vormt de Dienst van het Overseinen van de Vuurbasis
Breid
FirebaseMessagingService
inonMessageReceived
callback uit om berichten te ontvangen. We raden u aan de functienotifyReceive
aan te roepen wanneer de callback vanonMessageReceived
wordt aangeroepen om het bijhouden van de berichtontvangst op het mobiele apparaat mogelijk te maken. In Adobe Campaign wordt dit genoemd druk bericht: deze functie zou moeten worden geroepen enkel alvorens OS te verzoeken om het bericht te tonen.YourApplicationMessagingService.java
code language-sql package com.android.YourApplication; import android.content.Context; import android.content.SharedPreferences; import android.os.Bundle; import android.util.Log; import com.google.firebase.messaging.FirebaseMessagingService; import com.google.firebase.messaging.RemoteMessage; import java.util.Iterator; import java.util.Map; import java.util.Map.Entry; public class YourApplicationFirebaseMessagingService extends FirebaseMessagingService { private static final String TAG = "MyFirebaseMsgService"; @Override public void onMessageReceived(RemoteMessage message) { Log.d(TAG, "Receive message from: " + message.getFrom()); Map<String,String> payloadData = message.getData(); final Bundle extras = new Bundle(); final Iterator<Entry<String, String>> iter = payloadData.entrySet().iterator(); while(iter.hasNext()) { final Entry<String, String> entry =iter.next(); extras.putString(entry.getKey(), entry.getValue()); } SharedPreferences settings = this.getSharedPreferences(YourApplicationActivity.APPLICATION_PREF_NAME, Context.MODE_PRIVATE); String mesg = payloadData.get("_msg"); String title = payloadData.get("title"); String url = payloadData.get("url"); String messageId = payloadData.get("_mId"); String deliveryId = payloadData.get("_dId"); YourApplicationActivity.handleNotification(this, mesg, title, url, messageId, deliveryId, extras); } }
code language-sql public static void handleNotification(Context context, String message, String title, String url, String messageId, String deliveryId, Bundle extras) { if( message == null ) message = "No Content"; if( title == null ) title = "No title"; if( url == null ) url = "http://www.tripadvisor.fr"; int iconId = R.drawable.notif_neotrip; // notify Adobe Campaign that a notification just arrived SharedPreferences settings = context.getSharedPreferences(NeoTripActivity.APPLICATION_PREF_NAME, Context.MODE_PRIVATE); Neolane.getInstance().setIntegrationKey(settings.getString(NeoTripActivity.APPUUID_NAME, NeoTripActivity.DFT_APPUUID)); Neolane.getInstance().setMarketingHost(settings.getString(NeoTripActivity.SOAPRT_NAME, NeoTripActivity.DFT_SOAPRT)); Neolane.getInstance().setTrackingHost(settings.getString(NeoTripActivity.TRACKRT_NAME, NeoTripActivity.DFT_TRACKRT)); NeolaneAsyncRunner nas = new NeolaneAsyncRunner(Neolane.getInstance()); nas.notifyReceive(messageId, deliveryId, new NeolaneAsyncRunner.RequestListener() { public void onNeolaneException(NeolaneException arg0, Object arg1) {} public void onIOException(IOException arg0, Object arg1) {} public void onComplete(String arg0, Object arg1){} }); if (yourApplication.isActivityVisible()) { Log.i("INFO", "The application has the focus" ); ... } else { // notification creation NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); Notification notification; // Activity to start Intent notifIntent = new Intent(context.getApplicationContext(), NotificationActivity.class); notifIntent.putExtra("notificationText", message); notifIntent.putExtra(NotificationActivity.NOTIFICATION_URL_KEYNAME, url); notifIntent.putExtra("_dId", deliveryId); notifIntent.putExtra("_mId", messageId); notifIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); PendingIntent contentIntent = PendingIntent.getActivity(context, 1, notifIntent, PendingIntent.FLAG_UPDATE_CURRENT); notification = new Notification.Builder(context) .setContentTitle(title) .setContentText(message) .setSmallIcon(iconId) .setContentIntent(contentIntent) .build(); // launch the notification notification.flags |= Notification.FLAG_AUTO_CANCEL; notificationManager.notify(1234, notification); } }
-
Spoor opent van gegevensberichten
Voor gegevensberichten kunt u met de functie
notifyOpening
bijhouden wanneer een gebruiker op een melding klikt om het bericht te openen. De berichtactiviteit zal worden gecreeerd wanneer de gebruiker op het bericht (gecreeerd tijdensonMessageReceived
functievraag) kliktcode language-sql public class NotificationActivity extends Activity { public void onCreate(Bundle savedBundle) { [...] Bundle extra = getIntent().getExtras(); if (extra != null) { // reinit the Campaign sdk SharedPreferences settings = getSharedPreferences(NeoTripActivity.APPLICATION_PREF_NAME, Context.MODE_PRIVATE); Neolane.getInstance().setIntegrationKey(settings.getString(NeoTripActivity.APPUUID_NAME, NeoTripActivity.DFT_APPUUID)); Neolane.getInstance().setMarketingHost(settings.getString(NeoTripActivity.SOAPRT_NAME, NeoTripActivity.DFT_SOAPRT)); Neolane.getInstance().setTrackingHost(settings.getString(NeoTripActivity.TRACKRT_NAME, NeoTripActivity.DFT_TRACKRT)); // Get the messageId and the deliveryId to perform tracking String deliveryId = extra.getString("_dId"); String messageId = extra.getString("_mId"); if (deliveryId != null && messageId != null) { try { Neolane.getInstance().notifyOpening(messageId, Integer.valueOf(deliveryId)); } catch (NeolaneException e) { // ... } catch (IOException e) { // ... } } } } }
-
Spoor opent en klikt op berichtberichten
Voor berichtberichten moet het openen/klikken het volgen met de functie
notifyOpening
binnen de toepassing lanceeractiviteit worden gedaan, zoals hieronder:code language-sql /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); SharedPreferences settings = getSharedPreferences(NeoTripActivity.APPLICATION_PREF_NAME, Context.MODE_PRIVATE); // initialize Campaign SDK Neolane.getInstance().setIntegrationKey(settings.getString(NeoTripActivity.APPUUID_NAME, NeoTripActivity.DFT_APPUUID)); Neolane.getInstance().setMarketingHost(settings.getString(NeoTripActivity.SOAPRT_NAME, NeoTripActivity.DFT_SOAPRT)); Neolane.getInstance().setTrackingHost(settings.getString(NeoTripActivity.TRACKRT_NAME, NeoTripActivity.DFT_TRACKRT)); ... ... ... // Manage opening/receive tracking of message notification Intent intent = getIntent(); Bundle data = intent.getExtras(); String messageId = null, deliveryId = null; if( data != null ) { if (data.containsKey("_mId")) messageId = data.get("_mId").toString(); if (data.containsKey("_dId")) deliveryId = data.get("_dId").toString(); if ( messageId != null && deliveryId != null) { Log.i(TAG, "Notify opening from backgroun click_action"); NeolaneAsyncRunner nas = new NeolaneAsyncRunner(Neolane.getInstance()); nas.notifyOpening(messageId, deliveryId, new NeolaneAsyncRunner.RequestListener() { public void onNeolaneException(NeolaneException arg0, Object arg1) { toastMessage( "error", getString(R.string.open_track_sdk_error) + arg0.getErrorCode()); } public void onIOException(IOException arg0, Object arg1) { toastMessage( "error", getString(R.string.open_track_io_error) + arg0.getLocalizedMessage()); } public void onComplete(String arg0, Object arg1) { toastMessage( "error", getString(R.string.open_track_ok)); } }); nas.notifyReceive(messageId, deliveryId, new NeolaneAsyncRunner.RequestListener() { public void onNeolaneException(NeolaneException arg0, Object arg1) { toastMessage( "error", getString(R.string.rec_track_sdk_error) + arg0.getErrorCode()); } public void onIOException(IOException arg0, Object arg1) { toastMessage( "error", getString(R.string.rec_track_io_error) + arg0.getLocalizedMessage()); } public void onComplete(String arg0, Object arg1) { toastMessage( "error", getString(R.string.rec_track_ok)); } }); } } }
note note NOTE Vergelijkbaar beheer moet worden uitgevoerd als de gebruiker de optie click_action
binnen de doelactiviteit gebruikt. -
ontvang het volgen voor gegevensberichten
Voor gegevensberichten, wordt het volgen ontvangen op het
onMessageReceived
vraagniveau. De functie notifyReceive moet worden aangeroepen.YourApplicationMessagingService.java
code language-sql package com.android.YourApplication; import android.content.Context; import android.content.SharedPreferences; import android.os.Bundle; import android.util.Log; import com.google.firebase.messaging.FirebaseMessagingService; import com.google.firebase.messaging.RemoteMessage; import java.util.Iterator; import java.util.Map; import java.util.Map.Entry; public class YourApplicationFirebaseMessagingService extends FirebaseMessagingService { private static final String TAG = "MyFirebaseMsgService"; @Override public void onMessageReceived(RemoteMessage message) { Log.d(TAG, "Receive message from: " + message.getFrom()); Map<String,String> payloadData = message.getData(); final Bundle extras = new Bundle(); final Iterator<Entry<String, String>> iter = payloadData.entrySet().iterator(); while(iter.hasNext()) { final Entry<String, String> entry =iter.next(); extras.putString(entry.getKey(), entry.getValue()); } SharedPreferences settings = this.getSharedPreferences(YourApplicationActivity.APPLICATION_PREF_NAME, Context.MODE_PRIVATE); String mesg = payloadData.get("_msg"); String title = payloadData.get("title"); String url = payloadData.get("url"); String messageId = payloadData.get("_mId"); String deliveryId = payloadData.get("_dId"); YourApplicationActivity.handleNotification(this, mesg, title, url, messageId, deliveryId, extras); } }
code language-sql public static void handleNotification(Context context, String message, String title, String url, String messageId, String deliveryId, Bundle extras){ ..... ..... // notify Campaign that a notification just arrived SharedPreferences settings = context.getSharedPreferences(NeoTripActivity.APPLICATION_PREF_NAME, Context.MODE_PRIVATE); Neolane.getInstance().setIntegrationKey(settings.getString(NeoTripActivity.APPUUID_NAME, NeoTripActivity.DFT_APPUUID)); Neolane.getInstance().setMarketingHost(settings.getString(NeoTripActivity.SOAPRT_NAME, NeoTripActivity.DFT_SOAPRT)); Neolane.getInstance().setTrackingHost(settings.getString(NeoTripActivity.TRACKRT_NAME, NeoTripActivity.DFT_TRACKRT)); NeolaneAsyncRunner nas = new NeolaneAsyncRunner(Neolane.getInstance()); nas.notifyReceive(messageId, deliveryId, new NeolaneAsyncRunner.RequestListener() { public void onNeolaneException(NeolaneException arg0, Object arg1) {} public void onIOException(IOException arg0, Object arg1) {} public void onComplete(String arg0, Object arg1){} }); }
-
ontvang het volgen voor berichtberichten
Voor berichtberichten, moet de volgende ontvangst op twee niveau worden gevormd:
onMessageReceived
(toepassing niet op de achtergrond): de implementatie is uitgevoerd in de vorige sectieonCreate
van de lanceringsactiviteit (of de gerichte activiteit alsclick_action
functie wordt gebruikt.) (Toepassing niet op de achtergrond).
U dient dit op hetzelfde moment te doen als klikken op bijhouden of openen.
code language-sql /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); SharedPreferences settings = getSharedPreferences(NeoTripActivity.APPLICATION_PREF_NAME, Context.MODE_PRIVATE); // initialize Campaign SDK Neolane.getInstance().setIntegrationKey(settings.getString(NeoTripActivity.APPUUID_NAME, NeoTripActivity.DFT_APPUUID)); Neolane.getInstance().setMarketingHost(settings.getString(NeoTripActivity.SOAPRT_NAME, NeoTripActivity.DFT_SOAPRT)); Neolane.getInstance().setTrackingHost(settings.getString(NeoTripActivity.TRACKRT_NAME, NeoTripActivity.DFT_TRACKRT)); ... ... ... // Manage opening/receive tracking of message notification Intent intent = getIntent(); Bundle data = intent.getExtras(); String messageId = null, deliveryId = null; if( data != null ) { if (data.containsKey("_mId")) messageId = data.get("_mId").toString(); if (data.containsKey("_dId")) deliveryId = data.get("_dId").toString(); if ( messageId != null && deliveryId != null) { Log.i(TAG, "Notify opening from backgroun click_action"); NeolaneAsyncRunner nas = new NeolaneAsyncRunner(Neolane.getInstance()); nas.notifyOpening(messageId, deliveryId, new NeolaneAsyncRunner.RequestListener() { public void onNeolaneException(NeolaneException arg0, Object arg1) { toastMessage( "error", getString(R.string.open_track_sdk_error) + arg0.getErrorCode()); } public void onIOException(IOException arg0, Object arg1) { toastMessage( "error", getString(R.string.open_track_io_error) + arg0.getLocalizedMessage()); } public void onComplete(String arg0, Object arg1) { toastMessage( "error", getString(R.string.open_track_ok)); } }); nas.notifyReceive(messageId, deliveryId, new NeolaneAsyncRunner.RequestListener() { public void onNeolaneException(NeolaneException arg0, Object arg1) { toastMessage( "error", getString(R.string.rec_track_sdk_error) + arg0.getErrorCode()); } public void onIOException(IOException arg0, Object arg1) { toastMessage( "error", getString(R.string.rec_track_io_error) + arg0.getLocalizedMessage()); } public void onComplete(String arg0, Object arg1) { toastMessage( "error", getString(R.string.rec_track_ok)); } }); } } }
IOS SDK integreren
-
Registreer het mobiele apparaat aan de server van Adobe Campaign
Met de registratiefunctie kunt u:
- Stuur de bericht-id of push-id (deviceToken voor iOS en registrationID voor Android) naar Adobe Campaign.
- de afstemmingssleutel of de gebruikersnaam herstellen (bijvoorbeeld e-mail- of accountnummer)
code language-sql // Callback called on successful registration to the APNs - (void)application:(UIApplication*)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData*)deviceToken { // Pass the token to Adobe Campaign Neolane_SDK *nl = [Neolane_SDK getInstance]; [nl registerDevice:tokenString:self.userKey:dic]; }
-
laat het volgen functie toe
Met de functie Tekstspatiƫring kunt u bijhouden wanneer meldingen zijn geactiveerd (wordt geopend).
code language-sql (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)launchOptions fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler { if( launchOptions ) { // Retrieve notification parameters here ... // Track application opening Neolane_SDK *nl = [Neolane_SDK getInstance]; [nl track:launchOptions:NL_TRACK_CLICK]; } ... completionHandler(UIBackgroundFetchResultNoData); }
-
Stille bericht het volgen
Met iOS kunt u meldingen op de achtergrond verzenden, een melding of gegevens die rechtstreeks naar een mobiele toepassing worden verzonden zonder deze weer te geven. Met Adobe Campaign kun je ze volgen.
Volg het onderstaande voorbeeld om je melding op te volgen:
code language-sql // AppDelegate.m ... ... #import "AppDelegate.h" #import "Neolane_SDK.h" ... ... // Callback called when the application is already launched (whether the application is running foreground or background) - (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)launchOptions fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler { NSLog(@"IN didReceiveRemoteNotification:fetchCompletionHandler"); if (launchOptions) NSLog(@"IN launchOptions: %@", [launchOptions description]); NSLog(@"Application state: %ld", (long)application.applicationState); // Silent Notification (specific case, can use NL_TRACK_RECEIVE as the user does not have click/open the notification) if ([launchOptions[@"aps"][@"content-available"] intValue] == 1 ) { NSLog(@"Silent Push Notification"); ... ... //Call receive tracking Neolane_SDK *nl = [Neolane_SDK getInstance]; [nl track:launchOptions:NL_TRACK_RECEIVE]; completionHandler(UIBackgroundFetchResultNoData); //Do not show notification return; } ... ... completionHandler(UIBackgroundFetchResultNoData); }
-
vorm registratiestatus
Het afgevaardigde protocol staat u toe om het resultaat van de registerDevice vraag te krijgen en kan worden gebruikt om te weten als een fout tijdens registratie voorkwam.
Het registerDeviceStatus prototype is:
code language-sql - (void) registerDeviceStatus: (ACCRegisterDeviceStatus) status:(NSString *) errorReason;
-
Status staat u toe om te weten of een registratie slaagde of als een fout voorkwam.
-
ErrorReason voorziet u van meer informatie over de fouten die voorkwamen. Raadpleeg de onderstaande tabel voor meer informatie over beschikbare fouten en beschrijvingen.
table 0-row-3 1-row-3 2-row-3 3-row-3 4-row-3 5-row-3 6-row-3 layout-auto Status Beschrijving ErrorReason ACCRegisterDeviceStatusSuccess Registratie voltooid LEEG ACCRegisterDeviceStatusFailedMarketingServerHostnameEmpty De hostnaam van de ACC-marketingserver is leeg of niet ingesteld. LEEG ACCRegisterDeviceStatusFailedIntegrationKeyEmpty De integratietoets is leeg of niet ingesteld. LEEG ACCRegisterDeviceStatusFailedConnectionIssue Verbindingsprobleem met ACC Meer informatie (in huidige taal van besturingssysteem) ACCRegisterDeviceStatusFailedUnknownUID De opgegeven UUID (integratiesleutel) is onbekend. LEEG ACCRegisterDeviceStatusFailedUnexpectedError Onverwachte fout die aan server ACC is teruggekeerd. The error message returned to ACC. Neolane_SDKDelegate protocol en registerDeviceStatus gedelegeerd definitie is als volgt:
code language-sql // Neolane_SDK.h // Campaign SDK .. .. // Register Device Status Enum typedef NS_ENUM(NSUInteger, ACCRegisterDeviceStatus) { ACCRegisterDeviceStatusSuccess, // Resistration Succeed ACCRegisterDeviceStatusFailureMarketingServerHostnameEmpty, // The Campaign marketing server hostname is Empty or not set ACCRegisterDeviceStatusFailureIntegrationKeyEmpty, // The integration key is empty or not set ACCRegisterDeviceStatusFailureConnectionIssue, // Connection issue with Campaign, more information in errorReason ACCRegisterDeviceStatusFailureUnknownUUID, // The provided UUID (integration key) is unknown ACCRegisterDeviceStatusFailureUnexpectedError // Unexpected error returned by Campaign server, more information in errorReason }; // define the protocol for the registerDeviceStatus delegate @protocol Neolane_SDKDelegate <NSObject> @optional - (void) registerDeviceStatus: (ACCRegisterDeviceStatus) status:(NSString *) errorReason; @end @interface Neolane_SDK: NSObject { } ... ... // registerDeviceStatus delegate @property (nonatomic, weak) id <Neolane_SDKDelegate> delegate; ... ... @end
Om registerDeviceStatus afgevaardigde uit te voeren, volg deze stappen:
-
Voer setDelegate tijdens de initialisering van SDK uit.
code language-sql // AppDelegate.m ... ... - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { ... ... // Get the stored settings NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; NSString *strMktHost = [defaults objectForKey:@"mktHost"]; NSString *strTckHost = [defaults objectForKey:@"tckHost"]; NSString *strIntegrationKey = [defaults objectForKey:@"integrationKey"]; userKey = [defaults objectForKey:@"userKey"]; // Configure Campaign SDK on first launch Neolane_SDK *nl = [Neolane_SDK getInstance]; [nl setMarketingHost:strMktHost]; [nl setTrackingHost:strTckHost]; [nl setIntegrationKey:strIntegrationKey]; [nl setDelegate:self]; // HERE ... ... }
-
Voeg het protocol in toe@interface van uw klasse.
code language-sql // AppDelegate.h #import <UIKit/UIKit.h> #import <CoreLocation/CoreLocation.h> #import "Neolane_SDK.h" @class LandingPageViewController; @interface AppDelegate: UIResponder <UIApplicationDelegate, CLLocationManagerDelegate, Neolane_SDKDelegate> { CLLocationManager *locationManager; NSString *userKey; NSString *mktServerUrl; NSString *tckServerUrl; NSString *homeURL; NSString *strLandingPageUrl; NSTimer *timer; }
-
Voer de afgevaardigde in AppDelegate uit.
code language-sql // AppDelegate.m #import "AppDelegate.h" #import "Neolane_SDK.h" #import "LandingPageViewController.h" #import "RootViewController.h" ... ... - (void) registerDeviceStatus: (ACCRegisterDeviceStatus) status:(NSString *) errorReason { NSLog(@"registerStatus: %lu",status); if ( errorReason != nil ) NSLog(@"errorReason: %@",errorReason); if( status == ACCRegisterDeviceStatusSuccess ) { // Registration successful ... ... } else { // An error occurred NSString *message; switch ( status ){ case ACCRegisterDeviceStatusFailureUnknownUUID: message = @"Unkown IntegrationKey (UUID)"; break; case ACCRegisterDeviceStatusFailureMarketingServerHostnameEmpty: message = @"Marketing URL not set or Empty"; break; case ACCRegisterDeviceStatusFailureIntegrationKeyEmpty: message = @"Integration Key not set or empty"; break; case ACCRegisterDeviceStatusFailureConnectionIssue: message = [NSString stringWithFormat:@"%@ %@",@"Connection issue:",errorReason]; break; case ACCRegisterDeviceStatusFailureUnexpectedError: default: message = [NSString stringWithFormat:@"%@ %@",@"Unexpected Error",errorReason]; break; } ... ... } } @end
-
Variabelen variables
Met de variabelen kunt u het gedrag van mobiele toepassingen definiƫren nadat u een melding hebt ontvangen. Deze variabelen moeten worden gedefinieerd in de mobiele toepassingscode en in de Adobe Campaign-clientconsole, op het tabblad Variables in de toegewezen mobiele toepassing.
Hieronder ziet u een voorbeeld van een code waarmee een mobiele toepassing toegevoegde variabelen in een melding kan verzamelen. In ons voorbeeld gebruiken we de variabele "VAR".
-
in Android:
code language-sql public void onReceive(Context context, Intent intent) { ... String event = intent.getStringExtra("VAR"); ... }
-
in iOS:
code language-sql - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { .... if( launchOptions ) { // When application is not already launched, the notification data if any are stored in the key 'UIApplicationLaunchOptionsRemoteNotificationKey' NSDictionary *localLaunchOptions = [launchOptions objectForKey:@"UIApplicationLaunchOptionsRemoteNotificationKey"]; if( localLaunchOptions ) { ... [localLaunchOptions objectForKey:@"VAR"]; ... } } } // Callback called when the application is already launched (whether the application is running foreground or background) - (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)launchOptions { if( launchOptions ) { ... [launchOptions objectForKey:@"VAR"]; } }
Meldingsservice-extensie notification-service-extension
voor iOS
De media moeten worden gedownload op het niveau van de berichtdienst uitbreiding.
#import "NotificationService.h"
@interface NotificationService ()
@property (nonatomic, strong) void (^contentHandler)(UNNotificationContent *contentToDeliver);
@property (nonatomic, strong) UNMutableNotificationContent *bestAttemptContent;
@end
@implementation NotificationService
- (void)didReceiveNotificationRequest:(UNNotificationRequest *)request withContentHandler:(void (^)(UNNotificationContent * _Nonnull))contentHandler {
NSDictionary *userInfo = nil;
NSString *url = nil;
self.contentHandler = contentHandler;
self.bestAttemptContent = [request.content mutableCopy];
userInfo = request.content.userInfo;
if ( userInfo != nil )
{
url = userInfo[@"mediaUrl"]; // Get the url of the media to download (Adobe Campaign additional variable)
}
...
// Perform the download to local storage
Extensie meldingsinhoud notification-content-extension
voor iOS
Op dit niveau moet u:
-
Wijs de extensie van de inhoud toe aan de categorie die door Adobe Campaign is verzonden:
Als u uw mobiele toepassing een beeld wilt tonen, kunt u de categoriewaarde aan "beeld"in Adobe Campaign en in uw mobiele toepassing plaatsen, creeert u een berichtuitbreiding met de parameter 0} UNNotificationExtensionCategory die aan "beeld"wordt geplaatst. Wanneer het pushbericht op het apparaat wordt ontvangen, wordt de extensie aangeroepen op basis van de gedefinieerde categoriewaarde.
-
De lay-out voor uw melding definiƫren
U moet een lay-out definiƫren met de relevante widgets. Voor een beeld, wordt widget genoemd UIImageView.
-
Uw media weergeven
U moet code toevoegen om de mediagegevens aan de widget te kunnen doorgeven. Hier volgt een voorbeeld van code voor een afbeelding:
code language-sql #import "NotificationViewController.h" #import <UserNotifications/UserNotifications.h> #import <UserNotificationsUI/UserNotificationsUI.h> @interface NotificationViewController () <UNNotificationContentExtension> @property (strong, nonatomic) IBOutlet UIImageView *imageView; @property (strong, nonatomic) IBOutlet UILabel *notifContent; @property (strong, nonatomic) IBOutlet UILabel *label; @end @implementation NotificationViewController - (void)viewDidLoad { [super viewDidLoad]; // Do any required interface initialization here. } - (void)didReceiveNotification:(UNNotification *)notification { self.label.text = notification.request.content.title; self.notifContent.text = notification.request.content.body; UNNotificationAttachment *attachment = [notification.request.content.attachments objectAtIndex:0]; if ([attachment.URL startAccessingSecurityScopedResource]) { NSData * imageData = [[NSData alloc] initWithContentsOfURL:attachment.URL]; self.imageView.image =[UIImage imageWithData: imageData]; [attachment.URL stopAccessingSecurityScopedResource]; } } @end