天道酬勤,学无止境

Google Cloud Messaging:向“所有”用户发送消息(Google Cloud Messaging: Send message to “all” users)

问题

我正在按照本教程来了解 GCM 的系统。 我有一个关于这部分的问题:

可以向每个注册用户发送消息,但是如何更改该代码以便我可以向所有注册设备发送一条消息?

我已经在寻找答案:

使用 GCM 向多个 Android 设备发送推送通知

在多个设备上发送推送通知

(几乎相同的问题)-但找不到任何解决我问题的答案。

<body>
    <?php
    include_once 'db_functions.php';
    $db = new DB_Functions();
    $users = $db->getAllUsers();
    if ($users != false)
        $no_of_users = mysql_num_rows($users);
    else
        $no_of_users = 0;
    ?>
    <div class="container">
        <h1>No of Devices Registered: <?php echo $no_of_users; ?></h1>
        <hr/>
        <ul class="devices">
            <?php
            if ($no_of_users > 0) {
                ?>
                <?php
                while ($row = mysql_fetch_array($users)) {
                    ?>
                    <li>
                        <form id="<?php echo $row["id"] ?>" name="" method="post" onsubmit="return sendPushNotification('<?php echo $row["id"] ?>')">
                            <label>Name: </label> <span><?php echo $row["name"] ?></span>
                            <div class="clear"></div>
                            <label>Email:</label> <span><?php echo $row["email"] ?></span>
                            <div class="clear"></div>
                            <div class="send_container">                                
                                <textarea rows="3" name="message" cols="25" class="txt_message" placeholder="Type message here"></textarea>
                                <input type="hidden" name="regId" value="<?php echo $row["gcm_regid"] ?>"/>
                                <input type="submit" class="send_btn" value="Send" onclick=""/>
                            </div>
                        </form>
                    </li>
                <?php }
            } else { ?> 
                <li>
                    No Users Registered Yet!
                </li>
            <?php } ?>
        </ul>
    </div>
</body>

我试图更改代码,但我的更改不起作用..

我想将所有 regID 作为数组放入 sendPushNofiy ...

<body>
    <?php
    include_once 'db_functions.php';
    $db = new DB_Functions();
    $users = $db->getAllUsers();
    if ($users != false)
        $no_of_users = mysql_num_rows($users);
    else
        $no_of_users = 0;
    ?>
    <div class="container">
        <h1>No of Devices Registered: <?php echo $no_of_users; ?></h1>
        <hr/>
        <ul class="devices">
            <?php
            if ($no_of_users > 0) {
                ?>
                <?php
                    <li>      
                        $rows = array();
                        while(($row = mysql_fetch_array($users))) {
                            $rows[] = $row['id'];
                        }
                        <form id="<?php echo $rows ?>" name="" method="post" onsubmit="return sendPushNotification('<?php echo $rows ?>')">
                            <label>Name: </label> <span><?php echo $row["name"] ?></span>
                            <div class="clear"></div>
                            <label>Email:</label> <span><?php echo $row["email"] ?></span>
                            <div class="clear"></div>
                            <div class="send_container">                                
                                <textarea rows="3" name="message" cols="25" class="txt_message" placeholder="Type message here"></textarea>
                                <input type="hidden" name="regId" value="<?php echo $row["gcm_regid"] ?>"/>
                                <input type="submit" class="send_btn" value="Send" onclick=""/>
                            </div>
                        </form>
                    </li>
                    <?php 
            } else { ?> 
                <li>
                    No Users Registered Yet!
                </li>
            <?php } ?>
        </ul>
    </div>


</body>

有了这个,我可以将所有 regids 放入数组行......但是我如何将数组传输到表单中?

while ($row = mysql_fetch_array($users)) {
    $rows[] = $row["gcm_regid"];
}

我的问题是如何将我的数组“行”发送到 send_message.php?

$registatoin_ids = array($regId); << 它已经处理了数组,但我的输入仅适用于一个值,我想传输数组^^

编辑:send_message.php

<?php

if (isset($_GET["regId"]) && isset($_GET["message"])) {
    $regId = $_GET["regId"];
    $message = $_GET["message"];
    
    include_once './GCM.php';
    
    $gcm = new GCM();

    $registatoin_ids = array($regId);
    $message = array("price" => $message);

    $result = $gcm->send_notification($registatoin_ids, $message);

    echo $result;
}
?>
回答1

您有责任维护所有注册用户的注册 ID 列表。 没有向所有注册用户发送消息的 API 调用。 您可以向 GCM 服务器发送最多包含 1000 个注册 ID 的请求。 如果您有超过 1000 个注册用户,则必须将它们拆分为多个请求。

回答2
<?php
if (isset($_GET["message"])) {
  include_once 'db_functions.php';
  $db = new DB_Functions();
  $users = $db->getAllUsers();
  $regIds = array();
  if ($users != false){
    while ($row = mysqli_fetch_array($users)) {
        $regIds[] = $row["gcm_regid"];
    }
  }

  include_once './GCM.php';

  $gcm = new GCM();

  $registatoin_ids = $regIds;
  $message = "array("price" => $_GET["message"])";

  $result = $gcm->send_notification($registatoin_ids, $message);

  echo $result;
}
?>

受限制的 HTML

  • 允许的HTML标签:<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • 自动断行和分段。
  • 网页和电子邮件地址自动转换为链接。

相关推荐
  • 添加适用于Android的Google Cloud Messagin(GCM)-注册过程(Adding Google Cloud Messagin (GCM) for Android - Registration process)
    问题 我已经在GCM实施上苦苦挣扎了几周,但是我真的很想了解它的工作原理,因此决定采取“婴儿步骤”。 首先,如此处所述,我了解要做的第一件事是注册我的设备/应用必须首先向GCM注册。 为了验证他们可以发送和接收消息,客户端应用程序必须在GCM中注册。 在此过程中,客户端获得唯一的注册令牌。 我想知道下面的过程和代码是否表示进行此类注册所需的最少代码(“必要的最少代码”是因为当我学习OpenGL ES 2.0并开始处理着色器时,我发现带有硬性/混淆性的概念,如果您了解所需的最少代码,则可以稍后了解“外围”代码是什么) 使用GCM注册应用的步骤: 在Google Developer Console上创建一个项目; 激活“ Android的Messaging” API; 在“凭据”处创建服务器API密钥; 记下项目ID; 记下项目编号; 记下服务器API密钥; 创建一个Android Studio项目; 添加“带有CGM的App Engine后端”模块类型; 在打开的“ appengine-web.xml”窗口中,输入应用程序ID和服务器API密钥。 使用项目编号(SENDER_ID)创建一个主要活动。 完成所有操作并运行应用程序后,我得到了一个包含152个字符的令牌。 所有这些正确吗? 考虑到我收回了令牌,我的设备是否已在GCM中注册? appengine-web.xml: <?xml
  • Google GCM,令牌与注册ID(Google GCM, token vs registration id)
    问题 我对注册ID和令牌之间的关系感到困惑。 在Google提供的GCM教程中,我们首先注册了注册ID。 但是,我们也获得了令牌。 现在,在图中,我们将注册ID发送到目标服务器。 但是,我们也发送令牌吗? 我知道令牌是从注册ID派生的。 令牌是否用作GCM和应用之间的身份验证机制,并且服务器从不知道该令牌? 回答1 如果您正在寻找有关IMO的Google Cloud Messaging的基本知识,则可以参考以下内容: 基本上,您需要执行以下步骤: 在Google Developers Console上创建一个新项目。 在此步骤中,为简单起见,您只需要记下两个值: Project Number ,它将在客户端项目中用作SENDER_ID ; 和API server key (在Credentials中创建),将在服务器项目中用作API_KEY 。 为服务器端创建一个新的简单Android项目(以下链接中的基本源代码为我的答案)。 为客户端创建一个新的简单Android项目(以下链接中的基本源代码为我的答案,我是从Google Cloud Messaging-GitHub的原始源中自定义的)。 运行客户端应用程序,您将获得注册令牌(表示您的设备已成功注册)。 然后,将此令牌粘贴(硬编码)到服务器应用程序中的CLIENT_REGISTRATION_TOKEN变量
  • GCM如何运作? (适用于Android的Google云消息传递)(How does GCM work ? (google cloud messaging for Android))
    问题 我有一个Android应用程序,我使用REST API(django rest框架)连接到服务器 这是一个场景(也许是我的计划): 数据作为json来回发送我有一个用户模型和一个任务模型,其中用户是某些任务的所有者。 用户通常使用POST方法将任务发送给另一个用户(其json与以下内容类似:{“ owner”:“ exampleuser”,“ from”:“ otheruser”,“ content”:“ example” ...})-任务具有布尔值字段“ completed”,并且在任务完成后被删除(使用PUT或PATCH方法:completed = true,) 一旦使用POST方法创建了新任务,用户看到其任务的任何活动的唯一方法就是通过android活动,该活动使用GET方法来查找用户拥有的所有对象,以获取用户拥有的所有任务的列表用户 所以我的问题是: 而不是让用户每次都检查应用程序。 如何使用GCM推送通知用户? 如何判断将推送通知发送给哪个用户或设备? GCM如何知道何时更改了任务或何时用户发布任务? 回答1 根据GCM实施,它要求您实施一个远程服务器,该服务器将管理所有请求,包括传入和传出。 您可以简单地通过充当Web服务的Web服务器来执行此操作,该Web服务器将使用HTTP POST请求(例如)从客户端获取请求,并随后执行操作。 而不是让用户每次都检查应用程序
  • 使用Google Cloud Messaging在Android上进行即时消息传递(Instant Messaging on Android with Google Cloud Messaging)
    问题 我只是在查看新的Google Cloud Messaging(GCM),我想知道是否可以在您的Android应用程序上使用GCM进行即时消息传递? 我看到您可以从服务器发送数据,例如消息,但是也可以从一台设备发送到另一台设备吗? 以及这将如何工作? 一些示例代码将非常有帮助。 天哪! 回答1 适用于Android的Google Cloud Messaging的官方文档确实提到GCM可用于开发即时消息传递应用程序。 ...或者它可能是一条消息,其中包含多达4kb的有效负载数据(因此即时消息之类的应用程序可以直接使用该消息)。 因此,我们继续使用GCM创建了一个即时消息传递应用程序。 服务器端由Google App Engine驱动。 您可以在此处阅读完整的教程。 使用Google Cloud Messaging(GCM)创建即时消息应用程序 因此可以在Android上使用GCM进行即时通讯,以回答您的问题。 但是,与IM的XMPP相比,GCM的可靠性是另一个主题。 回答2 只是我的两分钱: 我认为您不应该使用GCM来发送IM。 您应该有一个专用服务器,您将使用持久套接字连接将您的Android IM应用程序连接到该服务器。 您的服务器将知道谁在线或不在线,因此可以向所有应用程序显示“在线列表”。 当用户离线或未运行您的应用时,GCM可以发挥作用。 可以向他们发送一条GCM消息
  • Google Cloud Messaging 向所有设备发送通知(Google Cloud Messaging send notification to all devices)
    问题 我是 GCM 的新手。 我想向所有安装了该应用程序的设备发送一条消息。 我读到了registration_id:在第一次连接到 GCM 后,谷歌将这个唯一的字符串发送到设备。 我是服务器世界的初学者,但如果我没有记错的话,在服务器端,为了向设备发送通知,我必须向谷歌发送一组 registration_id 和消息。 谷歌知道注册id是怎么来的? 有没有办法在不通过注册 ID 的情况下向所有设备发送消息? 谢谢你。 回答1 有没有办法在不通过注册 ID 的情况下向所有设备发送消息? 决不。 在 GCM 上成功注册后,您(Android 应用程序)应该将注册 ID 发送到您的应用程序服务器并将它们存储在某个地方,例如在数据库中。 此注册 ID 将用于向特定设备发送通知。 要向所有设备发送通知,则意味着从该数据库中选择所有注册 ID,如您所说,将它们放入一个数组中并将它们进一步传递给 GCM。 更新:借助 Firebase Cloud Messaging,现在可以使用 https://firebase.google.com/docs/cloud-messaging/android/topic-messaging 发送通知而无需明确指定注册 ID。 回答2 借助 GCM 3.0,由于主题支持,现在可以向所有设备发送通知。 应用程序必须订阅一个或多个主题,服务器可以向该主题发送通知
  • Android,是否可以在不使用 Google Cloud Messaging 系统的情况下向设备广播消息?(Android, Is it possible to broadcast a message to devices without using Google Cloud Messaging system?)
    问题 您可能知道,在某些国家/地区,Google 拒绝访问 Google 服务器(例如 www.android.com 及其所有子域(例如 developer.android.com))。 因此,不可能使用 GCM。 我有一个 NEWS & Magazine 应用程序,我想向特定设备广播消息。 例如,一些用户希望获得体育的新更新,而另一些用户可能希望获得其他类别的新更新。 我正在寻找一种模拟 GCM 系统的方法。 是否可以? 谢谢 回答1 除了 GCM 之外,还有许多不同的选择。 需要一些黑客的选项: MQTT - 博客 1、博客 2 aSmack 使用 XMPP 执事计划 第三方开箱即用提供商: 解析 城市飞艇 Push.io 等 另见: Android 是否支持近乎实时的推送通知? Android 平台中的推送通知 回答2 是的,有可能。 Message API (您可以使用任何格式的 JSON 或 XML) Android Service将连接到该消息 API 并检查新消息你可能还需要BroadcastReceiver 这是我使用的一些代码。 首先我在AndroidManifest.xml创建BroadcastReceiver和Service <receiver android:name="com.example.Push_Notification" > <intent
  • 谷歌云消息安全(google cloud messaging security)
    问题 公司创建一个项目并接收一个发件人ID。 公司创建一个应用程序,烘焙其发件人ID,然后将其放置在商店中。 攻击者对应用进行反向工程,并提取发送者ID和用于接收GCM注册ID的服务器接口。 攻击者创建自己的应用程序,烘烤公司的发件人ID和服务器注册界面,然后将应用程序放入商店。 攻击应用程序基本上就GCM而言都是公司的真实应用程序:它注册以从公司的发件人ID接收消息,然后像“真实”应用程序一样将其GCM注册ID发送到公司的服务器。 现在,公司希望向其应用程序的所有实例广播一些信息。 也许是提醒,提示没有可用的更新。 有什么方法可以将“攻击应用程序”(与真实应用程序一样注册)与公司应用程序的“真实”版本区分开来吗? 回答1 C2DM也可能存在相同的问题,您可以嗅探发件人的电子邮件地址,而不是GCM的项目ID。 C2DM或GCM绝对不能用于发送敏感的用户信息(例如,帐户名,私人信息等),它主要用于通知,而真正的应用程序可以使用它来执行进一步的操作。 我看不到通知对“假冒/骇客”应用有多大用处,它们与“您有新消息”通知有什么关系? 回答2 我认为从您的情况来看,即使攻击者具有注册ID,也无法向用户发送消息。 公司服务器首先通过Google发送他们需要在该帐户中进行身份验证(OAuth2)的消息。 因此,只有在攻击者知道发送方的密码和注册ID的情况下,攻击者才能发送用户。 但是
  • 如何在需要时在服务器上发送设备的位置(How to send location of the device on server when needed)
    问题 我正在开发一个应用程序,在该应用程序中,我需要当前的经度和较长时间的设备。 获取经纬度的时间范围将由服务器决定。 每当需要获取经/纬度时,服务器都会发送通知。 当设备从服务器收到通知时,同时设备会将其位置发送到服务器。 一些条件: 即使设备没有GPS,我也要纬度/经度如果用户没有触摸或单击通知,那么我也想获取经/纬度,即,即使设备处于睡眠模式。 我也不想一整天都在运行后台服务,因为它会消耗设备的电池电量。 回答1 我肯定会建议在这里使用Google Cloud Messaging 。 这样做的好处是,一旦设备运行了您的应用程序,您就可以使其在GCM注册,并且可以向他们发送一些消息,使他们将其坐标注册到您的数据库中。 这种方法将需要您实现一些服务器(例如,具有PHP的Web服务器),并使用户与之通信,因此流程如下: 您的服务器会向所有注册的设备发送一条广播消息,告知它们必须针对GCM服务进行注册。 设备获取消息,然后实现BroadcastReceiver以获取纬度和经度,并通过POST请求将其发送到远程服务器,例如http://www.mysuperserver.com/getlonglat.php 。 您的服务器同时使用这两个参数,然后保存它们或执行所需的任何操作。 如果要遵循这种方法,则必须遵循以下步骤: 前往https://console.developers
  • 是否需要从GCM迁移到FCM?(Migration from GCM to FCM needed?)
    问题 Google刚刚宣布Google Cloud Messaging现在是Firebase Cloud Messaging。 这对GCM的现有用户意味着什么?需要进行哪些迁移(如果有)? 回答1 更新:最近通过电子邮件宣布GCM已过时,并将于明年(2019)完全删除,所有GCM用户应开始迁移到FCM。 有关更多详细信息,请在此处查看我的答案。 除了Pritam Baral的回答外,请注意FCM的核心是GCM本身组成的。 实际不需要迁移到它,但是鼓励这样做,因为当迁移到FCM时,与它绑定的所有功能都可以使用。 当参考Firebase官方定价页面时,免费提供的功能包括: 分析,应用索引,身份验证,动态链接,FCM,邀请,通知,崩溃报告和远程配置 如GCM和FCM常见问题解答所述,IO之前的GCM实施将来仍应能工作更长的时间: 我们将继续支持当前版本的GCM Android和iOS SDK,因为我们知道今天有很多开发人员正在使用GCM SDK来处理通知,并且客户端应用程序的升级需要时间。 但是,所有新的客户端功能都只会添加到FCM SDK中。 强烈建议您升级到FCM SDK。 根据最近的亮点: Firebase Cloud Messaging建立并改进了Google Cloud Messaging API。 您可以通过com.google.android.gms
  • 是否需要从GCM迁移到FCM?(Migration from GCM to FCM needed?)
    问题 Google刚刚宣布Google Cloud Messaging现在是Firebase Cloud Messaging。 这对GCM的现有用户意味着什么?需要进行哪些迁移(如果有)? 回答1 更新:最近通过电子邮件宣布GCM已过时,并将于明年(2019)完全删除,所有GCM用户应开始迁移到FCM。 有关更多详细信息,请在此处查看我的答案。 除了Pritam Baral的回答外,请注意FCM的核心是GCM本身组成的。 实际不需要迁移到它,但是鼓励这样做,因为当迁移到FCM时,与它绑定的所有功能都可以使用。 当参考Firebase官方定价页面时,免费提供的功能包括: 分析,应用索引,身份验证,动态链接,FCM,邀请,通知,崩溃报告和远程配置 如GCM和FCM常见问题解答所述,IO之前的GCM实施将来仍应能工作更长的时间: 我们将继续支持当前版本的GCM Android和iOS SDK,因为我们知道今天有很多开发人员正在使用GCM SDK来处理通知,并且客户端应用程序的升级需要时间。 但是,所有新的客户端功能都只会添加到FCM SDK中。 强烈建议您升级到FCM SDK。 根据最近的亮点: Firebase Cloud Messaging建立并改进了Google Cloud Messaging API。 您可以通过com.google.android.gms
  • 是否可以使用Firebase Cloud Messaging(FCM)直接从设备发送PushNotifications到特殊的UDID?(Is it possible to send PushNotifications, using Firebase Cloud Messaging (FCM) to special UDID, directly from device?)
    问题 我正在考虑将所有注册ID(推送令牌)保留在数据库中,并通过iPhone向用户发送通知。 我尝试过类似的操作,但未收到任何通知。 func sendPNMessage() { FIRMessaging.messaging().sendMessage( ["body": "hey"], to: TOKEN_ID, withMessageID: "1", timeToLive: 108) } 我做错了,还是根本不可能? 回答1 当前,无法从应用程序本身发送消息。 您可以从Firebase Web控制台发送消息,也可以使用服务器端API从自定义服务器发送消息。 您可能想要做的是与服务器联系(例如通过http呼叫),然后该服务器会将消息发送给用户。 这样可以确保服务器的API-KEY受到保护。 PS: sendMessage(..) api被称为上游功能,如果服务器与FCM服务器之间存在XMPP连接,则可用于将消息从应用程序发送到服务器。 回答2 是的,您可以通过Firebase发送推送通知。请确保不要将服务器密钥包含在客户端中。 有一些“不那么伟大的人”可以找到它并做事的方法...实现此目标的正确方法是让您的客户端指示您的应用服务器发送通知。 您必须将HTTP帖子发送到Google-API-Endpoint。 您需要以下标头: Content-Type: application
  • Google Cloud Messaging-即时收到的消息或延迟很长时间的消息(Google Cloud Messaging - messages either received instantly or with long delay)
    问题 我在大学的最后一个项目中正在使用Google云消息传递。 一切正常,但是我在使用GCM时遇到了一些麻烦。 通常,消息要么立即发送,要么延迟很大。 我读过这篇文章,但在这种情况下我真的不认为它适用: GCM通常会在邮件发送后立即发送。 但是,这可能并不总是可能的。 例如,设备可能已关闭,处于脱机状态或不可用。 在其他情况下,发送者本身可能会使用delay_while_idle标志请求在设备变为活动状态之前不传递消息。 最后,GCM可能有意延迟消息,以防止应用程序消耗过多的资源并对电池寿命造成负面影响。 在我的项目中,每分钟最多只能讨论来自服务器的5到6条消息。 如果可以肯定地将GCM用于聊天应用程序,则它们不能阻止以此速率发送/接收的消息吗? 如果我的项目仅在50%的时间里有效,它将变得很烦人并且会变得非常糟糕。 这是服务器发送的消息的我的代码: @Override public void run() { Message.Builder messageBuilder = new Message.Builder().delayWhileIdle(false); Gson gson = new Gson(); messageBuilder.addData("profile", gson.toJson(profile)); databaseConnection
  • 如何通过CURL向所有设备发送Firebase通知?(How do you send a Firebase Notification to all devices via CURL?)
    问题 我正在尝试向所有应用程序用户发送通知(在Android上),实际上是在重复通过Firebase管理控制台发送通知时发生的情况。 这是我开始的CURL命令: curl --insecure --header“ Authorization:key = AIzaSyBidmyauthkeyisfineL-6NcJxj-1JUvEM” –header“ Content-Type:application / json” -d“ {\” notification \“:{\” title \“:\” note -Title \“,\” body \“:\” note-Body \“}}”“ https://fcm.googleapis.com/fcm/send 这是解析出来的JSON,在您看来更轻松: { "notification":{ "title":"note-Title", "body":"note-Body" } } 返回的响应只是两个字符: 到 就是这样,“ to”一词。 (标题报告为400)我怀疑这与JSON中没有“ to”有关。 人们甚至会为“致”做些什么? 我没有定义主题,设备也没有注册任何东西。 但是,他们仍然能够从Firebase管理面板接收通知。 由于Firebase通知处理的惊人局限性,我想尝试“仅数据” JSON包,即如果您的应用程序位于前台
  • Google Cloud Messaging 是否向处于待机模式的设备发送消息?(Does Google Cloud Messaging send messages to devices that are in standby mode?)
    问题 如果 Android 设备处于待机模式,屏幕处于关闭状态,Google Cloud Messaging 是否可以向该设备发送消息? 或者 GCM 是否必须等到设备退出待机模式才能接收消息? 在文档中它指出: 如果设备离线,Google 会将消息加入队列并存储。 当设备在线时,Google 会向设备发送消息。 然而,没有说明offline或online是什么意思。 即使屏幕关闭,设备是否仍然在线? 回答1 是 mobile 可以在待机模式下接收消息,除非并且直到它连接到互联网。 在他们的文档中, online意味着连接到internet , offline意味着没有连接到internet 。 回答2 您可以使用delay_while_idle标志控制是否将消息发送到处于待机模式的delay_while_idle 。 如果您的消息中不包含此标志,则默认值为 false,消息将立即发送。 当然,该消息是否会唤醒设备取决于您的代码如何处理通知以及您的应用程序是否具有WAKE_LOCK权限。 delay_while_idle 如果包含,则表示如果设备空闲,则不应立即发送消息。 服务器将等待设备变为活动状态,然后仅发送每个 collapse_key 值的最后一条消息。 可选的。 默认值为 false,并且必须是 JSON 布尔值。
  • Google Cloud Messaging-CCS(XMPP)与HTTP服务器(Google Cloud Messaging - CCS (XMPP) vs HTTP server)
    问题 我已经阅读了文档https://developer.android.com/google/gcm/index.html 我唯一看到的区别是基于CCS(XMPP)的服务器允许直接在android设备和GCM服务器之间进行双向通信。 还有其他原因为什么您会选择通过HTTP选择CCS(XMPP),反之亦然? 回答1 CCS(XMPP)是异步的,这意味着它应该比HTTP更快。 它还使用设备上现有的GCM连接将消息从您的应用程序发送到服务器(这可以节省电池,因为您不必打开自己的服务器连接)。 另一方面,HTTP的编码要简单得多,因此除非需要双向功能或需要以很高的速度发送消息,否则我会坚持使用HTTP。 回答2 您可以通过一次对gcm的http调用一次将消息广播到1000个设备。 对于广播,http优于CCS。 回答3 不幸的是,谷歌云平台将在一年后https://cloud.google.com/appengine/docs/deprecations/xmpp禁用XMPP API 我会选择XMPP来节省设备电池的电量,这是当今最大的担忧之一! 回答4 XMPP消息传递与HTTP消息传递在以下方面有所不同: 上游/下游消息 HTTP:仅下游,云到设备。 XMPP:上游和下游(设备到云,云到设备)。 消息传递(同步或异步) HTTP:同步。 应用服务器将消息作为HTTP POST请求发送
  • 如何在不使用Firebase控制台的情况下发送Firebase Cloud Messaging通知?(How can I send a Firebase Cloud Messaging notification without use the Firebase Console?)
    问题 我将从通知的新Google服务Firebase Cloud Messaging 。 多亏了这段代码https://github.com/firebase/quickstart-android/tree/master/messaging,我才能够将通知从Firebase用户控制台发送到Android设备。 是否有任何API或方法都可以在不使用Firebase控制台的情况下发送通知? 我的意思是,例如,一个PHP API或类似的东西,可以直接从我自己的服务器创建通知。 回答1 Firebase Cloud Messaging具有服务器端API,您可以调用它们来发送消息。 请参阅https://firebase.google.com/docs/cloud-messaging/server。 发送消息就像使用curl调用HTTP端点一样简单。 请参阅https://firebase.google.com/docs/cloud-messaging/server#implementing-http-connection-server-protocol curl -X POST --header "Authorization: key=<API_ACCESS_KEY>" \ --Header "Content-Type: application/json" \ https://fcm
  • GCM 主题或下游消息传递(GCM Topics or Downstream Messaging)
    问题 我正在尝试将 GCM 添加到我的应用程序中,它是具有提要、帖子、评论的通用社交应用程序之一。 想想脸书。 我阅读了将消息发送到主题的帖子:https://developers.google.com/cloud-messaging/topic-messaging,其中说: 基于发布/订阅模型,主题消息支持每个应用最多一百万个订阅。 一个主题的 100 万订阅实际上很少。 如果一个人订阅不同的帖子,这可能会很快用完。 例如,对于 Facebook,您每次对朋友的帖子发表评论,都是一次订阅。 当下一个人评论或喜欢该帖子时,您会收到来自该帖子的通知。 我现在正在考虑使用 GCM 主题是否真的是一个好主意。 为了解决这个限制,我最好使用正常的下游消息传递,因为它似乎没有配额:https://developers.google.com/cloud-messaging/downstream 不过,我对下游消息传递中的一件事感到困惑 - 每次发送下游消息时,都会发出一个 POST 请求: HTTP POST 请求 https://gcm-http.googleapis.com/gcm/send Content-Type:application/json Authorization:key=AIzaSyZ-1u...0GBYzPu7Udno5aA { "data": { "score":
  • Firebase是否可以处理推送通知?(Does firebase handle push notifications?)
    问题 我正在研究firebase和angularfire是否适合我即将进行的项目。 其中一项要求是,当应用关闭后,发送给用户的新私人消息即会通知用户。 推送通知。 firebase处理这个吗? 回答1 是的。 但是直到最近才是这样。 感谢@libik提供相关的文档链接: https://firebase.google.com/docs/cloud-messaging/server#http-request 更新5/2016: 在Google io 16上,Google宣布了FCM-Firebase云消息传递服务。 随着最近宣布在Google I / O上扩展Firebase的功能,我们还推出了Firebase Cloud Messaging(FCM)和Firebase Notifications(FN)。 作为开发人员,您可能会利用很多更新。 有关更多信息,请访问:https://developers.googleblog.com/2016/05/google-cloud-messaging-and-firebase.html 文档:https://firebase.google.com/docs/cloud-messaging/#key_functions 回答2 截至今天,Google I / O已宣布新的Firebase Cloud Messaging
  • 如何使用Firebase Cloud Messaging发送设备到设备的消息?(How to send device to device messages using Firebase Cloud Messaging?)
    问题 搜索文档后,我不找到有关如何在不使用外部服务器的情况下使用FCM将设备发送到设备消息的任何信息。 例如,如果我正在创建一个聊天应用程序,则我需要向用户发送有关未读消息的推送通知,因为它们不会一直在线,而且我无法在后台使用持久性服务来始终连接到该消息实时数据库,因为那样会占用大量资源。 那么当某个用户“ B”向他/她发送聊天消息时,我将如何向用户“ A”发送推送通知? 我是否需要一台外部服务器,还是仅使用Firebase服务器即可完成? 回答1 更新:现在可以将Firebase云功能用作处理推送通知的服务器。 在这里查看他们的文档 ============ 根据文档,您必须实现一个服务器以处理设备到设备通信中的推送通知。 在编写使用Firebase Cloud Messaging的客户端应用程序之前,必须具有满足以下条件的应用程序服务器: ... 您需要确定要使用哪种FCM连接服务器协议来使您的应用服务器与FCM连接服务器进行交互。 请注意,如果要使用客户端应用程序中的上游消息传递,则必须使用XMPP。 有关此内容的详细讨论,请参阅选择FCM连接服务器协议。 如果您只需要从服务器向用户发送基本通知。 您可以使用他们的无服务器解决方案Firebase Notifications。 请在此处查看FCM和Firebase通知之间的比较:https://firebase.google
  • Android是否支持近乎实时的推送通知?(Does Android support near real time push notification?)
    问题 我最近了解到iPhone应用程序能够接收几乎即时的应用程序通知的功能。 它以推送通知的形式提供,这是一个定制协议,可以始终保持与iPhone的数据连接,并向应用程序发送二进制数据报文,从而在服务器应用程序发送至手机应用程序0.5至5秒之间迅速弹出警报,令人难以置信响应时间。 这是作为数据而不是SMS发送的,以非常小的数据包形式发送,这些数据包是数据计划的一部分,而不是传入消息。 我想知道使用Android是否有类似的功能,或者是否有可能使用Android API来实现与之接近的功能。 为了澄清起见,我将类似定义为: 不是短信,而是一些数据驱动的解决方案尽可能实时具有可扩展性,即作为移动应用程序的服务器部分,我可以在几秒钟内通知数千个应用程序实例 我很感激该应用程序可能是基于请求的HTTP请求/响应样式,但是理想情况下,我不想为了检查通知而进行大量轮询。 除此之外,这就像滴水沥干数据计划一样。 回答1 Firebase Cloud Messaging FCM常见问题解答是GCM的新版本。 它继承了GCM的核心基础架构,可在Android,iOS和Chrome上可靠地传递消息。 但是,他们将继续支持GCM,因为当今许多开发人员正在使用GCM SDK来处理通知,并且客户端应用程序升级需要时间。 自2012年6月26日起,首选的方法是将Google Cloud