2016-07-20 10 views
0

Gradleを使用せずにMavenでFirebaseメッセージングを正しく設定する方法はありますか?Maven AndroidプロジェクトでFirebaseプッシュメッセージを設定する

私は

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

をのpom.xmlするために、この依存関係を追加し、firebase AARにあるAndroidManifest.xmlファイルからコンフィグをコピーすることによって、私のAndroidManifest.xmlを修正しました。私はフィルタリングのリソースやgradleプラグインのようなreplacerのプラグインを使用してmaven buld中にそれらをフィルタリングする方法を見つけることができませんでした。

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

はまた、私はこれらのログ

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 

を持っていたアプリを実行した後

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

(設定JSONファイルからのGradleプラグインによって設定されているオート)文字列リソースを追加したドキュメントがFirebase氏は述べています自動的に新しいトークンを要求しますが、私は受信しませんonTokenRefreshコールバック 私は逃したものはありますか?

P.S:Gradleのを使用することをお勧めしないでください....

は、すべてのヘルプは、カスタム実装は、ほぼ正しいです... おかげ

+0

firebaseでログインする必要があります –

+0

FirebaseAppが初期化中ですが、(通常は推移的な)依存関係の一部を引き出していないようですが、これは問題ではありません:onTokenRefresh() mトークンがリフレッシュされたときにのみ呼び出されます。トークンが生成された後*のコードを追加した場合、そのトークンは呼び出されません。この場合にテストするには、 'FirebaseInstanceId.getInstance()。getToken()'の値をあなたのデバイス/アプリケーションにトークンがあるかどうかを確認するためにどこかに記録してください。 –

+0

クロスポスト:https://groups.google.com/forum/#!topic/firebase-talk/PlH-tKo6dL8 –

答えて

2

を高く評価しています。 あなたはこの不足している:

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

をしかし..私は手動でAndroidManifestを変更するアプローチは、は非常を落胆であることを警告しなければなりません。マニフェストはGradleによって自動的に設定されるため、内部実装の詳細としてと見なされ、正式にサポートされているAPIではありません。

短いストーリー:マニフェストの設定はどのリリースでも変更される可能性があり、それに応じてマニフェストを更新しないとアプリケーションが壊れる可能性があります。

+0

ありがとうございました。出来た!しかし、私はGradleを使用しません。これはMavenの実装のみです –

0

問題が解決し、感謝サンディエゴ

私はちょうど

(すべてfirebaseのAndroidManifest.xmlから

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

<!-- FirebaseInstanceIdService performs security checks at runtime, 
    no need for explicit permissions despite exported="true" --> 
<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> 

<!-- FirebaseMessagingService performs security checks at runtime, 
    no need for explicit permissions despite exported="true" --> 
<service 
     android:name="com.google.firebase.messaging.FirebaseMessagingService" 
     android:exported="true"> 
    <intent-filter android:priority="-500"> 
     <action android:name="com.google.firebase.MESSAGING_EVENT" /> 
    </intent-filter> 
</service> 
をコピーし、同じ問題を実行します誰かのためのAndroidManifest.xmlにいくつかの追加のconfigsを追加したいです
関連する問題