使用Maven Android项目配置Firebase推送消息 [英] Configure Firebase push messages with Maven Android project

查看:329
本文介绍了使用Maven Android项目配置Firebase推送消息的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

有没有一种方法可以在不使用Gradle的情况下正确配置Firebase的消息传递?



我已经将这个依赖关系添加到了pom.xml中。 b

 < dependency> 
< groupId> com.google.firebase< / groupId>
< artifactId> firebase-messaging< / artifactId>
< version> 9.0.2< / version>
< type> aar< / type>
< /依赖>

通过从位于firebase AAR中的AndroidManifest.xml文件复制配置,修改了我的AndroidManifest.xml。我没有找到在maven buld中使用过滤资源或替换插件(如gradle插件)来过滤它们的方法。

 <使用权限android:name =android.permission.WAKE_LOCK/> 
< uses-permission android:name =com.google.android.c2dm.permission.RECEIVE/>
< permission android:name =< MY_APP_PACKAGE> .permission.C2D_MESSAGEandroid:protectionLevel =signature/>
< uses-permission android:name =< MY_APP_PACKAGE> .permission.C2D_MESSAGE/>

<! - 从firebase通用模块复制,可以设置< MY_APP_PACKAGE>
(在gradle插件编译期间设置) - >
< provider
android:authorities =< MY_APP_PACKAGE> .firebaseinitprovider
android:name =com.google.firebase.provider.FirebaseInitProvider
android:exported = false
android:initOrder =99/>
<! - 从firebase iid模块复制,可以设置< MY_APP_PACKAGE>
(在gradle插件编译期间设置) - >
< 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 =< MY_APP_PACKAGE> />
< / intent-filter>
< / receiver>
< service android:name =。service.PushMessageService>
< intent-filter>
< action android:name =com.google.firebase.MESSAGING_EVENT/>
< / intent-filter>
< / service>
< service android:name =.service.GoogleIDService>
< intent-filter>
< action android:name =com.google.firebase.INSTANCE_ID_EVENT/>
< / intent-filter>
< / service>

另外,添加的字符串资源(由配置json文件中的gradle插件自动设置)

 < string name =google_app_idtranslatable =false> ...< / string> 
< string name =google_api_keytranslatable =false> ...< / string>
< string name =firebase_database_urltranslatable =false> ...< / string>
< string name =ga_trackingIdtranslatable =false> ...< / string>
< string name =google_storage_buckettranslatable =false> ...< / string>

运行应用程序后,我有这些日志

  D / FirebaseApp:com.google.firebase.auth.FirebaseAuth未链接。跳过初始化。 
D / FirebaseApp:已初始化的类com.google.firebase.iid.FirebaseInstanceId。
D / FirebaseApp:com.google.firebase.crash.FirebaseCrash未链接。跳过初始化。
D / FirebaseApp:com.google.android.gms.measurement.AppMeasurement未链接。跳过初始化。
I / FirebaseInitProvider:FirebaseApp初始化成功

文档说Firebase会自动请求新令牌我永远不会收到 onTokenRefresh 回调
是否有任何我错过了?



PS:请不要建议使用Gradle ....

任何帮助表示赞赏...
谢谢 你的自定义实现几乎是正确的。
您错过了这个:

 < receiver 
android:name =com.google.firebase .iid.FirebaseInstanceIdInternalReceiver
android:exported =false/>

但是,我不得不提醒您,手动修改AndroidManifest的方法非常重要泄气即可。由于清单是由Gradle自动配置的,我们认为它是内部实现细节,而不是官方支持的API。

长话短说:清单配置可能会在任何版本发生变化,如果您没有相应更新您的清单,您的应用程序将会中断。

Is there a way to properly configure Firebase messaging with Maven without using Gradle?

I've added this dependency to pom.xml

<dependency>
    <groupId>com.google.firebase</groupId>
    <artifactId>firebase-messaging</artifactId>
    <version>9.0.2</version>
    <type>aar</type>
</dependency>

And modified my AndroidManifest.xml by copying configs from AndroidManifest.xml file located in firebase AAR. I didn't find the way to filter them during maven buld using filtering resources or replacer plugin like gradle plugin do.

<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
<permission android:name="<MY_APP_PACKAGE>.permission.C2D_MESSAGE"  android:protectionLevel="signature" />
<uses-permission android:name="<MY_APP_PACKAGE>.permission.C2D_MESSAGE" />

<!-- copied from firebase common module to be able to set <MY_APP_PACKAGE>
     (that is set during compilation with gradle plugin)  --> 
<provider
        android:authorities="<MY_APP_PACKAGE>.firebaseinitprovider"
        android:name="com.google.firebase.provider.FirebaseInitProvider"
        android:exported="false"
        android:initOrder="99" />
<!-- copied from firebase iid module to be able to set <MY_APP_PACKAGE>
     (that is set during compilation with gradle plugin)  --> 
<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="<MY_APP_PACKAGE>" />
    </intent-filter>
</receiver>
<service android:name=".service.PushMessageService">
    <intent-filter>
        <action android:name="com.google.firebase.MESSAGING_EVENT" />
</intent-filter>
</service>
<service android:name=".service.GoogleIDService">
    <intent-filter>
        <action android:name="com.google.firebase.INSTANCE_ID_EVENT" />
    </intent-filter>
</service>

Also, added string resources (that auto set by gradle plugin from config json file)

<string name="google_app_id" translatable="false">...</string>
<string name="google_api_key" translatable="false">...</string>
<string name="firebase_database_url" translatable="false">...</string>
<string name="ga_trackingId" translatable="false">...</string>
<string name="gcm_defaultSenderId" translatable="false">...</string>
<string name="google_storage_bucket" translatable="false">...</string>

After running the app I had these logs

D/FirebaseApp﹕ com.google.firebase.auth.FirebaseAuth is not linked. Skipping initialization.
D/FirebaseApp﹕ Initialized class com.google.firebase.iid.FirebaseInstanceId.
D/FirebaseApp﹕ com.google.firebase.crash.FirebaseCrash is not linked. Skipping initialization.
D/FirebaseApp﹕ com.google.android.gms.measurement.AppMeasurement is not linked. Skipping initialization.
I/FirebaseInitProvider﹕ FirebaseApp initialization successful

The docs says Firebase will request new token automatically but I never receive onTokenRefresh callback Is there anything I missed?

P.S: Please don't suggest using Gradle....

Any help is appreciated... Thanks

解决方案

Your custom implementation is almost correct. You are missing this:

<receiver       
android:name="com.google.firebase.iid.FirebaseInstanceIdInternalReceiver"
android:exported="false" />

BUT.. I have to warn you that the approach of manually modifying the AndroidManifest is highly discouraged. Since the manifest is automatically configured by Gradle we consider it as an internal implementation details and not officially supported API.

Long story short: the manifest configuration could change at any release, and your app would break if you don't update your manifest accordingly.

这篇关于使用Maven Android项目配置Firebase推送消息的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆