当前位置: 首页 > 知识库问答 >
问题:

通过Firebase Cloud Messaging向Android设备发送消息

东门晨
2023-03-14

我正在研究使用从旧的Google云消息传递应用程序迁移的Firebase云消息传递向项目发送消息的可能性。

旧应用程序仅使用CURL和应用程序在我的服务器上的唯一GCM API密钥从php网页向Android设备发送消息。

因此,每个android设备只需注册代码,例如:

mGcm = GoogleCloudMessaging.getInstance(mContext);
mRegid = mGcm.register(PROJECT_ID);

让 Google 服务器使每台设备都可单独寻址。(注册表存储在我的服务器上的MySql数据库中,因此我知道要处理哪个设备。

Androidapp只需要知道项目编号(PROJECT_ID上面的代码),app可以有任意的包名。

在我看来,Firebase项目必须与包名称相关联。

我的问题是:

Firebase有可能复制这种功能吗?例如,我可以用任何包名创建一个应用程序,并以类似于GCM项目的方式获得一个regid(或now: token)吗?。

共有3个答案

白嘉石
2023-03-14

实际上,从GCM迁移到FCM并不是很困难。由此,据说您只需要替换:

gcm-http.googleapis.com/gcm/

fcm.googleapis.com/fcm/

这是从mysql数据库发送带有注册ID的FCM的示例:首先创建一个函数来使用您的serverKey发送通知

function send_notification($tokens, $message){
    $url = 'https://fcm.googleapis.com/fcm/send';
    $fields = array(
         'registration_ids' => $tokens,
         'data' => $message
        );

    $headers = array(
         'Authorization:key = 
            AIzaYOUR_SERVER_KEY',
         'Content-Type: application/json'
        );

    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($fields));

    $result = curl_exec($ch);
    if($result === FALSE){
        die('Curl failed : ' . curl_error($ch));
    }
    curl_close($ch);
    return $result;
}

要使用上述功能,您需要查询注册Id列表,例如:

$conn = mysqli_connect("localhost","dbuser","dbpass","dbname");
$sql = " Select Token From users";
$result = mysqli_query($conn,$sql);
$tokens = array();

if(mysqli_num_rows($result) > 0){
    while($row = mysqli_fetch_assoc($result)){
        $tokens[] = $row["Token"];
    }
}

mysqli_close($conn);

$message = array("messageText" => " FCM PUSH NOTIFICATION TEST MESSAGE");
$message_status = send_notification($tokens,$message);
echo $message_status;
段干宜
2023-03-14

是的,使用FCM,实例id令牌(设备ID)的生成仍然基于项目ID,并且您仍然可以使用IID令牌和来自项目的有效API密钥发送到该设备。

但是,如果您只使用 FCM 而不将当前项目导入 Firebase 项目,则使用 Firebase 的大部分好处都将丧失。

魏泰
2023-03-14

您只需要将应用程序添加到Firebase控制台。然后下载google服务。json文件并将其复制到项目模块中(通常称为“app”)。

并更新您的项目和模块gradle构建文件。

并添加火基实例Id

FirebaseInstanceId服务自动管理特定设备令牌的创建和更新。从方法onTokenRenew中,您可以将令牌发送到您的Mysql数据库。

对于Android上的演示项目,只需访问:https://github . com/firebase/quick start-Android/tree/master/messaging

有关Firebase的更多信息:https://firebase.google.com/docs/cloud-messaging/android/client

 类似资料:
  • 我有一个包含用户名数据库的服务器。我还有一个Android应用程序,用户可以在服务器数据库中注册自己的用户名,也可以在服务器的GCM部分注册设备。 我目前正在服务器代码中使用GCM演示,它将多播一个推送通知到每个注册的设备。但是,我希望它能够将推送通知发送给某些用户,而不是每个注册的GCM设备。 我的第一个想法是将数据库中的每个用户与其GCM注册表关联起来。这样行吗?我读过一些关于regID更改或

  • 我对Spring websocket相当陌生。我有一个简单的演示如下: HandshakeInterceptor类: } WebsocketEndPoint类: } Spring映射webSocket: Html: 现在我想向特定用户发送一条消息。我定义每个设备都有一个deviceId,所以我想知道: 如何与属性握手,这将从客户端发送? 如何从客户端javascript发送握手属性? 如何通过握手

  • 我需要使用< code>aws-sdk-go lib通过设备令牌数组向多个设备发送SNS推送通知。 目前我正在使用以下步骤向SNS发送推送消息: 创建endpoint: 将消息发送到endpoint: 我还没有见过一种方法,只使用一个请求就可以将一个推送消息发送到多个设备。可能吗? 像这个例子来说明:

  • 我正在编写一个定制的Android Wear应用程序,该应用程序应该向连接的主机设备(手机)发送一次性消息。通过对API的深入研究,我发现以下教程应该可以很好地工作:http://developer.android.com/training/wearables/data-layer/messages.html 我的Android应用程序有一个WearableListenerService,我的An

  • 问题内容: 我正在关注http://javapapers.com/android/google-cloud-messaging-gcm-for-android- and-push-notifications/ 吗?通过GCM发送推送通知。一切正常,但是,我只能将推送通知发送到一台设备。注册另一台设备将替换先前设备的注册ID。我在http://javapapers.com/android/andro