Android一点 让eclipse也支持FCM(Firebase Cloud Messaging)
来源:互联网 发布:genbank数据库 编辑:程序博客网 时间:2024/05/22 06:35
接入谷歌推送(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
在运行,就可以接收到推送了,那么as上就集成完成了,那么eclipse上该怎么使用呢?
apply plugin: 'com.google.gms.google-services'
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库制作完成!
- Android一点 让eclipse也支持FCM(Firebase Cloud Messaging)
- 整合Firebase Cloud Messaging (FCM)到Eclipse工程
- Google FCM推送(Firebase Cloud Messaging)
- FCM(Firebase Cloud Messaging) 接入问题说明
- Android一点 让eclipse全功能支持Google Firebase
- GCM 的升级版——FCM(firebase cloud messaging)
- FCM issues (Firebase Cloud Message)
- Firebase Cloud Messaging接入文档
- Apply for Google FCM ( Firebase Cloud Message ) Project & Configure Android Project
- Google Cloud Messaging for Android
- Google Cloud Messaging for Android
- android: Google Cloud Messaging (GCM)
- Firebase系列之---Cloud Messaging/Notifications(云消息,推送)的使用
- Android Cloud to Device Messaging Framework
- Google Cloud Messaging Android版开发出现
- Android Cloud to Device Messaging Framework
- Google Cloud Messaging(GCM) for Android
- 让Android也支持华为EM770模块
- 枚举类的写法与用法
- 3DES对称算法之双倍长密钥算法和三倍长密钥算法
- makefile里等号的意义
- Person Re-identification Datasets
- C语言之union共同体
- Android一点 让eclipse也支持FCM(Firebase Cloud Messaging)
- 后台return中文到前台乱码 解决办法
- ParameterizedThreadStart与ThreadStart的区别
- 二、HBase深入使用(2)—HBase架构深入剖析
- 第十届“中国电机工程学会杯”全国大学生电工数学建模竞赛 B 题 全面二孩政策对我国人口结构的影响
- keil #pragma anon_unions
- DAY2 操作系统
- 51Nod-1349-最大值
- 关于Unity中Rigidbody组件的各个变量的含义