AndroidスタジオでFirebaseに問題があります。これが何が起こるかです:debug modでは、すべてがAndroidManifestで問題なく動作しています
<manifest xmlns:Android="http://schemas.Android.com/apk/res/Android"
package="com.hajora.dndcommerce"
Android:installLocation="auto"
Android:versionCode="2"
Android:versionName="1.0"
xmlns:tools="http://schemas.Android.com/tools">
<uses-sdk
Android:minSdkVersion="11"
Android:targetSdkVersion="21"
tools:overrideLibrary="com.google.firebase.messaging"
/>
<supports-screens
Android:largeScreens="true"
Android:normalScreens="true"
Android:smallScreens="true"
Android:xlargeScreens="true"
Android:anyDensity="true"
/>
<uses-permission Android:name="Android.permission.CALL_PHONE" />
<uses-feature Android:name="Android.hardware.telephony" Android:required="false" />
<uses-permission Android:name="Android.permission.INTERNET" />
<uses-permission Android:name="Android.permission.WRITE_EXTERNAL_STORAGE" />
<application
Android:icon="@mipmap/ic_launcher"
Android:label="@string/app_name"
Android:theme="@style/AppTheme" >
<activity
Android:name="com.hajora.dndcommerce.Education"
Android:label="@string/app_name">
</activity>
<activity Android:name="com.hajora.dndcommerce.Splashscreen">
<intent-filter>
<action Android:name="Android.intent.action.MAIN" />
<action Android:name="com.google.firebase.MESSAGING_EVENT"/>
<category Android:name="Android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity Android:name="com.hajora.dndcommerce.SingleItemViewEducation" />
<activity Android:name="com.hajora.dndcommerce.SingleItemViewNews" />
<activity Android:name="com.hajora.dndcommerce.Main" />
<activity Android:name="com.hajora.dndcommerce.Submit" />
<activity Android:name="com.hajora.dndcommerce.News" />
<activity Android:name="com.hajora.dndcommerce.Contact" />
<activity Android:name="com.hajora.dndcommerce.About" />
<activity Android:name="com.hajora.dndcommerce.AboutCompany" />
<activity Android:name="com.hajora.dndcommerce.AboutHistory" />
<activity Android:name="com.hajora.dndcommerce.AboutVision" />
<activity Android:name="com.hajora.dndcommerce.AboutPartners" />
<activity Android:name="com.hajora.dndcommerce.Ask"
Android:windowSoftInputMode="stateUnchanged" />
<activity Android:name=".Partner" />
</application>
<service
Android:name=".MyFirebaseMessagingService">
<intent-filter>
<action Android:name="com.google.firebase.MESSAGING_EVENT"/>
</intent-filter>
</service>
<service
Android:name=".MyFirebaseInstanceIDService">
<intent-filter>
<action Android:name="com.google.firebase.INSTANCE_ID_EVENT"/>
</intent-filter>
</service>
リリースモードに切り替えると、エラーが発生します。
Error:(54) Error: The <service> element must be a direct child of the <application> element [WrongManifestParent]
だから、私は両方のサービスをタグの中に入れ、その後エラーが発生します:
Unresolved class 'MyFirebaseMessagingService' less... (Ctrl+F1)
Android XMLファイル内のリソース参照を検証します。
何が問題なのかわからない
更新グラドル
apply plugin: 'com.Android.application'
Android {
compileSdkVersion 21
buildToolsVersion "26.0.0"
defaultConfig {
applicationId 'com.hajora.dndcommerce'
minSdkVersion 21
targetSdkVersion 21
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-Android.txt'), 'proguard-rules.txt'
signingConfig signingConfigs.release
}
}
productFlavors {
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_7
targetCompatibility JavaVersion.VERSION_1_7
}
}
dependencies {
compile files('libs/activation.jar')
compile files('libs/mail.jar')
compile files('libs/additionnal.jar')
compile 'com.google.firebase:firebase-messaging:10.0.1'
compile 'com.Android.support.constraint:constraint-layout:1.0.2'
compile 'com.google.firebase:firebase-core:10.0.1'
}
apply plugin: 'com.google.gms.google-services'
<service
Android:name="com.google.firebase.messaging.FirebaseMessagingService">
<intent-filter>
<action Android:name="com.google.firebase.MESSAGING_EVENT"/>
</intent-filter>
</service>
このライブラリ名に完全パスを与えると、com.google.firebase.messaging.FirebaseMessagingServiceがこの問題を修正しました。
変えようとする
<service
Android:name=".Java.MyFirebaseMessagingService"
Android:exported="false">
<intent-filter>
<action Android:name="com.google.firebase.MESSAGING_EVENT" />
</intent-filter>
</service>
沿って
<service
Android:name="io.invertase.firebase.messaging.RNFirebaseMessagingService"
Android:exported="false">
<intent-filter>
<action Android:name="com.google.firebase.MESSAGING_EVENT" />
</intent-filter>
</service>
次のコードはapp/src/main/AndroidManifest.xml
ファイルにあります。
<!-- [START firebase_service] -->
<service
Android:name="com.[myapp].MyFirebaseMessagingService">
<intent-filter>
<action Android:name="com.google.firebase.MESSAGING_EVENT"/>
</intent-filter>
</service>
<!-- [END firebase_service] -->
下の画像で赤で表示されているテキストMyFirebaseMessagingService
は緑で表示されます。
赤い色は何かが間違っていることを意味します:
これを修正するために、次の内容のファイルapp/src/main/Java/com/[myapp]\MyFirebaseMessagingService.Java
を作成しました。
package com.[myapp];
import com.google.firebase.messaging.FirebaseMessagingService;
public class MyFirebaseMessagingService extends FirebaseMessagingService {
}
Android Studioでは、赤だったテキストが緑に変わりました:
</application>
タグの前に</service>
タグを閉じています。以下のコードを試してください
<manifest xmlns:Android="http://schemas.Android.com/apk/res/Android"
package="com.hajora.dndcommerce"
Android:installLocation="auto"
Android:versionCode="2"
Android:versionName="1.0"
xmlns:tools="http://schemas.Android.com/tools">
<uses-sdk
Android:minSdkVersion="11"
Android:targetSdkVersion="21"
tools:overrideLibrary="com.google.firebase.messaging"
/>
<supports-screens
Android:largeScreens="true"
Android:normalScreens="true"
Android:smallScreens="true"
Android:xlargeScreens="true"
Android:anyDensity="true"
/>
<uses-permission Android:name="Android.permission.CALL_PHONE" />
<uses-feature Android:name="Android.hardware.telephony" Android:required="false" />
<uses-permission Android:name="Android.permission.INTERNET" />
<uses-permission Android:name="Android.permission.WRITE_EXTERNAL_STORAGE" />
<application
Android:icon="@mipmap/ic_launcher"
Android:label="@string/app_name"
Android:theme="@style/AppTheme" >
<activity
Android:name="com.hajora.dndcommerce.Education"
Android:label="@string/app_name">
</activity>
<activity Android:name="com.hajora.dndcommerce.Splashscreen">
<intent-filter>
<action Android:name="Android.intent.action.MAIN" />
<category Android:name="Android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity Android:name="com.hajora.dndcommerce.SingleItemViewEducation" />
<activity Android:name="com.hajora.dndcommerce.SingleItemViewNews" />
<activity Android:name="com.hajora.dndcommerce.Main" />
<activity Android:name="com.hajora.dndcommerce.Submit" />
<activity Android:name="com.hajora.dndcommerce.News" />
<activity Android:name="com.hajora.dndcommerce.Contact" />
<activity Android:name="com.hajora.dndcommerce.About" />
<activity Android:name="com.hajora.dndcommerce.AboutCompany" />
<activity Android:name="com.hajora.dndcommerce.AboutHistory" />
<activity Android:name="com.hajora.dndcommerce.AboutVision" />
<activity Android:name="com.hajora.dndcommerce.AboutPartners" />
<activity Android:name="com.hajora.dndcommerce.Ask"
Android:windowSoftInputMode="stateUnchanged" />
<activity Android:name=".Partner" />
<service
Android:name="com.hajora.dndcommerce.MyFirebaseMessagingService">
<intent-filter>
<action Android:name="com.google.firebase.MESSAGING_EVENT"/>
</intent-filter>
</service>
<service
Android:name="com.hajora.dndcommerce.MyFirebaseInstanceIDService">
<intent-filter>
<action Android:name="com.google.firebase.INSTANCE_ID_EVENT"/>
</intent-filter>
</service>
</application>
Mohammed Farhan、私の問題を解決します。以下はその詳細な解決策です。
これが解決策です:
まず、以下の2つのステートメントをマニフェストファイルに追加します。
<!--Everything for notifications part-->
<service
Android:name=".MyFirebaseMessagingService"
Android:enabled="true"
Android:exported="true">
<intent-filter>
<action Android:name="com.google.firebase.MESSAGING_EVENT" />
</intent-filter>
</service>
<service
Android:name=".MyFirebaseInstanceIDService">
<intent-filter>
<action Android:name="com.google.firebase.INSTANCE_ID_EVENT"/>
</intent-filter>
</service>
MyFirebaseInstanceIDServiceクラスを追加する理由は、登録トークンの作成、更新を処理するためです。
ここでエラーは「未解決のクラス」であるため、ルートパッケージに2つのクラスを作成し(マニフェストファイルの上部に記載)、以下のコードを両方のファイルに貼り付けます。
1。 MyFirebaseMessagingService.Java:
public class MyFirebaseMessagingService extends FirebaseMessagingService {
private static final String TAG = "MyFirebaseService";
public MyFirebaseMessagingService() {
}
@Override
public void onMessageReceived(RemoteMessage remoteMessage) {
// ...
// TODO(developer): Handle FCM messages here.
Log.d(TAG, "From: " + remoteMessage.getFrom());
// Check if message contains a data payload.
if (remoteMessage.getData().size() > 0) {
Log.d(TAG, "Message data payload: " + remoteMessage.getData());
// if (/* Check if data needs to be processed by long running job
*/ true) {
// // For long-running tasks (10 seconds or more) use
Firebase Job Dispatcher.
// scheduleJob();
// } else {
// // Handle message within 10 seconds
// handleNow();
// }
}
// Check if message contains a notification payload.
if (remoteMessage.getNotification() != null) {
Log.d(TAG, "Message Notification Body: " +
remoteMessage.getNotification().getBody());
}
// Also if you intend on generating your own notifications as a result of a received FCM
// message, here is where that should be initiated. See sendNotification method below.
}
}
2。 MyFirebaseInstanceIDService.Java:
public class MyFirebaseInstanceIDService extends FirebaseInstanceIdService {
private static final String TAG = "MyFirebaseIIDService";
/**
* Called if InstanceID token is updated. This may occur if the security of
* the previous token had been compromised. Note that this is called when the InstanceID token
* is initially generated so this is where you would retrieve the token.
*/
@Override
public void onTokenRefresh() {
super.onTokenRefresh();
String refreshedToken = FirebaseInstanceId.getInstance().getToken();
Log.d(TAG, "Refreshed token: " + refreshedToken);
sendRegistrationToServer(refreshedToken);
}
/**
* Persist token to third-party servers.
* <p>
* Modify this method to associate the user's FCM InstanceID token with any server-side account
* maintained by your application.
*
* @param token The new token.
*/
private void sendRegistrationToServer(String token) {
// Add custom implementation, as needed.
}
}
そして、あなたはすべて準備が整いました。 Lemmeは、ハードルがあるかどうかを知っています。
参照リンク: https://firebase.google.com/docs/cloud-messaging/Android/client