【问题标题】:Unresolved class 'MyFirebaseMessagingService' Android Studio未解决的类“MyFirebaseMessagingService”Android Studio
【发布时间】:2018-03-06 03:21:08
【问题描述】:

我在 Android Studio 中遇到了 Firebase 的问题。 这是发生的事情: 在调试模式中,跟随 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'

【问题讨论】:

    标签: java android firebase firebase-cloud-messaging


    【解决方案1】:
    <service
        android:name="com.google.firebase.messaging.FirebaseMessagingService"
        android:exported="false">
        <intent-filter>
            <action android:name="com.google.firebase.MESSAGING_EVENT" />
        </intent-filter>
    </service>
    

    为此库名称 com.google.firebase.messaging.FirebaseMessagingService 提供完整路径修复了此问题。

    【讨论】:

    • 您也应该在服务标签中添加 android:exported="false"。
    • IDK 为什么 android studio 文档没有这个完整的字符串
    【解决方案2】:

    先看这张图

    检查 Firebase 类是否在正确的包文件夹中。例如,如果 firebase 类在包 'services' 中,那么在清单服务中将有 android:name=".services.FirebaseMessagingService" 然后 Unresolved class 'MyFirebaseMessagingService' 错误将得到解决。

    【讨论】:

    【解决方案3】:

    尝试改变

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

    【讨论】:

      【解决方案4】:

      Mohammed Farhan,解决了我的问题。下面是它的详细解决方案。

      解决办法如下:

      首先,在清单文件中添加以下两条语句:

      <!--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 类的原因是为了处理注册令牌的创建、更新。

      现在,由于错误是“未解析的类”,请在根包中创建两个类(即在清单文件顶部提到的)并将以下代码粘贴到两个文件中:

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

      然后你就准备好了。让我知道你是否有任何障碍。

      参考链接: https://firebase.google.com/docs/cloud-messaging/android/client

      【讨论】:

        【解决方案5】:

        您将在 &lt;/service&gt; 标签之前关闭您的 &lt;/application&gt; 标签。试试下面的代码

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

        【讨论】:

        • 正如我所写的,当我这样做时,我得到了错误:Unresolved class 'MyFirebaseMessagingService' less... (Ctrl+F1) 验证 Android XML 文件中的资源引用。未解析的类 'MyFirebaseInstanceIDService' 更少... (Ctrl+F1) 验证 Android XML 文件中的资源引用。
        • 尝试在清单中添加 com.hajora.dndcommerce.MyFirebaseMessagingService
        • 并从活动标签中删除 。我更新了我的答案。检查一下
        • 确实如你所说,但同样的问题。
        • 能否请您检查一下您班级中的 MyFirebaseMessagingService 包名称?
        【解决方案6】:

        以下代码在我的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 中,红色的文本变成了绿色:

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-08-27
          • 2019-03-05
          • 2021-11-05
          • 2021-10-03
          • 1970-01-01
          • 2020-01-05
          • 1970-01-01
          • 2019-12-01
          相关资源
          最近更新 更多