您的位置:首页 > 编程语言 > Java开发

Android一点 让eclipse全功能支持Google Firebase

2017-06-20 15:19 591 查看
谷歌抛弃eclipse已久,但是eclipse档还是很多人,这不,想用谷歌的firebase做分析、推送等功能时,使用eclipse的就尴尬了,谷歌没有提供支持了。下面我们就分析一下怎么制作我们eclipse的firebase库

1、Firebase入门官网文档:https://firebase.google.com/docs/android/setup

官方的示例:https://firebase.google.com/docs/samples/#android

对于Android studio接入firebase这里就不叙述了,因为实在是比较简单,这里了解firebase就行

2、我们以分析功能为例子,编译Analytics工程即可,为啥呢,之前没有了解的可以看上一篇文章,有详情的介绍。反编译一下这个apk,着重看看string.xml文件和AndroidManifest.xml文件,看看到底增加了什么鬼,对了,关于google-services.json 文件信息的作用说明https://developers.google.com/android/guides/google-services-plugin,文件包含的主要是下面这些信息,这时候应该想到这个是初始化需要用到的参数

The main result of the JSON processing is to produce two XML files which you can reference as Android resources in your Java code. Below is an example of each file:

app/build/generated/res/google-services/{build_type}/values/values.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>

<! -- Present in all applications -->
<string name="google_app_id" translatable="false">1:1035469437089:android:73a4fb8297b2cd4f</string>

<! -- Present in applications with the appropriate services configured -->
<string name="gcm_defaultSenderId" translatable="false">1035469437089</string>
<string name="default_web_client_id" translatable="false">337894902146-e4uksm38sne0bqrj6uvkbo4oiu4hvigl.apps.googleusercontent.com</string>
<string name="ga_trackingId" translatable="false">UA-65557217-3</string>
<string name="firebase_database_url" translatable="false">https://example-url.firebaseio.com</string>
<string name="google_api_key" translatable="false">AIzbSyCILMsOuUKwN3qhtxrPq7FFemDJUAXTyZ8</string>
<string name="google_crash_reporting_api_key" translatable="false">AIzbSyCILMsOuUKwN3qhtxrPq7FFemDJUAXTyZ8</string>

</resources>
app/build/generated/res/google-services/{flavor}/{build_type}/xml/global_tracker.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="ga_trackingId" translatable="false">UA-65557218-3</string>
</resources>
Every value in the XML files is present in the google-services.json file at the locations below. If your Android project has some configuration that prevents you from using the google-services plugin, you can safely recreate the XML files manually using these values:

google_app_id:

{YOUR_CLIENT}/client_info/mobilesdk_app_id
gcm_defaultSenderId:

project_info/project_number
default_web_client_id:

{YOUR_CLIENT}/oauth_client/client_id (client_type == 3)
ga_trackingId:

{YOUR_CLIENT}/services/analytics-service/analytics_property/tracking_id
firebase_database_url:

project_info/firebase_url
google_api_key:

{YOUR_CLIENT}/api_key/current_key
google_crash_reporting_api_key:

{YOUR_CLIENT}/api_key/current_key


下面再具体分析string.xml、AndroidManifest.xml到底增加了些什么呢?

string.xml增加了:

<! -- Present in all applications -->
<string name="google_app_id" translatable="false">1:1035469437089:android:73a4fb8297b2cd4f</string>

<! -- Present in applications with the appropriate services configured -->
<string name="gcm_defaultSenderId" translatable="false">1035469437089</string>
<string name="default_web_client_id" translatable="false">337894902146-e4uksm38sne0bqrj6uvkbo4oiu4hvigl.apps.googleusercontent.com</string>
<string name="ga_trackingId" translatable="false">UA-65557217-3</string>
<string name="firebase_database_url" translatable="false">https://example-url.firebaseio.com</string>
<string name="google_api_key" translatable="false">AIzbSyCILMsOuUKwN3qhtxrPq7FFemDJUAXTyZ8</string>
<string name="google_crash_reporting_api_key" translatable="false">AIzbSyCILMsOuUKwN3qhtxrPq7FFemDJUAXTyZ8</string>


AndroidManifest.xml增加了

权限:

<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />

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

<uses-permission android:name="包名.permission.C2D_MESSAGE" />


其它什么鬼:

<receiver
android:name="com.google.android.gms.measurement.AppMeasurementReceiver"
android:enabled="true"
android:exported="false" />
<receiver
android:name="com.google.android.gms.measurement.AppMeasurementInstallReferrerReceiver"
android:enabled="true"
android:exported="true"
android:permission="android.permission.INSTALL_PACKAGES" >
<intent-filter>
<action android:name="com.android.vending.INSTALL_REFERRER" />
</intent-filter>
</receiver>

<service
android:name="com.google.android.gms.measurement.AppMeasurementService"
android:enabled="true"
android:exported="false" />
<service
android:name="com.google.android.gms.measurement.AppMeasurementJobService"
android:enabled="true"
android:exported="false"
android:permission="android.permission.BIND_JOB_SERVICE" />

<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" />

<category android:name="包名" />
</intent-filter>
</receiver>
<receiver
android:name="com.google.firebase.iid.FirebaseInstanceIdInternalReceiver"
android:exported="false" />

<service
android:name="com.google.firebase.iid.FirebaseInstanceIdService"
android:exported="true" >
<intent-filter android:priority="-500" >
<action android:name="com.google.firebase.INSTANCE_ID_EVENT" />
</intent-filter>
</service>

<provider
android:name="com.google.firebase.provider.FirebaseInitProvider"
android:authorities="包名.firebaseinitprovider"
android:exported="false"
android:initOrder="100" />

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


3、看看怎么初始化Firebase

/**
* 初始化FirebaseApp
*/
public static boolean init(Context context) {
if (FirebaseApp.getApps(context).isEmpty()) {
try {
FirebaseOptions options =        FirebaseOptions.fromResource(context);
FirebaseApp.initializeApp(context, options);
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
return false;
}
}

return true;
}


例如怎么上报分析数据,login数据

/**
* 獲取FirebaseAnalytics
*
* @param context
* @return
*/
public static FirebaseAnalytics getFirebaseAnalytics(Context context) {
if (mFirebaseAnalytics == null) {
mFirebaseAnalytics = FirebaseAnalytics.getInstance(context);
}
return mFirebaseAnalytics;
}

/**
* firebase的登录事件
*
* @param context
*/
public static void fireBaseLoginEvent(Context context) {
Bundle params = new Bundle();
getFirebaseAnalytics(context).logEvent(FirebaseAnalytics.Event.LOGIN, params);
}


看看log是否接入成功:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息