Procedure di aggiornamentoUpgrade procedures

Se è già stata eseguita l'integrazione di una versione precedente dell'SDK nell'applicazione, sarà necessario tenere in considerazione gli aspetti seguenti durante l'aggiornamento dell'SDK.If you already have integrated an older version of our SDK into your application, you have to consider the following points when upgrading the SDK.

Se non sono state applicate alcune versioni dell'SDK, potrebbe essere necessario eseguire più procedure.You may have to follow several procedures if you missed several versions of the SDK. Se ad esempio si esegue la migrazione dalla versione 1.4.0 alla 1.6.0, sarà prima di tutto necessario eseguire la procedura per la migrazione "dalla 1.4.0 alla 1.5.0" e quindi la procedura per la migrazione "dalla 1.5.0 alla 1.6.0".For example if you migrate from 1.4.0 to 1.6.0 you have to first follow the "from 1.4.0 to 1.5.0" procedure then the "from 1.5.0 to 1.6.0" procedure.

Indipendentemente dalla versione di partenza dell'aggiornamento, è necessario sostituire il file mobile-engagement-VERSION.jar con il nuovo file.Whatever the version you upgrade from, you have to replace the mobile-engagement-VERSION.jar with the new one.

Dalla versione 4.2.0 alla 4.2.1From 4.2.0 to 4.2.1

Questa operazione può essere svolta su qualsiasi versione dell'SDK. Si tratta di un miglioramento della protezione per l'integrazione delle attività di copertura.This step can actually be done on any version of the SDK, its a security improvement when you integrate Reach activities.

È ora necessario aggiungere exported="false" a tutte le attività di copertura.You should now add exported="false" to all Reach activities.

Le attività del servizio di copertura su AndroidManifest.xmlnon devono comparire come segue:Reach activities should now look like this on your AndroidManifest.xml:

        <activity android:name="com.microsoft.azure.engagement.reach.activity.EngagementTextAnnouncementActivity" android:theme="@android:style/Theme.Light" android:exported="false">
          <intent-filter>
            <action android:name="com.microsoft.azure.engagement.reach.intent.action.ANNOUNCEMENT"/>
            <category android:name="android.intent.category.DEFAULT" />
            <data android:mimeType="text/plain" />
          </intent-filter>
        </activity>
        <activity android:name="com.microsoft.azure.engagement.reach.activity.EngagementWebAnnouncementActivity" android:theme="@android:style/Theme.Light" android:exported="false">
          <intent-filter>
            <action android:name="com.microsoft.azure.engagement.reach.intent.action.ANNOUNCEMENT"/>
            <category android:name="android.intent.category.DEFAULT" />
            <data android:mimeType="text/html" />
          </intent-filter>
        </activity>
        <activity android:name="com.microsoft.azure.engagement.reach.activity.EngagementPollActivity" android:theme="@android:style/Theme.Light" android:exported="false">
          <intent-filter>
            <action android:name="com.microsoft.azure.engagement.reach.intent.action.POLL"/>
            <category android:name="android.intent.category.DEFAULT" />
          </intent-filter>
        </activity>
        <activity android:name="com.microsoft.azure.engagement.reach.activity.EngagementLoadingActivity" android:theme="@android:style/Theme.Dialog" android:exported="false">
          <intent-filter>
            <action android:name="com.microsoft.azure.engagement.reach.intent.action.LOADING"/>
            <category android:name="android.intent.category.DEFAULT"/>
          </intent-filter>
        </activity>

Dalla versione 4.0.0 alla 4.1.0From 4.0.0 to 4.1.0

L’SDK ora gestisce un nuovo modello di autorizzazione da Android M.The SDK now handle new permission model from Android M.

Se si utilizzano le funzionalità del percorso o le notifiche del quadro generale, leggere questa sezione.If you use location features or big picture notifications please read this section.

Oltre al nuovo modello di autorizzazione, ora è supportata la configurazione delle funzionalità del percorso al momento del runtime.In addition to the new permission model, we now support configuring location features at runtime. Esiste ancora la compatibilità con i parametri del manifesto per il percorso, ma è obsoleta.We are still compatible with the manifest parameters for location but it's now deprecated. Per utilizzare la configurazione del runtime, rimuovere le seguenti sezioni da AndroidManifest.xml:To use runtime configuration, remove the following sections from your AndroidManifest.xml:

<meta-data
  android:name="engagement:locationReport:lazyArea"
  android:value="true"/>
<meta-data
  android:name="engagement:locationReport:realTime"
  android:value="true"/>
<meta-data
  android:name="engagement:locationReport:realTime:background"
  android:value="true"/>
<meta-data
  android:name="engagement:locationReport:realTime:fine"
  android:value="true"/>

e leggere questa procedura aggiornata per utilizzare invece la configurazione del runtime.and read this updated procedure to use runtime configuration instead.

Dalla versione 3.0.0 alla 4.0.0From 3.0.0 to 4.0.0

Push nativoNative push

Il push nativo (GCM/ADM) viene ora usato anche per le notifiche in-app. È quindi necessario configurare le credenziali del push nativo per qualsiasi tipo di campagna push.Native push (GCM/ADM) is now also used for in app notifications so you must configure the native push credentials for any type of push campaign.

Se non è già stata eseguita, completare questa procedura.If not already done please follow this procedure.

AndroidManifest.xmlAndroidManifest.xml

L'integrazione con il servizio di copertura è stata modificata in AndroidManifest.xml.Reach integration has been modified in AndroidManifest.xml.

Sostituire:Replace this:

<receiver
  android:name="com.microsoft.azure.engagement.reach.EngagementReachReceiver"
  android:exported="false">
  <intent-filter>
    <action android:name="android.intent.action.BOOT_COMPLETED"/>
    <action android:name="com.microsoft.azure.engagement.intent.action.AGENT_CREATED"/>
    <action android:name="com.microsoft.azure.engagement.intent.action.MESSAGE"/>
    <action android:name="com.microsoft.azure.engagement.reach.intent.action.ACTION_NOTIFICATION"/>
    <action android:name="com.microsoft.azure.engagement.reach.intent.action.EXIT_NOTIFICATION"/>
    <action android:name="android.intent.action.DOWNLOAD_COMPLETE"/>
    <action android:name="com.microsoft.azure.engagement.reach.intent.action.DOWNLOAD_TIMEOUT"/>
  </intent-filter>
</receiver>

ConBy

<receiver
  android:name="com.microsoft.azure.engagement.reach.EngagementReachReceiver"
  android:exported="false">
  <intent-filter>
    <action android:name="android.intent.action.BOOT_COMPLETED"/>
    <action android:name="com.microsoft.azure.engagement.intent.action.AGENT_CREATED"/>
    <action android:name="com.microsoft.azure.engagement.intent.action.MESSAGE"/>
    <action android:name="com.microsoft.azure.engagement.reach.intent.action.ACTION_NOTIFICATION"/>
    <action android:name="com.microsoft.azure.engagement.reach.intent.action.EXIT_NOTIFICATION"/>
    <action android:name="com.microsoft.azure.engagement.reach.intent.action.DOWNLOAD_TIMEOUT"/>
  </intent-filter>
</receiver>
<receiver android:name="com.microsoft.azure.engagement.reach.EngagementReachDownloadReceiver">
  <intent-filter>
    <action android:name="android.intent.action.DOWNLOAD_COMPLETE"/>
  </intent-filter>
</receiver>

È ora possibile che venga visualizzata una schermata di caricamento quando si fa clic su un annuncio (con contenuto di tipo testo/Web) o un sondaggio.There is possibly a loading screen now when you click on an announcement (with text/web content) or a poll. L'aggiunta del codice seguente consente il funzionamento delle campagne in 4.0.0:You have to add this for those campaigns to work in 4.0.0:

<activity
  android:name="com.microsoft.azure.engagement.reach.activity.EngagementLoadingActivity"
  android:theme="@android:style/Theme.Dialog">
  <intent-filter>
    <action android:name="com.microsoft.azure.engagement.reach.intent.action.LOADING"/>
    <category android:name="android.intent.category.DEFAULT"/>
  </intent-filter>
</activity>

RisorseResources

Incorporare il nuovo file res/layout/engagement_loading.xml nel progetto.Embed the new res/layout/engagement_loading.xml file into your project.

Dalla versione 2.4.0 alla 3.0.0From 2.4.0 to 3.0.0

La sezione seguente illustra come eseguire la migrazione di un'integrazione dell'SDK dal servizio Capptain offerto da Capptain SAS a un'app basata su Azure Mobile Engagement.The following describes how to migrate an SDK integration from the Capptain service offered by Capptain SAS into an app powered by Azure Mobile Engagement. Se si esegue la migrazione da una versione precedente, visitare il sito Web di Capptain per eseguire prima la migrazione alla versione 2.4.0 e quindi applicare la procedura seguente.If you are migrating from an earlier version, please consult the Capptain web site to migrate to 2.4.0 first and then apply the following procedure.

Importante

Capptain e Mobile Engagement sono servizi diversi e la procedura seguente illustra solo come eseguire la migrazione dell'app client.Capptain and Mobile Engagement are not the same services, and the procedure given below only highlights how to migrate the client app. La migrazione dell'SDK nell'app NON comporta la migrazione dei dati dai server di Capptain ai server di Mobile Engagement.Migrating the SDK in the app will NOT migrate your data from the Capptain servers to the Mobile Engagement servers.

File JARJAR file

Sostituire capptain.jar con mobile-engagement-VERSION.jar nella cartella libs.Replace capptain.jar by mobile-engagement-VERSION.jar in your libs folder.

File di risorseResource files

Ogni file di risorse fornito (con prefisso capptain_) deve essere sostituito con i nuovi file (con prefisso engagement_).Every resource file that we provided (prefixed by capptain_) has to be replaced by the new ones (prefixed with engagement_).

Se i file sono stati personalizzati, è necessario applicare di nuovo la personalizzazione ai nuovi file e tutti gli identificatori dei file di risorse sono inoltre stati rinominati.If you customized those files, you have to re-apply your customization on the new files, all the identifiers in the resource files have also been renamed.

ID applicazioneApplication ID

Il servizio Engagement usa ora una stringa di connessione per configurare gli identificatori dell'SDK, ad esempio l'identificatore dell'applicazione.Now Engagement uses a connection string to configure the SDK identifiers such as the application identifier.

È necessario usare il metodo EngagementAgent.init nell'attività di avvio come indicato di seguito:You have to use EngagementAgent.init method in your launcher activity like this:

        EngagementConfiguration engagementConfiguration = new EngagementConfiguration();
        engagementConfiguration.setConnectionString("Endpoint={appCollection}.{domain};AppId={appId};SdkKey={sdkKey}");
        EngagementAgent.getInstance(this).init(engagementConfiguration);

La stringa di connessione per l'applicazione viene visualizzata nel portale di Azure.The connection string for your application is displayed on Azure Portal.

Rimuovere eventuali chiamate a CapptainAgent.configure poiché EngagementAgent.init sostituisce tale metodo.Please remove any call to CapptainAgent.configure as EngagementAgent.init replaces that method.

Non è più possibile configurare appId usando AndroidManifest.xml.The appId can no longer be configured using AndroidManifest.xml.

Rimuovere questa sezione da AndroidManifest.xml, se presente:Please remove this section from your AndroidManifest.xml if you have it:

        <meta-data android:name="capptain:appId" android:value="<YOUR_APPID>"/>

API JavaJava API

Ogni chiamata a classi Java dell'SDK deve essere rinominata. Ad esempio, CapptainAgent.getInstance(this) deve essere rinominata come EngagementAgent.getInstance(this), extends CapptainActivity come extends EngagementActivity e così via.Every call to any Java class of our SDK has to be renamed; for example, CapptainAgent.getInstance(this) must be renamed EngagementAgent.getInstance(this), extends CapptainActivity must be renamed extends EngagementActivity etc...

Se è stata eseguita l'integrazione con i file di preferenze agente predefiniti, il nome file predefinito è ora engagement.agent e la chiave è engagement:agent.If you were integrated with default agent preference files, the default file name is now engagement.agent and the key is engagement:agent.

Quando si creano annunci Web, il binder JavaScript è ora engagementReachContent.When creating web announcements, the Javascript binder is now engagementReachContent.

AndroidManifest.xmlAndroidManifest.xml

Sono state apportate numerose modifiche. Il servizio non è più condiviso e molti ricevitori non sono più esportabili.A lot of changes happened there, the service is not shared anymore, and a lot of receivers are not exportable anymore.

La dichiarazione del servizio è ora più semplice. Rimuovere il filtro Intent e tutti i metadati contenuti, quindi aggiungere exportable=false.The service declaration is now simpler; remove the intent filter and all meta-data inside it, and add exportable=false.

Tutti gli elementi sono stati inoltre rinominati per l'uso di Engagement.Plus everything is renamed to use engagement.

L'aspetto è analogo al seguente:It now looks like:

        <service
          android:name="com.microsoft.azure.engagement.service.EngagementService"
          android:exported="false"
          android:label="<Your application name>Service"
          android:process=":Engagement"/>

Per abilitare i log di test, è ora necessario spostare i metadati nel tag dell'applicazione e i metadati sono stati rinominati:When you want to enable test logs, the meta-data has now been moved to the application tag and has been renamed:

        <application>

          <meta-data android:name="engagement:log:test" android:value="true" />

          <service/>

        </application>

Sono stati rinominati tutti gli altri metadati, come illustrato nell'elenco completo seguente. È ovviamente necessario rinominare solo i file da usare:All other meta-data have just been renamed, here is the full list (of course rename only the ones you use):

        <meta-data
          android:name="engagement:reportCrash"
          android:value="true"/>
        <meta-data
          android:name="engagement:sessionTimeout"
          android:value="10000"/>
        <meta-data
          android:name="engagement:burstThreshold"
          android:value="0"/>
        <meta-data
          android:name="engagement:connection:delay"
          android:value="0"/>
        <meta-data
          android:name="engagement:locationReport:lazyArea"
          android:value="false"/>
        <meta-data
          android:name="engagement:locationReport:realTime"
          android:value="false"/>
        <meta-data
          android:name="engagement:locationReport:realTime:background"
          android:value="false"/>
        <meta-data
          android:name="engagement:locationReport:realTime:fine"
          android:value="false"/>
        <meta-data
          android:name="engagement:agent:settings:name"
          android:value="engagement.agent"/>
        <meta-data
          android:name="engagement:agent:settings:mode"
          android:value="0"/>
        <meta-data
          android:name="engagement:gcm:sender"
          android:value="<YOUR_PROJECT_NUMBER>\n"/>
        <meta-data
          android:name="engagement:adm:register"
          android:value="true"/>
        <meta-data
          android:name="engagement:reach:notification:icon"
          android:value="<DRAWABLE_NAME_WITHOUT_EXTENSION>"/>

        <activity android:name="SomeActivityWithoutReachOverlay">
          <meta-data
            android:name="engagement:notification:overlay"
            android:value="false"/>
        </activity>

La verifica per Google Play e SmartAd è stata rimossa dall'SDK. È sufficiente rimuoverla senza alcuna sostituzione:Google Play and SmartAd tracking has been removed from SDK you just have to remove this without replacement:

        <meta-data 
            android:name="capptain:track:installReferrerForwardList"
            android:value="com.class1,com.class2"/>
        <meta-data
            android:name="capptain:track:adservers"
            android:value="smartad" />

Le attività del servizio di copertura vengono ora dichiarate nel modo seguente:The Reach activities are now declared like this:

        <activity
          android:name="com.microsoft.azure.engagement.reach.activity.EngagementTextAnnouncementActivity"
          android:theme="@android:style/Theme.Light">
          <intent-filter>
            <action android:name="com.microsoft.azure.engagement.reach.intent.action.ANNOUNCEMENT"/>
            <category android:name="android.intent.category.DEFAULT"/>
            <data android:mimeType="text/plain"/>
          </intent-filter>
        </activity>
        <activity
          android:name="com.microsoft.azure.engagement.reach.activity.EngagementWebAnnouncementActivity"
          android:theme="@android:style/Theme.Light">
          <intent-filter>
            <action android:name="com.microsoft.azure.engagement.reach.intent.action.ANNOUNCEMENT"/>
            <category android:name="android.intent.category.DEFAULT"/>
            <data android:mimeType="text/html"/>
          </intent-filter>
        </activity>
        <activity
          android:name="com.microsoft.azure.engagement.reach.activity.EngagementPollActivity"
          android:theme="@android:style/Theme.Light">
          <intent-filter>
            <action android:name="com.microsoft.azure.engagement.reach.intent.action.POLL"/>
            <category android:name="android.intent.category.DEFAULT"/>
          </intent-filter>
        </activity>

Se sono presenti attività personalizzate del servizio Reach, è sufficiente cambiare le azioni di tipo Intent in modo che corrispondano a com.microsoft.azure.engagement.reach.intent.action.ANNOUNCEMENT o com.microsoft.azure.engagement.reach.intent.action.POLL.If you have custom Reach activities, you need only to change the intent actions to match either com.microsoft.azure.engagement.reach.intent.action.ANNOUNCEMENT or com.microsoft.azure.engagement.reach.intent.action.POLL.

I ricevitori di trasmissioni sono stati rinominati e viene aggiunto exported=false.The broadcast receivers have been renamed, plus we now add exported=false. L'elenco seguente illustra in modo completo i ricevitori e le nuove specifiche. È ovviamente necessario rinominare solo i ricevitori da usare:Here is the full list of the receivers with the new specification, (of course rename only the ones you use):

        <receiver android:name="com.microsoft.azure.engagement.reach.EngagementReachReceiver"
          android:exported="false">
          <intent-filter>
            <action android:name="android.intent.action.BOOT_COMPLETED"/>
            <action android:name="com.microsoft.azure.engagement.intent.action.AGENT_CREATED"/>
            <action android:name="com.microsoft.azure.engagement.intent.action.MESSAGE"/>
            <action android:name="com.microsoft.azure.engagement.reach.intent.action.ACTION_NOTIFICATION"/>
            <action android:name="com.microsoft.azure.engagement.reach.intent.action.EXIT_NOTIFICATION"/>
            <action android:name="android.intent.action.DOWNLOAD_COMPLETE"/>
            <action android:name="com.microsoft.azure.engagement.reach.intent.action.DOWNLOAD_TIMEOUT"/>
          </intent-filter>
        </receiver>

        <receiver android:name="com.microsoft.azure.engagement.gcm.EngagementGCMEnabler"
          android:exported="false">
          <intent-filter>
            <action android:name="com.microsoft.azure.engagement.intent.action.APPID_GOT" />
          </intent-filter>
        </receiver>

        <receiver
          android:name="com.microsoft.azure.engagement.gcm.EngagementGCMReceiver"
          android:permission="com.google.android.c2dm.permission.SEND">
          <intent-filter>
            <action android:name="com.google.android.c2dm.intent.REGISTRATION"/>
            <action android:name="com.google.android.c2dm.intent.RECEIVE"/>
            <category android:name="<your_package_name>"/>
          </intent-filter>
        </receiver>

        <receiver android:name="com.microsoft.azure.engagement.adm.EngagementADMEnabler"
          android:exported="false">
          <intent-filter>
            <action android:name="com.microsoft.azure.engagement.intent.action.APPID_GOT"/>
          </intent-filter>
        </receiver>

        <receiver
          android:name="com.microsoft.azure.engagement.adm.EngagementADMReceiver"
          android:permission="com.amazon.device.messaging.permission.SEND">
          <intent-filter>
            <action android:name="com.amazon.device.messaging.intent.REGISTRATION"/>
            <action android:name="com.amazon.device.messaging.intent.RECEIVE"/>
            <category android:name="<your_package_name>"/>
          </intent-filter>
        </receiver>

        <receiver android:name="<your_sub_class_of_com.microsoft.azure.engagement.reach.EngagementReachDataPushReceiver>"
          android:exported="false">
          <intent-filter>
            <action android:name="com.microsoft.azure.engagement.reach.intent.action.DATA_PUSH" />
          </intent-filter>
        </receiver>

        <receiver android:name="com.microsoft.azure.engagement.EngagementLocationBootReceiver"
           android:exported="false">
           <intent-filter>
              <action android:name="android.intent.action.BOOT_COMPLETED" />
           </intent-filter>
        </receiver>

        <receiver android:name="<your_sub_class_of_com.microsoft.azure.engagement.EngagementConnectionReceiver.java>"
          android:exported="false">
          <intent-filter>
            <action android:name="com.microsoft.azure.engagement.intent.action.CONNECTED"/>
            <action android:name="com.microsoft.azure.engagement.intent.action.DISCONNECTED"/>
          </intent-filter>
        </receiver>

        <receiver
          android:name="<your_sub_class_of_com.microsoft.azure.engagement.EngagementMessageReceiver.java>"
          android:exported="false">
          <intent-filter>
            <action android:name="com.microsoft.azure.engagement.reach.intent.action.MESSAGE"/>
          </intent-filter>
        </receiver>

Il ricevitore di verifica è stato rimosso. Sarà quindi necessario rimuovere questa sezione:Tracking receiver has been removed, so you have to remove this section:

      <receiver android:name="com.ubikod.capptain.android.sdk.track.CapptainTrackReceiver">
        <intent-filter>
          <action android:name="com.ubikod.capptain.intent.action.APPID_GOT" />
          <!-- possibly <action android:name="com.android.vending.INSTALL_REFERRER" /> -->
        </intent-filter>
      </receiver>

Notare che la dichiarazione dell'implementazione del ricevitore di trasmissioni EngagementMessageReceiver è stata modificata in AndroidManifest.xml.Note that the declaration of your implementation of the broadcast receiver EngagementMessageReceiver has changed in the AndroidManifest.xml. Ciò dipende dal fatto che l'API per l'invio e la rimozione di messaggi XMPP arbitrari da entità XMPP arbitrarie e l'API per l'invio e la ricezione di messaggi tra dispositivi sono state rimosse.This is because the API to send and remove arbitrary XMPP messages from arbitrary XMPP entities and the API to send and receive messages between devices have been removed. È quindi necessario eliminare anche i callback seguenti dall'implementazione di EngagementMessageReceiver :Thus, you have also to delete the following callbacks from your EngagementMessageReceiver implementation :

        protected void onDeviceMessageReceived(android.content.Context context, java.lang.String deviceId, java.lang.String payload)

eand

        protected void onXMPPMessageReceived(android.content.Context context, android.os.Bundle message)

quindi eliminare qualsiasi chiamata su EngagementAgent per:then delete any call on EngagementAgent for :

        sendMessageToDevice(java.lang.String deviceId, java.lang.String payload, java.lang.String packageName)

eand

        sendXMPPMessage(android.os.Bundle msg)

ProguardProguard

La configurazione di Proguard può essere influenzata dal re-branding. Le regole hanno ora un aspetto analogo al seguente:Proguard configuration can be impacted by rebranding, the rules are now looking like:

        -dontwarn android.**
        -keep class android.support.v4.** { *; }

        -keep public class * extends android.os.IInterface
        -keep class com.microsoft.azure.engagement.reach.activity.EngagementWebAnnouncementActivity$EngagementReachContentJS {
          <methods>;
        }