2016-12-16 89 views
2

我遇到了Firebase通知问题。我将其设置为文档,但不起作用。在下面,你可以看到我的代码。虽然我认为一切都是正确的。Android - Firebase通知不起作用

这里是我的NotificationsService

public class NotificationsService extends FirebaseMessagingService { 

    @Override 
    public void onMessageReceived(RemoteMessage remoteMessage) { 
     String TAG = "Notification"; 

     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()); 
     } 

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

而且AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.usefashion.useapp"> 

    <uses-permission android:name="android.permission.INTERNET" /> 

    <application 
     android:allowBackup="true" 
     android:icon="@mipmap/ic_launcher" 
     android:label="@string/app_name" 
     android:supportsRtl="true" 
     android:theme="@style/Theme.AppCompat.NoActionBar"> 
     <activity android:name=".MainActivity"> 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 

       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 

     <service android:name=".NotificationsService" 
      android:enabled="true" 
      android:exported="true"> 
      <intent-filter> 
       <action android:name="com.google.firebase.MESSAGING_EVENT" /> 
      </intent-filter> 
     </service> 

     <service android:name=".InstanceIdService" 
      android:enabled="true" 
      android:exported="true"> 
      <intent-filter> 
       <action android:name="com.google.firebase.INSTANCE_ID_EVENT"/> 
      </intent-filter> 
     </service> 
    </application> 
</manifest> 

这将是巨大的,如果有人可以帮助我。我也有一个InstanceIdService但它不是这个问题的一部分。

编辑1:

我意识到,当我通过控制台发送通知,此消息表明在调试:

E/FirebaseInstanceId: Error resolving target intent service, skipping classname enforcement. Resolved service was: com.taplane.triviaquiz/com.msi.logocore.helpers.thirdparty.firebase.FirebaseServiceListener 

这是什么?

+0

当你发送通知是在前台或后台应用程序? –

+0

在前台,记住我正在调试应用程序并查看日志中是否收到通知。 –

+0

如果应用程序位于后台,您是否看到Firebase为您创建的通知? –

回答

0

她是我的FCM服务:

=>公共类MyFirebaseInstanceIdServices扩展FirebaseInstanceIdService { 私有静态最后弦乐TAG = “MyFirebaseIIDService”;

@Override 
public void onTokenRefresh() { 
    String refreshedToken = FirebaseInstanceId.getInstance().getToken(); 
    Log.d(TAG, "FireBase token: " + refreshedToken); 
    Prefs.setFirebaseToken(getApplicationContext(), refreshedToken); 
} 

}

=>公共类MyFirebaseMessagingServices延伸FirebaseMessagingService { 私有静态最后字符串标记= “MyFirebaseMsgService”;

@Override 
public void onMessageReceived(RemoteMessage remoteMessage) { 
    Log.d(TAG, "From: " + remoteMessage.getData() + " Message Body"); 
    Map<String, String> notiMessage = remoteMessage.getData(); 
    String type = notiMessage.get("type"); 
    String title = notiMessage.get("title"); 
    String message = notiMessage.get("message"); 
    String orderId = notiMessage.get("order_id"); 
    sendNotification(type, title, message, orderId); 
} 

//This method is only generating push notification 
private void sendNotification(String type, String title, String message, String orderId) { 

    if (Prefs.getIsLogin(this)) { 
     Intent intent = null; 
     if (type.equals("order")) { 
      intent = new Intent(this, OrderConfirmationActivity.class); 
      intent.putExtra(Constant.ORDER_ID, orderId); 
      intent.putExtra("FromNoti", true); 
     } else { 
      intent = new Intent(this, HomeActivity.class); 
     } 


     intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP); 
     PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent, 
       PendingIntent.FLAG_ONE_SHOT); 
     Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.ic_marker); 
     Uri defaultSoundUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION); 
     NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this) 
       .setSmallIcon(R.mipmap.ic_launcher) 
       .setLargeIcon(bitmap) 
       .setContentTitle(title) 
       .setContentText(message) 
       .setAutoCancel(true) 
       .setSound(defaultSoundUri) 
       .setContentIntent(pendingIntent); 

     NotificationManager notificationManager = 
       (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); 

     notificationManager.notify(0, notificationBuilder.build()); 
    } 
} 

}

=>清单文件:

<service android:name="com.labagel.fcm.MyFirebaseMessagingServices"> 
     <intent-filter> 
      <action android:name="com.google.firebase.MESSAGING_EVENT" /> 
     </intent-filter> 
    </service> 

    <service android:name="com.labagel.fcm.MyFirebaseInstanceIdServices"> 
     <intent-filter> 
      <action android:name="com.google.firebase.INSTANCE_ID_EVENT" /> 
     </intent-filter> 
    </service>