我正在调查使用从旧的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)吗?
答案 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;