【问题标题】:Sending messages via Firebase Cloud Messaging to an Android device通过 Firebase Cloud Messaging 向 Android 设备发送消息
【发布时间】:2016-07-16 10:50:17
【问题描述】:

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

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

因此每个安卓设备只需要注册如下代码:

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

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

Android 应用只需要知道项目号(以上代码中的 PROJECT_ID)即可。应用可以有任何包名。

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

我的问题是:

是否可以使用 Firebase 复制此功能?即,我能否以与 GCM 项目类似的方式创建一个具有任何包名称的应用并获得一个 regid(或现在:令牌)? .

【问题讨论】:

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


    【解决方案1】:

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

    并更新您的项目和模块gradle build files

    并且还将 FirebaseInstanceId 和 FirebaseMessaging Service 添加到您的 Android 清单文件中。

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

    Android 上的演示项目,请访问:https://github.com/firebase/quickstart-android/tree/master/messaging

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        【解决方案3】:

        其实从 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;
        

        【讨论】:

          猜你喜欢
          • 2016-09-22
          • 1970-01-01
          • 1970-01-01
          • 2023-03-28
          • 1970-01-01
          • 2014-02-21
          • 1970-01-01
          相关资源
          最近更新 更多