如何将 Azure 通知 REST API 与 Google 云消息传递一起使用

Posted

技术标签:

【中文标题】如何将 Azure 通知 REST API 与 Google 云消息传递一起使用【英文标题】:How to use Azure Notification REST API with Google Cloud Messaging 【发布时间】:2016-06-01 16:06:32 【问题描述】:

我们正在使用 Unity 3d 实现应用程序,并且正在使用 Azure 推送通知 REST API。 但是关于如何成功发送和接收消息存在一些问题。

为了进行测试,我们正在使用适用于 chrome 的 Advanced Rest 客户端扩展。 我们可以使用原生模板创建注册(检查https://msdn.microsoft.com/en-us/library/azure/dn223265.aspx)

<?xml version="1.0" encoding="utf-8"?>
<entry xmlns="http://www.w3.org/2005/Atom">
    <content type="application/xml">
        <GcmRegistrationDescription xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.microsoft.com/netservices/2010/10/servicebus/connect">
            <Tags></Tags>
            <GcmRegistrationId>Some Id from somewhere</GcmRegistrationId> 
        </GcmRegistrationDescription>
    </content>
</entry>

到目前为止,我们发送的请求带有空标签,但我们不确定 GcmRegistration 应该是什么,奇怪的是无论我们发送什么,我们都会得到一个有效的响应。

<entry a:etag="W/"1"">
  <id>https://cloudservicechat-ns.servicebus.windows.net/cloudservicechat/registrations/8760279628548469956-1956153846630646542-1?api-version=2015-01</id>
  <title type="text">8760279628548469956-1956153846630646542-1</title>
  <published>2016-06-01T15:15:16Z</published>
  <updated>2016-06-01T15:15:16Z</updated>
  <link rel="self" href="https://cloudservicechat-ns.servicebus.windows.net/cloudservicechat/registrations/8760279628548469956-1956153846630646542-1?api-version=2015-01" />
  <content type="application/xml">
    <GcmRegistrationDescription>
    <ETag>1</ETag>
    <ExpirationTime>2016-08-30T15:15:16.215Z</ExpirationTime>
    <RegistrationId>8760279628548469956-1956153846630646542-1</RegistrationId>
    <GcmRegistrationId>Some Id from somewhere</GcmRegistrationId>
    </GcmRegistrationDescription>
  </content>
</entry>

现在我们正在尝试发送通知 (https://msdn.microsoft.com/en-us/library/azure/dn223273.aspx),但我们不确定在使用 GCM 时从 azure 使用的正确有效负载 根据 GCM 中的文档 有效载荷会是这样的

  
    "to" : "bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...",
    "notification" : 
      "body" : "great match!",
      "title" : "Portugal vs. Denmark",
      "icon" : "myicon"
    
  

但是,无论我们做什么,我们总是会收到未经授权的响应。

也尝试使用模板注册,但我们不确定应该添加什么(检查https://msdn.microsoft.com/en-us/library/azure/dn223265.aspx)

所以问题是 * 我们可以从哪里获得 GcmRegistrationId? * 我们应该如何替换 BodyTemplate 的格式 * 什么是使用 Azure 测试发送的有效通知负载

感谢您的帮助

【问题讨论】:

【参考方案1】:

基于此documentation,您需要在MyHandler 类中添加参数gcmRegistrationId 以覆盖onRegistered 方法,该方法将您的设备注册到移动服务通知中心。示例:

@Override
public void onRegistered(Context context,  final String gcmRegistrationId) 
    super.onRegistered(context, gcmRegistrationId);

    new AsyncTask<Void, Void, Void>() 

        protected Void doInBackground(Void... params) 
            try 
                ToDoActivity.mClient.getPush().register(gcmRegistrationId, null);
                return null;
            
            catch(Exception e)  
                // handle error             
            
            return null;            
        
    .execute();

您可以在此documentation 中阅读有关如何使用模板跨平台发送针对您的所有设备的与平台无关的通知以及向每个设备个性化广播通知的步骤。

发送推送通知的标准方式是为每个要发送的通知发送一个特定的有效负载到平台通知服务(WNS、APNS)。例如,要向 APNS 发送警报,有效负载是以下形式的 Json 对象:

"aps": "alert" : "Hello!"

您可以查看这些相关主题:

Adding Google GCM Api Key Azure Notification Hub Error NotificationHubUnauthorizedException: Unauthorized on Azure Notification Hub registration

【讨论】:

以上是关于如何将 Azure 通知 REST API 与 Google 云消息传递一起使用的主要内容,如果未能解决你的问题,请参考以下文章

带有 PHP 的 Azure 通知中心 REST API

csharp .NET Core中的Azure通知中心REST API [读取/删除通道的所有注册]

Azure DevOps REST API - 选项列表如何与字段关联?

如何使用REST API将文件存储卷安装到azure容器实例

如何将 azure 广告集成到在 azure 中也使用 REST API 的 React Web 应用程序

如何使用Azure AD B2C保护Spring Boot REST API?