Connect the app's miles® SDK to all of your app's features to start driving your users and build retention.

Work In Progress

I. Connection

1. Onboarding

Skip to the Connect section if you intend to have everyone participate in the program by default


The first thing that the user will see when clicking on the app's miles banner is the onboarding.

This onboarding has two purposes:

Onboarding choices

There are up to 3 buttons on the onboarding, and you must attach a listener in order to redirect the user depending on their input.

The input of the user will affect the variable OPT_IN in the following way: (default: APM_DEVICE_OPT_IN_NOT_SET)

Example with MainPage

public partial class MainPage : ContentPage
    //Declare a object of APMOnboardingUtils in your class
    private APMOnboardingUtils mOnboardingUtils;
    public MainPage()
        mOnboardingUtils = new APMOnboardingUtils(delegate () {
            // User clicked "OK" -> "I want to participate".
            // TODO: If user not connected, redirect to login/create-account page.
            // Nothing to do if user connected
            if (clientAccountConnected) //TODO: check if account client is connected
                //Account client is connected
                Dictionary<string, object> user = APM.GetUser();
                if (user != null && user["userToken"] != null && !user["userToken"].Equals(""))
                    //Client account connected and app's miles account connected
                    Debug.WriteLine("Client account connected and app's miles account connected");
                    //Client account connected --> need to connect app's miles account
                    Debug.WriteLine("Client account connected --> need to connect app's miles account");
                //TODO: show screen login/create account
        }, delegate () {
            // User clicked "Later" -> "I'll decide later".
            // The SDK will continue showing the onboarding when clicking the banner
            // Nothing to do here in general
        }, delegate () {  
            // User clicked "Never" => "Stop asking me, hide the banner"
            // Note: The user may change his mind, and it is recommended to have a button
            // that allows the user to get back in the program
            // TODO: (Optional) You can redirect to the page with that "Get back in the program" button
            // (with a little message saying "You can always change your mind by clicking this button")
        //Listen events of onboarding

Call unregister when the screen is in pause:

//Unlisten events of onboarding

2. Connect

In order to offer a seamless experience, app's miles doesn't have a login or create-account page. The login/create-account process for app's miles is parallel to yours.


This method can both connect and create an account:

  • If an app's miles account already exists with the given userID, the method signs them in.

  • If no account exists, the method will automatically create their account and sign them in.

This method needs : « email », « userID » and « optIn » « email » is the email of user « userID » is a unique identifier in your database – « optIn » is the RGPD OptIn

If you don’t want give the email, you can build a encrypted email with the userID: {userID}@{your-company-name}.com (e.g.

string userID = "demo-test";
string email = partnerClientId + "";
int optIn = APMServicesConfig.APM_DEVICE_OPT_IN_ACCEPT();
APMUIServicesUser.UserClientConnect(email, userID, optIn, delegate (Dictionary<string, Object> user) {
    Debug.WriteLine(" : " + user["email"]);
}, delegate (Dictionary<string, Object> error) {
    Debug.WriteLine("error.errorCode : " + error["errorCode"]);
    Debug.WriteLine("error.errorMsg : " + error["errorMsg"]);

3. Logout

The same way the login process is parallel to yours, so is the logout.

II. Tagging plan

1. Send an action

In order to reward the user for an action, you need to place triggers in your application. You will need to follow the Tagging plan that your marketing team created with us.

Be careful with the spelling, an extra character like a 's' will change the tag

Call the method triggerAction to send a tag

APM.TriggerAction("challenge1"); //challenge1 → actionName

Make sure to test each action by looking at the logs, especially for actions that are complex

2. Actions with properties

3. User properties

III. Advanced functions

1. Show/Hide badge

If you want to hide the badge on some screens


Don’t forget to re-show badge after hiding


2. Activate debug logs

3. User listener

Last updated