销售电话: 1-800-867-1380

Service Bus 通知中心教程(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 的新通知中心,以充分利用乐观并发控制等新增功能。在通知中心过渡到通用版本后,我们将不再对 2013 年 4 月之前创建的通知中心提供支持。

很快就会增加对适用于 Windows Phone 的 Microsoft 推送通知服务 (MPNS) 的支持。

我们还提供了深入的如何:Service Bus 通知中心(Android 应用程序)主题和 Windows Azure Service Bus 通知中心概述。有关如何从 Windows 应用商店和 iOS 应用程序使用通知中心的详细信息,请分别参阅如何:Service Bus 通知中心(Windows 应用商店应用程序)如何:Service Bus 通知中心(iOS 应用程序)主题。

必备组件

  1. Service Bus .NET Preview SDK。该 SDK 是包含 Service Bus 预览功能的 NuGet 程序包,可从此处下载。该程序包为“ServiceBus 预览功能”,其中包含一个名为 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 云消息开关设置为“打开”,并接受服务条款。

  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 管理器。单击“Google API”、“用于 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 API”目标。单击“确定”。

    推送

    现在,设置该应用程序以从 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 管理门户中,通过导航到通知中心仪表板并单击“连接信息”,获取具有侦听访问权限的连接字符串。

    推送
  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. 从“窗口”中,单击“Android 虚拟设备管理器”,选择设备,然后单击“编辑”。

    推送
  2. 在“目标”中选择“Google API”,然后单击“确定”。

    推送
  3. 在顶部工具栏中,单击“运行”,然后选择应用程序。此时会启动仿真器并运行该应用程序。

  4. 该应用程序从 GCM 检索 registrationId 并向通知中心注册。

note注意
为了接收推送通知,您必须在 Android 虚拟设备上设置 Google 帐户(在仿真器中,导航到“设置”,然后单击“添加帐户”)。此外,请确保仿真器已连接到 Internet。

使用 .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 个通知副本,并执行所需的错误处理和注册管理。若要了解如何发送多平台通知、目标特定的用户和相关组,以及其他高级功能,参阅深入的如何:Service Bus 通知中心(Windows 应用商店应用程序)主题和 Windows Azure Service Bus 通知中心概述。

本文是否对您有所帮助?
(1500 个剩余字符)
感谢您的反馈

社区附加资源

显示:
© 2015 Microsoft