エクスポート (0) 印刷
すべて展開

Service Bus 通知ハブ チュートリアル (Android アプリ)

Windows Azure Service Bus 通知ハブは、サードパーティのアプリケーション プラットフォームを使用して、デバイスにプッシュ通知を送信できるようにする Service Bus エンティティです。これらのプラットフォームには次のものが含まれます。

  1. Windows 8 用の Windows Push Notification Services。

  2. Apple Push Notification service (APNs)。

  3. Android 用の Google Cloud Messaging (GCM) サービス。

このチュートリアルでは、GCM を介してネイティブ プッシュ通知を送信する Android アプリケーションと単純な ASP.NET MVC アプリケーションを設定する方法について説明します。

note
通知ハブは、2013 年 1 月にプレビュー機能として Windows Azure Service Bus で利用できるようになりました。2013 年の中ごろには、General Availability (GA) に移行する予定です。

note
通知ハブが機能強化された結果、2013 年 4 月より前にダウンロードした SDK では新しい通知ハブを利用できません。逆に、最新の SDK では 2013 年 4 月より前に作成された通知ハブは利用できません。オプティミスティック同時実行の制御などの、新しい機能をすべての利用する場合は、新しい SDK で新しい通知ハブを使用してください。2013 年 4 月より前に作成された通知ハブのサポートは、通知ハブが GA となる時点で終了します。

Windows Phone 用の Microsoft Push Notification Service (MPNS) のサポートは近日中に追加される予定です。

詳細な「操作方法:Service Bus 通知ハブ (Android アプリ)」および「Windows Azure Service Bus 通知ハブ」の概要も参照してください。Windows ストア アプリおよび iOS アプリから通知ハブを使用する方法の詳細情報:、「操作方法:Service Bus 通知ハブ (Windows ストア アプリ)」と「方法: Service Bus 通知ハブ (iOS アプリ)」を参照してください。

前提条件

  1. Service Bus .NET Preview SDK。この SDK は ServiceBus preview features を含む NuGet パッケージで、こちら からダウンロードできます。パッケージは ServiceBus preview features であり、Microsoft.ServiceBus.Preview.dll という新しい Service Bus ライブラリが含まれます。通知ハブを使用するには、製品バージョン (Microsoft.ServiceBus.dll) ではなくこのライブラリを使用してください。

  2. Android SDK (必要に応じて Eclipse) は、こちら からダウンロードできます。

  3. Android 通知ハブ SDK。この SDK は、こちらからダウンロードできます。

Google API プロジェクトを作成し、API キーを生成する

Google API プロジェクトを作成するには:

  1. Google API コンソール ページを開きます。

  2. すでにプロジェクトがあり、新しいプロジェクトを作成する場合は、[その他のプロジェクト] をクリックして、[作成] をクリックします。初めて Google API プロジェクトを作成する場合は、[プロジェクトの作成] をクリックします。

    プッシュ通知
  3. ご使用の ブラウザ URL が、以下のような内容に変更されます。https://code.google.com/apis/console/#project:1234567890

  4. #project の後の数字 (上記の例では 1234567890) を書き留めます。この数字は、あなたの GCM 送信者 ID になります。

次のように、GCM を有効にして、サーバー API キーを生成します。

  1. メインの Google API コンソール ページで、[サービス] をクリックします。

  2. Google Cloud Messaging の切り替えボタンを [オン] にして、サービス使用条件に同意します。

  3. 再度、メインの Google API コンソール ページで、[API アクセス] をクリックします。

  4. [新しいサーバー キーを作成] をクリックして、[作成] をクリックします。

    note
    IP アドレスのホワイトリストの入力は必須ではありません。

  5. 作成した API キーを書き留めます。

Service Bus 通知ハブの作成

Windows Azure 管理ポータルを使用して、通知ハブを作成し、Android アプリケーションにプッシュ通知を送信するように構成します。

  1. Windows Azure 管理ポータルにログオンします。

  2. 左下隅の [新規] をクリックします。

  3. [アプリ サービス]、[Service Bus]、[通知ハブ]、[簡易作成] の順にクリックします。

    プッシュ通知
  4. 通知ハブの名前、地域、この通知ハブを作成する名前空間を選択します (使用できる名前空間がない場合は、指定された名前で新しい名前空間がプロビジョニングされます)。チェック マークをクリックします。

  5. 左側のナビゲーション ウィンドウの [Service Bus] タブで、作成された名前空間をクリックします。通知ハブが一覧に表示されます。

    プッシュ通知
  6. 通知ハブをクリックし、上部にある [構成] タブをクリックします。

    プッシュ通知
  7. 前の手順で取得した GCM API キーを貼り付けて、[保存] をクリックします。

アプリへの接続

まだ Android プロジェクトがない場合は、新しく作成します。

  1. Eclipse ADTで、新しい Android プロジェクトを作成し ([ファイル]、[新規作成]、[Android アプリケーション])、[最低限必要な SDK] を [API 8:Android 2.2 (Froyo)] に設定します。

    プッシュ
  2. ウィザードに従って、標準の設定ををそのままにします (空白のアクティビティの作成など)。

    プッシュ
  3. Eclipse の上部のツール バーの Android SDK Manager を開きます。下図のように、[Google APIs]、[Google Cloud Messaging for Android Library]、[Google Play Service] の順にクリックします。[パッケージのインストール] をクリックします。Eclipse を再起動します。

    note
    注:SDK Manager の上に表示される SDK パスを覚えておきます。

    プッシュ
  4. SDK パスを参照し、次のファイルをパッケージ エクスプローラのプロジェクトの \libs ディレクトリにコピーします。\extras\google\gcm\gcm-client\dist\gcm.jar; \extras\google\google_play_services\libproject\google-play-services_lib\libs\google-play-services.jar

  5. こちらから通知ハブ Android SDK をダウンロードします。.zip ファイルを解凍して、notificationhubs\notification-hubs-sdk.jar ファイルをパッケージ エクスプローラのプロジェクトの \libs ディレクトリにコピーします。

  6. パッケージ エクスプローラでプロジェクトを右クリックして、[プロパティ] をクリックします。次に、左側のペインにある [Android] をクリックします。[Google API] のターゲットをオンにします。[OK] をクリックします。

    プッシュ

    次に、アプリケーションを構成して、GCM から registrationId を取得します。registrationId を使用して、アプリ インスタンスを通知ハブに登録します。

  7. AndroidManifest.xml の <uses-sdk/> 要素のすぐ下に、次の行を追加します。<your package> を手順 1 でアプリに選択したパッケージに必ず置き換えてください (この例では com.microsoft.testnotificationhubs)。

    <uses-permission android:name="android.permission.INTERNET"/>
    <uses-permission android:name="android.permission.GET_ACCOUNTS"/>
    <uses-permission android:name="android.permission.WAKE_LOCK"/>
    <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
    
    <permission android:name="<your package>.permission.C2D_MESSAGE" android:protectionLevel="signature" />
    <uses-permission android:name="<your package>.permission.C2D_MESSAGE"/>
    
  8. MainActivity クラスに、次のプライベート メンバーを追加します。

    note
    以前に取得した送信者 ID を必ず使用してください。

    private String SENDER_ID = "<your project number>";
    private GoogleCloudMessaging gcm;
    private NotificationHub hub;
    
  9. Windows Azure 管理ポータルから、通知ハブのダッシュボードに移動して、[接続情報] をクリックし、Listen アクセス権限を持つ接続文字列を取得します。

    プッシュ
  10. OnCreate メソッドに次のコードを追加し、取得した Listen アクセス権限を持つ接続文字列と通知ハブの名前にプレースホルダーを置き換えます。

    gcm = GoogleCloudMessaging.getInstance(this);
            
    String connectionString = "<your listen access connection string>";
    hub = new NotificationHub("<your notification hub name>", connectionString, this);
    
    registerWithNotifiationHub();
    
  11. MainActivity.java に、次のメソッドを作成します。

    @SuppressWarnings("unchecked")
    private void registerWithNotificationHubs() {
       new AsyncTask() {
          @Override
          protected Object doInBackground(Object... params) {
             try {
                String regid = gcm.register(SENDER_ID);
                hub.register(regid);
             } catch (Exception e) {
                return e;
             }
             return null;
         }
       }.execute(null, null, null);
    }
    
  12. Android には通知が表示されないため、独自のレシーバーを記述する必要があります。AndroidManifest.xml の <application/> 要素内に、次の要素を追加します。

    note
    プレースホルダーをパッケージ名に置き換えます。

    <receiver
        android:name=".MyBroadcastReceiver"
        android:permission="com.google.android.c2dm.permission.SEND" >
       <intent-filter>
          <action android:name="com.google.android.c2dm.intent.RECEIVE" />
          <category android:name="<your package name>" />
       </intent-filter>
    </receiver>
    
  13. 新しいクラスを作成します (パッケージ エクスプローラでアプリ パッケージを右クリックし、[新規作成] をクリックして [クラス] をクリックします)。クラスの名前を、android.content.BroadcastReceiver から派生した MyBroadcastReceiver と付けます。

    プッシュ
  14. MyBroadcastReceiver に次のコードを追加します。

    public static final int NOTIFICATION_ID = 1;
        private NotificationManager mNotificationManager;
        NotificationCompat.Builder builder;
        Context ctx;
    
    @Override
    public void onReceive(Context context, Intent intent) {
    GoogleCloudMessaging gcm = GoogleCloudMessaging.getInstance(context);
            ctx = context;
            String messageType = gcm.getMessageType(intent);
            if (GoogleCloudMessaging.MESSAGE_TYPE_SEND_ERROR.equals(messageType)) {
                sendNotification("Send error: " + intent.getExtras().toString());
            } else if (GoogleCloudMessaging.MESSAGE_TYPE_DELETED.equals(messageType)) {
                sendNotification("Deleted messages on server: " + 
                        intent.getExtras().toString());
            } else {
                sendNotification("Received: " + intent.getExtras().toString());
            }
            setResultCode(Activity.RESULT_OK);
    }
    
    private void sendNotification(String msg) {
    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.drawable.ic_launcher)
              .setContentTitle("Notification Hub Demo")
              .setStyle(new NotificationCompat.BigTextStyle()
                         .bigText(msg))
              .setContentText(msg);
          
         mBuilder.setContentIntent(contentIntent);
         mNotificationManager.notify(NOTIFICATION_ID, mBuilder.build());
    
    

エミュレーターでアプリを実行する

エミュレーターでこのアプリを実行する場合、Google API をサポートする Android Virtual Device (AVD) を使用する必要があります。

  1. [ウィンドウ] で、[Android Virtual Device Manager] をクリックしてデバイスを選択し、[編集] をクリックします。

    プッシュ
  2. [ターゲット] で [Google API] を選択し、[OK] をクリックします。

    プッシュ
  3. 上部のツール バーで、[実行] をクリックしてアプリを選択します。これでエミュレーターが起動し、アプリが実行されます。

  4. アプリが GCM から registrationId を取得し、通知ハブに登録します。

note
プッシュ通知を受信するには、Android Virtual Device で Google アカウントを設定する必要があります (エミュレーターで [設定] に移動し、[アカウントの追加] をクリックします)。また、エミュレーターがインターネットに接続されていることを確認します。

.NET を使用して通知を送信する

通知を作成、送信するには、簡単なコンソール アプリケーションを作成します。このコードは通常の Web アプリケーション内でも再使用できます。

Visual Studio Express 2012 for Windows 8 を使用している場合は、Visual Studio Express 2012 for Windows Desktop を使用してコンソール アプリケーションを作成してください。または、Visual Studio Express 2012 for Web を使用して簡単な Web フォーム アプリを作成してください。

以下に参照を追加します。

  • System.Runtime.Serialization.dll

  • System.Runtime.Serialization.dll

コンソール アプリケーションを作成する場合は、Main() 関数として次のコードを使用します。Windows Azure 管理ポータルからコピーできるフル アクセスを持つ接続文字列と、通知ハブの名前にプレースホルダーを置き換えます。

プッシュ

特定の GCM JSON 形式をメモします。詳細については、こちらを参照してください。

static void Main(string[] args)
{
    var hubClient = NotificationHubClient.CreateClientFromConnectionString(<your connection string with full access>, "<your notification hub name>");
    hubClient.SendGcmNativeNotification("{ \"data\" : {\"msg\":\"Hello from Windows Azure!\"}}");
}

10,000 個のクライアント インスタンスが登録されている場合、通知ハブは 10,000 個の通知のコピーを作成して送信し、必要なエラー処理と登録管理を実行します。

プッシュ

Node.js を使用して通知を送信する

Node.js と npm をコンピューターにインストールします。

  1. azure ノード モジュールをインストールします。

    npm install azure
    
  2. ノード スクリプト (または対話型コンソール) に、以下を入力します。

    var azure = require('azure');
    var hub = azure.createNotificationHubService('<your hub name>', '<your connection string with full access>');
    hub.gcm.send(null, '{"data":{"msg":"Hello from node.js!"}}');
    

10,000 個のクライアント インスタンスが登録されている場合、通知ハブは 10,000 個の通知のコピーを作成して送信し、必要なエラー処理と登録管理を実行します。

モバイル サービスでの通知の送信

モバイル サービスでは、すばやく簡単にアプリのバックエンドを作成できます。モバイル サービスから通知ハブを使用することで、数百のデバイスに通知を配信できるほか、タグを使用して関係者グループを簡単に作成できます。

このチュートリアルではスケジュールされているジョブを使用しますが、実際にはモバイル サービスのどのサーバー側スクリプトからでも通知を送信できます。

  1. 新しいモバイル サービスを作成するか、既存のモバイル サービスにログインします。詳細情報: モバイル サービスは、こちら にアクセスしてください。

  2. 上部バーの [スケジューラ] をクリックします。

    プッシュ通知
  3. スケジュールされた新しいジョブを作成し、名前を挿入して、[オンデマンド] をクリックします。

    プッシュ通知
  4. ジョブを作成したら、ジョブ名をクリックします。上部バーの [スクリプト] をクリックします。

  5. 次のスクリプトを挿入します。通知ハブ名および事前に入手した DefaultFullSharedAccessSignature の接続文字列でプレースホルダーを必ず置き換えてください。[保存] をクリックします。

    function PushToNotificationHub() {
        var azure = require('azure');
        
        var notificationHubService = azure.createNotificationHubService('<hub name>',
        '<connection string>');
    
        notificationHubService.hub.gcm.send(
            null,
            '{
                "data":
                {
                   "msg" : "Hello from Mobile Services!"
                }
            }',
            function (error)
            {
                if (!error) {
                    console.warn("Notification successful");
                }
            }
        );
    }
    
  6. 下のバーで [1 度だけ実行する] をクリックします。

note
モバイル サービスでは、Windows Azure SDK for Node.js を使用して通知ハブにアクセスします。詳細情報: Windows Azure SDK for Node.js については、こちら を参照してください。

前述したように、10,000 個のクライアント インスタンスが登録されている場合、通知ハブは 10,000 個の通知のコピーを作成して送信し、必要なエラー処理と登録管理を実行します。マルチプラットフォームの通知を送信する方法、特定のユーザーと関連するグループを対象にする方法などの高度な機能については、詳細な「操作方法:Service Bus 通知ハブ (Windows ストア アプリ)」と「Windows Azure Service Bus 通知ハブ」を参照してください。

コミュニティの追加

表示:
© 2014 Microsoft