匯出 (0) 列印
全部展開

服務匯流排通知中心教學課程 (Android 應用程式)

Windows Azure Service Bus 通知中心是 Service Bus 實體,讓您能夠透過協力廠商應用程式平台傳送裝置推播通知。這些平台包括:

  1. 適用於 Windows 8 的 Windows 推播通知服務 (WNS)。

  2. Apple 推播通知服務 (APN)。

  3. 適用於 Android 的 Google 雲端訊息服務 (GCM)。

本教學課程描述如何設定 Android 應用程式以及透過 GCM 傳送原生推播通知的簡單 ASP.NET MVC 應用程式。

note附註
通知中心已在 2013 年 1 月於 Windows Azure Service Bus 中提供來做為預覽功能。預計會在 2013 年年中公開上市 (GA)。

note附註
針對通知中心中的改善結果,您在 2013 年 4 月前下載的 SDK 不會和新的通知中心一同運作。相反地,目前的 SDK 會和在 2013 年 4 月前建立的通知中心一同運作。請開始使用具有新 SDK 的通知中心以充分利用新功能,例如開放式並行存取控制。當通知中心轉換為 GA 時,支援 2013 年 4 月前建立的通知中心會結束。

即將新增對於 Windows Phone 的 Microsoft 推播通知服務 (MPNS) 的支援。

您也可以取得深入的 作法:Service Bus 通知中心 (Android 應用程式) 主題和 Windows Azure 服務匯流排通知中心 概述。如需詳細資訊 如何使用 Windows 市集和 iOS 應用程式館的通知中心,請分別參閱 作法:服務匯流排通知中心 (Windows 市集應用程式)作法:服務匯流排通知中心 (iOS 應用程式) 主題。

必要條件

  1. Service Bus .NET 預覽 SDK。SDK 是一個 NuGet 套件,包含 Service Bus 預覽功能,您可以在這裡下載。封裝是 ServiceBus 預覽功能,其包含新的服務匯流排程式庫,名為 Microsoft.ServiceBus.Preview.dll。如需使用通知中心,請使用此程式庫而不要使用生產版本 (Microsoft.ServiceBus.dll)。

  2. 您可以在這裡下載 Android SDK (也稱為 Eclipse)。

  3. Android 通知中心 SDK。您可以在此處下載此 SDK。

建立 Google API 專案並產生 API 金鑰

若要建立 Google API 專案:

  1. 開啟 Google APIs 主控台頁面

  2. 若您已有專案並想要建立新專案,請按一下 [其他專案] 以及 [建立]。若這是您第一個 API 專案,請按一下 [建立專案...] 來建立

    推送通知
  3. 您的瀏覽器 URL 變更為類似:https://code.google.com/apis/console/#project:1234567890

  4. 記下 #project 之後的數字 (以上面的範例為例則為 1234567890)。此號碼是您的 GCM 傳送者 ID。

啟用 GCM 並管理伺服器 API 金鑰:

  1. 在主要 Google APIs 主控台頁面中,按一下 [服務]。

  2. 將 Google 雲端訊息設定切換為 [開啟],並接受服務條款。

  3. 同樣地,在主要 Google APIs 主控台頁面中,按一下 [API 存取]。

  4. 按一下 [建立新伺服器金鑰] ,再按一下 [建立]。

    note附註
    您無需輸入 IP 位址允許清單。

  5. 記下您建立的 API 金鑰。

建立服務匯流排通知中心

您可以使用「Windows Azure 管理入口網站」來建立通知中心,並將其設為傳送推播通知至 Android 應用程式。

  1. 登入 Windows Azure 管理入口網站

  2. 在左下角,按一下 [新增]。

  3. 按一下 [應用程式服務] 以及 [Service Bus],再按一下 [通知中心] 、[快速建立]。

    推送通知
  4. 選取通知中心的名稱、區域以及建立此通知中心的所在命名空間 (若無可用命名空間,則會規定具指定名稱的新命名空間)。按一下核取記號。

  5. 接著在左方瀏覽窗格的 [服務匯流排] 索引標籤下方,按一下已建立的命名名稱。通知中心應會出現在清單中。

    推送通知
  6. 按一下通知中心,然後按一下頂端的 [設定] 索引標籤。

    推送通知
  7. 貼上您之前取得的 GCM API 金鑰,再按一下 [儲存]。

連線應用程式

若您已經有 Android 專案,請建立新的專案。

  1. 在 Eclipse ADT 中,建立新的 Android 專案 (位於 [檔案]、[新增]、[Android 應用程式]),再將 [SDK 需求下限] 設為 [API8: Android 2.2 (Froyo)]。

    推送
  2. 請依照精靈,保留標準設定 (例如建立空白活動)。

    推送
  3. 從 Eclipse 的工具列頂端開啟 [Android SDK 管理員]。按一下 [Google APIs]、[適用於 Android 程式庫的 Google 雲端訊息] 以及 [Google Play 服務],如下所示。按一下 [安裝套件]。重新啟動 Eclipse。

    note附註
    注意:記住顯示在 SDK 管理員頂端的 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 APIs] 目標。按一下 [確定]

    推送

    現在,設定應用程式以從 GCM 取得 registrationId。使用 registrationId 將應用程式執行個體登錄到通知中心。

  7. 在 AndroidManifest.xml 檔案的 <uses-sdk/> 元素正下方,新增下列行。確定用您在步驟 1 中為應用程式選取的套件來取代 <your package> (在本範例中為 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 管理入口網站中,瀏覽到通知中心儀表板並按一下 [連線資訊],以取得具有接聽權限的連線字串:

    推送
  10. OnCreate 方法中新增以下程式碼,並確保以在先前取得的具有接聽權限之連線字串以及通知中心的名稱,來取代預留位置。

    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. 建立新類別 (在 [套件總管] 中的應用程式上按一下滑鼠右鍵,再按一下 [新增] 和 [類別])。將類別 MyBroadcastReceiver 命名為,從 android.content.BroadcastReceiver 擷取。

    推送
  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 虛擬裝置 (AVD)。

  1. 從 [WIndows] 中,按一下 [Android 虛擬裝置管理員],選取您的裝置,再按一下 [編輯]。

    推送
  2. 在 [目標] 中選取 [Google APIs],再按一下 [確定]。

    推送
  3. 在頂端的工具列上,按一下 [執行],選取您的應用程式。這樣會啟動列舉程式並執行應用程式。

  4. 應用程式會從 GCM 擷取 registrationId,並登錄通知中心。

note附註
為了接收推播通知,您必須在 Android 虛擬裝置上設定 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. 在底部列,按一下 [執行一次]。

note附註
行動服務會使用 Windows Azure SDK for Node.js 來存取通知中心。 如需詳細資訊 通知中心的 Windows Azure SDK for Node.js,請前往這裡

如上所述,若已註冊 10,000 個用戶端執行個體,通知中心會建立和傳送 10,000 個通知副本,並執行必要的錯誤處理以及註冊管理。如需了解如何傳送多平台通知、指定特定使用者和興趣群組,以及其他進階功能,請參閱深入的 作法:服務匯流排通知中心 (Windows 市集應用程式) 主題和 Windows Azure 服務匯流排通知中心 概述。

社群新增項目

顯示:
© 2015 Microsoft