Java 未解析类';MyFirebaseMessagingService';安卓工作室

Java 未解析类';MyFirebaseMessagingService';安卓工作室,java,android,firebase,firebase-cloud-messaging,Java,Android,Firebase,Firebase Cloud Messaging,我对Android studio中的Firebase有问题。 以下是发生的情况: 在debug mod中,使用follow AndroidManifest一切都正常 <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.hajora.dndcommerce" android:installLocation="auto" android:versionCode="2" android

我对Android studio中的Firebase有问题。 以下是发生的情况: 在debug mod中,使用follow 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>
验证Android XML文件内的资源引用

我想不出是什么问题

更新 格拉德尔


您正在关闭
标记之前的
标记。试试下面的代码

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

请先查看此图像

检查Firebase类是否位于正确的包文件夹中。示例:如果firebase类位于包“服务”中,则清单服务中的
android:name=“.services.FirebaseMessagingService”
未解析类“MyFirebaseMessagingService”
错误将得到解决


以下代码在我的
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] -->
现在在Android Studio中,红色文本变为绿色:


穆罕默德·法汉解决了我的问题。下面是详细的解决方案

以下是解决方案:

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

<!--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>
2。MyFireBaseInstancedService.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.
    }
}
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.
}
}
公共类MyFireBaseInstanceId服务扩展FireBaseInstanceId服务{
私有静态最终字符串TAG=“MyFirebaseIIDService”;
/**
*如果InstanceID令牌更新,则调用。如果
*以前的令牌已被破坏。请注意,当InstanceID令牌
*是最初生成的,因此您将在此处检索令牌。
*/
@凌驾
公共刷新(){
super.onTokenRefresh();
字符串refreshedToken=FirebaseInstanceId.getInstance().getToken();
Log.d(标记,“刷新令牌:”+refreshedToken);
sendRegistrationToServer(refreshedToken);
}
/**
*将令牌持久化到第三方服务器。
*
*修改此方法以将用户的FCM InstanceID令牌与任何服务器端帐户关联
*由您的应用程序维护。
*
*@param-token新令牌。
*/
私有void sendRegistrationToServer(字符串令牌){
//根据需要添加自定义实现。
}
}
然后你就准备好了。让我知道你有什么困难

参考链接:


提供此库名的完整路径com.google.firebase.messagingservice修复了此问题。

尝试更改

<service
    android:name=".java.MyFirebaseMessagingService"
    android:exported="false">
    <intent-filter>
        <action android:name="com.google.firebase.MESSAGING_EVENT" />
    </intent-filter>
</service>



正如我所写,当我这样做时,我会得到一个错误:未解析的类“MyFirebaseMessagingService”更少。。。(Ctrl+F1)验证Android XML文件内的资源引用。未解析的类“MyFireBaseInstancedService”更少。。。(Ctrl+F1)验证Android XML文件内的资源引用。尝试在Manifests中添加com.hajora.dndcommerce.MyFirebaseMessagingService,并从活动标记中删除。我更新了我的答案。检查它确实像你说的那样,但是同样的问题。你能在你的类中检查你的MyFirebaseMessagingService包名吗?我找不到Firebase类。我通过Android Studio工具(自动)添加了Firebase,所以我没有自己放类。是否有一个模板来编写MyFirebaseMessagingService和MyFirebaseInstancedService类引用于?我想我正在查找的模板示例可能在。经确认,这是我在官方文档中查找的模板:。
<!--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>
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.
    }
}
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.
}
}
  <service
        android:name="com.google.firebase.messaging.FirebaseMessagingService">
        <intent-filter>
            <action android:name="com.google.firebase.MESSAGING_EVENT"/>
        </intent-filter>
    </service>
<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>