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

时间:2016-07-16 10:50:17

标签: android firebase google-cloud-messaging firebase-cloud-messaging

我正在调查使用从旧的Google云消息传递应用迁移的Firebase云消息传递消息到项目的可能性。

旧应用程序仅使用CURL和应用程序唯一的GCM API软件从php网页向Android设备发送消息。

因此每个Android设备只需要注册代码,如:

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

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

Android应用只需要知道项目编号(上面代码中的PROJECT_ID)。该应用程序可以包含任何包名称。

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

我的问题是:

是否可以使用Firebase复制此功能? I.e我可以用任何包名创建一个应用程序,并以与GCM项目类似的方式获得regid(或now:token)吗?

3 个答案:

答案 0 :(得分:1)

您只需将应用添加到Firebase控制台即可。然后下载google-services.json文件并将其复制到项目模块中(通常命名为" app")。

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

并添加 FirebaseInstanceId& FirebaseMessaging服务到您的Android清单文件。

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

对于Android上的演示项目,请转到:https://github.com/firebase/quickstart-android/tree/master/messaging

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

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

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

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;
}

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

$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;