Introduzione ad Hub di notifica per le app per KindleGet started with Notification Hubs for Kindle apps

PanoramicaOverview

In questa esercitazione viene illustrato come usare Hub di notifica di Azure per inviare notifiche push a un'applicazione Kindle.This tutorial shows you how to use Azure Notification Hubs to send push notifications to a Kindle application. Verrà creata un'app Kindle vuota che riceve notifiche push tramite Amazon Device Messaging (ADM).You'll create a blank Kindle app that receives push notifications by using Amazon Device Messaging (ADM).

prerequisitiPrerequisites

Per completare questa esercitazione, è necessario disporre di:This tutorial requires the following:

Aggiunta di una nuova app al portale per sviluppatoriAdd a new app to the developer portal

  1. Innanzitutto, creare un'app nel portale per gli sviluppatori di Amazon.First, create an app in the [Amazon developer portal].

  2. Copiare la chiave applicazione.Copy the Application Key.

  3. Nel portale, fare clic sul nome dell'app, quindi fare clic sulla scheda Device Messaging .In the portal, click the name of your app, and then click the Device Messaging tab.

  4. Fare clic su Create a New Security Profile, quindi creare un nuovo profilo di sicurezza, ad esempio il profilo di sicurezza TestAdm.Click Create a New Security Profile, and then create a new security profile (for example, TestAdm security profile). Fare quindi clic su Salva.Then click Save.

  5. Fare clic su Security Profiles per visualizzare il profilo di sicurezza creato.Click Security Profiles to view the security profile that you just created. Copiare i valori Client ID e Client Secret per usarli in seguito.Copy the Client ID and Client Secret values for later use.

Creazione di una chiave APICreate an API key

  1. Aprire un prompt dei comandi con privilegi di amministratore.Open a command prompt with administrator privileges.
  2. Passare alla cartella Android SDK.Navigate to the Android SDK folder.
  3. Immettere il comando seguente:Enter the following command:

     keytool -list -v -alias androiddebugkey -keystore ./debug.keystore
    

  4. Per la password keystore, digitare android.For the keystore password, type android.
  5. Copiare l'ID digitale MD5 .Copy the MD5 fingerprint.
  6. Nel portale per sviluppatori, fare clic su Android/Kindle nella scheda Messaging, immettere il nome del pacchetto per l'app, ad esempio, com.sample.notificationhubtest, e il valore MD5, quindi fare clic su Generate API Key (Genera chiave API).Back in the developer portal, on the Messaging tab, click Android/Kindle and enter the name of the package for your app (for example, com.sample.notificationhubtest) and the MD5 value, and then click Generate API Key.

Aggiunta di credenziali all'hubAdd credentials to the hub

Nel portale, aggiungere il segreto client e l'ID client alla scheda Configure dell'hub di notifica.In the portal, add the client secret and client ID to the Configure tab of your notification hub.

Configurazione dell'applicazioneSet up your application

Nota

Quando si crea un'applicazione, usare come requisito minimo il livello API 17.When you're creating an application, use at least API Level 17.

Aggiungere le librerie ADM al progetto Eclipse:Add the ADM libraries to your Eclipse project:

  1. Per ottenere la libreria ADM, scaricare l'SDK.To obtain the ADM library, [download the SDK]. Estrarre il file zip SDK.Extract the SDK zip file.
  2. In Eclipse fare clic con il pulsante destro del mouse sul progetto e scegliere Properties.In Eclipse, right-click your project, and then click Properties. Selezionare Java Build Path (Percorso compilazione Java) a sinistra e quindi selezionare la scheda Libraries (Librerie) nella parte superiore.Select Java Build Path on the left, and then select the Libraries **tab at the top. Fare clic su **Add External Jar (Aggiungi JAR esterni), quindi selezionare il file \SDK\Android\DeviceMessaging\lib\amazon-device-messaging-*.jar dalla directory in cui è stato estratto Amazon SDK.Click Add External Jar, and select the file \SDK\Android\DeviceMessaging\lib\amazon-device-messaging-*.jar from the directory in which you extracted the Amazon SDK.
  3. Scaricare NotificationHubs Android SDK (collegamento).Download the NotificationHubs Android SDK (link).
  4. Decomprimere il pacchetto, quindi trascinare il file notification-hubs-sdk.jar nella cartella libs in Eclipse.Unzip the package, and then drag the file notification-hubs-sdk.jar into the libs folder in Eclipse.

Modificare il manifesto dell'app per supportare ADM:Edit your app manifest to support ADM:

  1. Aggiungere lo spazio dei nomi Amazon nell'elemento manifesto radice:Add the Amazon namespace in the root manifest element:

     xmlns:amazon="http://schemas.amazon.com/apk/res/android"
    
  2. Aggiungere le autorizzazioni come primo elemento sotto l'elemento manifesto.Add permissions as the first element under the manifest element. Sostituire [YOUR PACKAGE NAME] con il pacchetto usato per creare l'app.Substitute [YOUR PACKAGE NAME] with the package that you used to create your app.

     <permission
      android:name="[YOUR PACKAGE NAME].permission.RECEIVE_ADM_MESSAGE"
      android:protectionLevel="signature" />
    
     <uses-permission android:name="android.permission.INTERNET"/>
    
     <uses-permission android:name="[YOUR PACKAGE NAME].permission.RECEIVE_ADM_MESSAGE" />
    
     <!-- This permission allows your app access to receive push notifications
     from ADM. -->
     <uses-permission android:name="com.amazon.device.messaging.permission.RECEIVE" />
    
     <!-- ADM uses WAKE_LOCK to keep the processor from sleeping when a message is received. -->
     <uses-permission android:name="android.permission.WAKE_LOCK" />
    
  3. Inserire l'elemento seguente come primo figlio dell'elemento dell'applicazione.Insert the following element as the first child of the application element. Ricordare di sostituire [YOUR SERVICE NAME] con il nome del gestore di messaggi ADM che verrà creato nella sezione successiva (incluso il pacchetto) e sostituire [YOUR PACKAGE NAME] con il nome del pacchetto utilizzato per creare l'app.Remember to substitute [YOUR SERVICE NAME] with the name of your ADM message handler that you create in the next section (including the package), and replace [YOUR PACKAGE NAME] with the package name with which you created your app.

     <amazon:enable-feature
           android:name="com.amazon.device.messaging"
                  android:required="true"/>
     <service
         android:name="[YOUR SERVICE NAME]"
         android:exported="false" />
    
     <receiver
         android:name="[YOUR SERVICE NAME]$Receiver" />
    
         <!-- This permission ensures that only ADM can send your app registration broadcasts. -->
         android:permission="com.amazon.device.messaging.permission.SEND" >
    
         <!-- To interact with ADM, your app must listen for the following intents. -->
         <intent-filter>
       <action android:name="com.amazon.device.messaging.intent.REGISTRATION" />
       <action android:name="com.amazon.device.messaging.intent.RECEIVE" />
    
       <!-- Replace the name in the category tag with your app's package name. -->
       <category android:name="[YOUR PACKAGE NAME]" />
         </intent-filter>
     </receiver>
    

Creazione del gestore di messaggi ADMCreate your ADM message handler

  1. Creare una nuova classe che eredita da com.amazon.device.messaging.ADMMessageHandlerBase e denominarla MyADMMessageHandler, come mostrato nella figura seguente:Create a new class that inherits from com.amazon.device.messaging.ADMMessageHandlerBase and name it MyADMMessageHandler, as shown in the following figure:

  2. Aggiungere le istruzioni import seguenti:Add the following import statements:

     import android.app.NotificationManager;
     import android.app.PendingIntent;
     import android.content.Context;
     import android.content.Intent;
     import android.support.v4.app.NotificationCompat;
     import com.amazon.device.messaging.ADMMessageReceiver;
     import com.microsoft.windowsazure.messaging.NotificationHub
    
  3. Aggiungere il codice seguente alla classe creata.Add the following code in the class that you created. Ricordare di sostituire il nome dell'hub e la stringa di connessione (ascolto):Remember to substitute the hub name and connection string (listen):

     public static final int NOTIFICATION_ID = 1;
     private NotificationManager mNotificationManager;
     NotificationCompat.Builder builder;
       private static NotificationHub hub;
     public static NotificationHub getNotificationHub(Context context) {
         Log.v("com.wa.hellokindlefire", "getNotificationHub");
         if (hub == null) {
             hub = new NotificationHub("[hub name]", "[listen connection string]", context);
         }
         return hub;
     }
    
     public MyADMMessageHandler() {
             super("MyADMMessageHandler");
         }
    
         public static class Receiver extends ADMMessageReceiver
         {
             public Receiver()
             {
                 super(MyADMMessageHandler.class);
             }
         }
    
         private void sendNotification(String msg) {
             Context ctx = getApplicationContext();
    
             mNotificationManager = (NotificationManager)
                 ctx.getSystemService(Context.NOTIFICATION_SERVICE);
    
         PendingIntent contentIntent = PendingIntent.getActivity(ctx, 0,
               new Intent(ctx, MainActivity.class), 0);
    
         NotificationCompat.Builder mBuilder =
               new NotificationCompat.Builder(ctx)
               .setSmallIcon(R.mipmap.ic_launcher)
               .setContentTitle("Notification Hub Demo")
               .setStyle(new NotificationCompat.BigTextStyle()
                      .bigText(msg))
               .setContentText(msg);
    
          mBuilder.setContentIntent(contentIntent);
          mNotificationManager.notify(NOTIFICATION_ID, mBuilder.build());
     }
    
  4. Aggiungere il codice seguente al metodo OnMessage() :Add the following code to the OnMessage() method:

     String nhMessage = intent.getExtras().getString("msg");
     sendNotification(nhMessage);
    
  5. Aggiungere il codice seguente al metodo OnRegistered :Add the following code to the OnRegistered method:

         try {
     getNotificationHub(getApplicationContext()).register(registrationId);
         } catch (Exception e) {
     Log.e("[your package name]", "Fail onRegister: " + e.getMessage(), e);
         }
    
  6. Aggiungere il codice seguente al metodo OnUnregistered :Add the following code to the OnUnregistered method:

      try {
          getNotificationHub(getApplicationContext()).unregister();
      } catch (Exception e) {
          Log.e("[your package name]", "Fail onUnregister: " + e.getMessage(), e);
      }
    
  7. Quindi, nel metodo MainActivity , aggiungere l'istruzione import seguente:In the MainActivity method, add the following import statement:

     import com.amazon.device.messaging.ADM;
    
  8. Alla fine del metodo OnCreate aggiungere il codice seguente:Add the following code at the end of the OnCreate method:

     final ADM adm = new ADM(this);
     if (adm.getRegistrationId() == null)
     {
        adm.startRegister();
     } else {
         new AsyncTask() {
               @Override
               protected Object doInBackground(Object... params) {
                  try {                         MyADMMessageHandler.getNotificationHub(getApplicationContext()).register(adm.getRegistrationId());
                  } catch (Exception e) {
                      Log.e("com.wa.hellokindlefire", "Failed registration with hub", e);
                      return e;
                  }
                  return null;
              }
            }.execute(null, null, null);
     }
    

Aggiunta della chiave API all'appAdd your API key to your app

  1. In Eclipse creare un nuovo file denominato api_key.txt negli asset della directory del progetto.In Eclipse, create a new file named api_key.txt in the directory assets of your project.
  2. Aprire il file e copiare la chiave API generata nel portale per sviluppatori Amazon.Open the file and copy the API key that you generated in the Amazon developer portal.

Esecuzione dell'appRun the app

  1. Avviare l'emulatore.Start the emulator.
  2. Nell'emulatore, scorrere dall'alto e fare clic su Settings (Impostazioni), quindi fare clic su My account ed effettuare la registrazione usando un account Amazon valido.In the emulator, swipe from the top and click Settings, and then click My account and register with a valid Amazon account.
  3. In Eclipse eseguire l'app.In Eclipse, run the app.

Nota

Se si verifica un problema, controllare l'ora dell'emulatore (o del dispositivo).If a problem occurs, check the time of the emulator (or device). Il valore dell'ora deve essere accurato.The time value must be accurate. Per modificare l'ora dell'emulatore Kindle è possibile eseguire il comando seguente dalla directory di strumenti della piattaforma Android SDK:To change the time of the Kindle emulator, you can run the following command from your Android SDK platform-tools directory:

    adb shell  date -s "yyyymmdd.hhmmss"

Invio di un messaggioSend a message

Per inviare un messaggio usando .NET:To send a message by using .NET:

    static void Main(string[] args)
    {
        NotificationHubClient hub = NotificationHubClient.CreateClientFromConnectionString("[conn string]", "[hub name]");

        hub.SendAdmNativeNotificationAsync("{\"data\":{\"msg\" : \"Hello from .NET!\"}}").Wait();
    }