Android一點 讓eclipse也支持FCM(Firebase Cloud Messaging)

接入谷歌推送(Firebase Cloud Messaging),我們知道,谷歌現在只支持Android studio了,那麼如果eclipse需要使用怎麼辦呢?好像已經被拋棄了,只能自己弄一個庫了。

1、進入FCM,創建我們的測試應用,輸入包名即可,然後下載google-services.json文件
2、先看看as上怎麼集成fcm,然後依賴compile 'com.google.firebase:firebase-messaging:9.6.1',編寫自己的FirebaseMessagingService、FirebaseInstanceIdService,在AndroidManifest.xml中加上這兩個服務。最後,運行,測試,發現會報一個錯誤,如下
這裏寫圖片描述

這是什麼鬼,好像我們還需要在build.gradle上添加// ADD THIS AT THE BOTTOM
apply plugin: 'com.google.gms.google-services'
在運行,就可以接收到推送了,那麼as上就集成完成了,那麼eclipse上該怎麼使用呢?

3、對於google-services.json文件到底是有什麼作用,還有有沒發現,是不是沒有初始化的代碼?所以我們可以使用as跟進去查看代碼,as看源碼很方便,直接點進去就有了,FirebaseApp.initializeApp(),需要傳入FirebaseOptions參數,我們仔細看看屬性和google-services.json文件的值就會發現,其實就是需要這些值來初始化
這裏寫圖片描述

4、開始製作eclipse fcm庫,新建一個eclipse項目,查看as項目看看引用了什麼jar,
這裏寫圖片描述
右鍵,打開找到所在位置,複製jar和res資源到eclipse上,此時我們有了jar庫了

5、讀取json文件參數,初始化FirebaseApp.initializeApp(),把json文件放到assets文件夾下讀取

ParseJson.java
package com.example.test3;
import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.util.HashMap;

import org.json.JSONObject;

import android.content.Context;

/**
 * google-services.json文件讀取與解析
 * @author Flyjun
 *
 */
public class ParseJson {
    private static HashMap<String, String> hashMap = new HashMap<String, String>();
    //Json文件讀取
    protected static HashMap<String, String> resolve(Context context) {
        try {
            InputStream is = context.getResources().getAssets().open("google-services.json");
            ByteArrayOutputStream outStream = new ByteArrayOutputStream();
            byte buffer[] = new byte[1024];
            int len = 0;
            while ((len = is.read(buffer)) != -1){
                outStream.write(buffer, 0, len);
            }
            outStream.flush();
            String json = new String(outStream.toByteArray(), "ISO-8859-1");
            createHashMap(json);
            //關閉輸入輸出流
            outStream.close();
            is.close();
            buffer = null;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return hashMap;
    }
    /**Json文件解析
     * 獲取FirebaseOptions.Builder對應的值
     * @param str
     * @throws Exception
     */
    private static void createHashMap(String str) throws Exception{
        JSONObject json = new JSONObject(str);
        JSONObject info = json.getJSONObject("project_info");
        JSONObject client = json.getJSONArray("client").getJSONObject(0);
        JSONObject apiKey = client.getJSONArray("api_key").getJSONObject(0);
        hashMap.put("ProjectId", info.getString("project_id"));
        hashMap.put("ApiKey", apiKey.getString("current_key"));
        hashMap.put("ApplicationId", client.getJSONObject("client_info").getString("mobilesdk_app_id"));
        hashMap.put("DatabaseUrl", info.getString("firebase_url"));
        hashMap.put("GcmSenderId", info.getString("project_number"));
        hashMap.put("StorageBucket", info.getString("storage_bucket"));
    }

}

初始化操作

if(FirebaseApp.getApps(this).isEmpty()){
            FirebaseOptions.Builder builder = new FirebaseOptions.Builder();
            builder.setApiKey(params.get("ApiKey"));
            builder.setApplicationId(params.get("ApplicationId"));
            builder.setDatabaseUrl(params.get("DatabaseUrl"));
            builder.setGcmSenderId(params.get("GcmSenderId"));
            builder.setStorageBucket(params.get("StorageBucket"));
            FirebaseOptions options = builder.build();
            FirebaseApp.initializeApp(this, options);
        }

獲取Token值

 String refreshedToken = FirebaseInstanceId.getInstance().getToken();
         System.out.println("refreshedToken:"+refreshedToken);

添加FirebaseMessagingService、FirebaseInstanceIdService

6、完成了上面的操作,有初始化了,但是還不是不能接收到推送信息,想想我們的接入jpush什麼的是不是有權限什麼的,是的,fcm也需要,是時候來編譯messaging demo,打開AndroidManifest.xml,你會發現我們還需要添加

<!-- fcm所需權限 -->
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.WAKE_LOCK" />
    <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />

    <permission
        android:name="包名.permission.C2D_MESSAGE"
        android:protectionLevel="signature" />

    <uses-permission android:name="包名.permission.C2D_MESSAGE" />
<!-- iid服務和監聽器 begin -->
        <receiver
            android:name="com.google.firebase.iid.FirebaseInstanceIdReceiver"
            android:exported="true"
            android:permission="com.google.android.c2dm.permission.SEND" >
            <intent-filter>
                <action android:name="com.google.android.c2dm.intent.RECEIVE" />
                <action android:name="com.google.android.c2dm.intent.REGISTRATION" />

                <category android:name="包名" />
            </intent-filter>
        </receiver>

        <!--
             Internal (not exported) receiver used by the app to start its own exported services
             without risk of being spoofed.
        -->
        <receiver
            android:name="com.google.firebase.iid.FirebaseInstanceIdInternalReceiver"
            android:exported="false" />

         <meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version" />

此時運行eclipse項目,就可以接收到推送了
這裏寫圖片描述

eclipse fcm庫製作完成!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章