web-dev-qa-db-ja.com

未解決のクラス 'MyFirebaseMessagingService' Android Studio

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'
6
Nikola Arsovski

最初にこの画像を参照してください Image with error

firebaseクラスが正しいパッケージフォルダにあるかどうかを確認してください。たとえば、firebaseクラスがパッケージ「services」にある場合、マニフェストサービスにはAndroid:name=".services.FirebaseMessagingService"、次にUnresolved class 'MyFirebaseMessagingService'エラーは解決されます。

enter image description here

4
Mohammed Farhan
  <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がこの問題を修正しました。

14
MrManshenoy

変えようとする

<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>
1
Majdi Ajroud

次のコードは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は緑で表示されます。

enter image description here

赤い色は何かが間違っていることを意味します:

enter image description here

これを修正するために、次の内容のファイルapp/src/main/Java/com/[myapp]\MyFirebaseMessagingService.Javaを作成しました。

package com.[myapp];
import com.google.firebase.messaging.FirebaseMessagingService;
public class MyFirebaseMessagingService extends FirebaseMessagingService {
}

Android Studioでは、赤だったテキストが緑に変わりました:

enter image description here

0
Jaime Montoya

</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>
0
Vinayak B

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

0
Karan