Java 未解析类';MyFirebaseMessagingService';安卓工作室
我对Android studio中的Firebase有问题。 以下是发生的情况: 在debug mod中,使用follow AndroidManifest一切都正常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
<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>