通过Firebase云消息向Android设备发送消息

问题描述:

我在调查使用从旧版Google云消息应用迁移而来的Firebase云消息传递向项目发送消息的可能性。通过Firebase云消息向Android设备发送消息

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

因此,每一个Android设备只需要与代码登记,如:

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

让谷歌服务器使每个设备单独寻址。 (该regs存储在我的服务器上的MySql数据库中,所以我知道要寻址哪个设备。

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

在我看来,一个火力地堡项目必须通过包名相关

我的问题是:

是否有可能我可以创建一个应用程序来复制与火力地堡即此功能?用任意包名称并以类似于GCM项目的方式获得regid(或现在:令牌)?

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

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

并且还向您的Android Manifest文件添加FirebaseInstanceId & FirebaseMessaging Service

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

有关Android的示范项目,只要到:https://github.com/firebase/quickstart-android/tree/master/messaging

欲了解更多有关火力地堡:https://firebase.google.com/docs/cloud-messaging/android/client

其实它不是很难从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; 

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

如果您只是在不将当前项目导入Firebase项目的情况下使用FCM,则使用Firebase的大部分好处都将丢失。