java - Android 应用程序未通过 Firebase FCM 接收推送通知

标签 java android firebase-cloud-messaging

更新1:

当应用程序位于屏幕上时,仅在前台时不会收到通知。 如果应用程序正在屏幕上运行,则会发生以下情况:

这就是我在手机屏幕上看到的内容。

enter image description here

这是日志猫

2019-12-14 17:49:12.959 26000-26083/com.maunexus D/AudioTrack: stop(124): called with 438244 frames delivered
2019-12-14 17:49:18.006 26000-26215/com.maunexus D/FA: Logging event (FE): notification_receive(_nr), Bundle[{firebase_event_origin(_o)=fcm, firebase_screen_class(_sc)=MainActivity, firebase_screen_id(_si)=2966358034792091456, message_device_time(_ndt)=0, _nmc=display, message_name(_nmn)=Yeeey!, message_time(_nmt)=1576338559, message_id(_nmid)=6989073632392201936}]
2019-12-14 17:49:18.191 26000-26215/com.maunexus D/FA: Logging event (FE): notification_foreground(_nf), Bundle[{firebase_event_origin(_o)=fcm, firebase_screen_class(_sc)=MainActivity, firebase_screen_id(_si)=2966358034792091456, message_device_time(_ndt)=0, _nmc=display, message_name(_nmn)=Yeeey!, message_time(_nmt)=1576338559, message_id(_nmid)=6989073632392201936}]
2019-12-14 17:49:18.239 26000-26215/com.maunexus D/FA: Connected to remote service

我正在尝试通过 Firebase FCM 服务为我的应用实现推送通知服务,但不幸的是,它不起作用。

发生了什么,应用程序中没有任何内容,它不会崩溃,但也没有收到我从 Firebase 控制台发送的任何通知。

我将附加我的应用程序中的所有相关文件。

MainActivity.java

package com.maunexus;

import android.app.Activity;

import android.os.Build;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.webkit.CookieManager;
import android.webkit.WebView;
import android.webkit.WebViewClient;

import android.widget.Toast;

import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;

import com.google.android.gms.tasks.OnCompleteListener;
import com.google.android.gms.tasks.Task;
import com.google.firebase.iid.FirebaseInstanceId;
import com.google.firebase.iid.InstanceIdResult;


public class MainActivity extends AppCompatActivity {

    private WebView webView;
    Activity activity;
    private static final String TAG = "MainActivity";


    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        activity = this;


        webView = (WebView) findViewById(R.id.webviewid);
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
            CookieManager.getInstance().setAcceptThirdPartyCookies(webView, true);
        }
        webView.getSettings().setJavaScriptEnabled(true);
        webView.getSettings().setJavaScriptCanOpenWindowsAutomatically(false);
        webView.getSettings().setSupportMultipleWindows(false);
        webView.getSettings().setSupportZoom(false);
        webView.setVerticalScrollBarEnabled(false);
        webView.setHorizontalScrollBarEnabled(false);
        webView.getSettings().setLoadWithOverviewMode(true);
        webView.getSettings().setUseWideViewPort(true);
        webView.setWebViewClient(new WebViewClient());
        webView.loadUrl("https://pari365.mg");


        FirebaseInstanceId.getInstance().getInstanceId()
                .addOnCompleteListener(new OnCompleteListener<InstanceIdResult>() {
                    @Override
                    public void onComplete(@NonNull Task<InstanceIdResult> task) {
                        if (!task.isSuccessful()) {
//To do//
                            return;
                        }

// Get the Instance ID token//
                        String token = task.getResult().getToken();
                        String msg = getString(R.string.fcm_token, token);
                        Log.d(TAG, msg);

                    }
                });


    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        MenuInflater menuInflater = getMenuInflater();
        menuInflater.inflate(R.menu.super_menu, menu);
        return super.onCreateOptionsMenu(menu);
    }


    @Override
    public boolean onOptionsItemSelected(@NonNull MenuItem item) {
        switch (item.getItemId()) {
            case R.id.menu_back:
                onBackPressed();
                break;

            case R.id.menu_forward:
                onForwardPressed();
                break;

            case R.id.menu_refresh:
                webView.reload();
                Toast.makeText(this, "Reloading... Please Wait!", Toast.LENGTH_SHORT).show();
                break;


        }
        return super.onOptionsItemSelected(item);
    }


    private void onForwardPressed() {
        if (webView.canGoForward()) {
            webView.goForward();
        } else {
            Toast.makeText(this, "Already there! ;)", Toast.LENGTH_SHORT).show();
        }
    }

    public void onBackPressed() {
        if (webView.canGoBack()) {
            webView.goBack();
        }
    }
}

MyFirebaseMessagingService.java。

.getTitle().notify() 方法中出现两个警告:

方法调用“notify”/“getTitle”可能会产生 NullPointerException

   package com.maunexus;

import android.app.NotificationChannel;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.app.TaskStackBuilder;
import android.content.Context;
import android.content.Intent;
import android.graphics.Color;
import android.media.RingtoneManager;
import android.os.Build;


import androidx.core.app.NotificationCompat;

import com.google.firebase.messaging.FirebaseMessagingService;
import com.google.firebase.messaging.RemoteMessage;

import org.jetbrains.annotations.NotNull;


public class MyFirebaseMessagingService extends FirebaseMessagingService{

    @Override
    public void onMessageReceived(@NotNull RemoteMessage remoteMessage) throws NullPointerException {
        super.onMessageReceived(remoteMessage);
        //Log.i("#DEBUG#", remoteMessage.toString());

        NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this, "channel_id")
                .setContentTitle(remoteMessage.getNotification().getTitle())
                .setContentText(remoteMessage.getNotification().getBody())
                .setPriority(NotificationCompat.PRIORITY_DEFAULT)
                .setStyle(new NotificationCompat.BigTextStyle())
                .setSound(RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION))
                .setSmallIcon(R.mipmap.ic_launcher)
                .setAutoCancel(true);

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

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

    private void createNotificationChannel() {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
            NotificationChannel channel = new NotificationChannel(
                    "channel_id",
                    "Channel name",
                    NotificationManager.IMPORTANCE_DEFAULT);
            channel.setDescription("Channel description");

            // Register the channel with the system; you can't change the importance
            // or other notification behaviors after this
            NotificationManager notificationManager = getSystemService(NotificationManager.class);
            if (notificationManager != null) {
                notificationManager.createNotificationChannel(channel);
            }
        }
    }

}

build.Grandle(应用程序)

apply plugin: 'com.android.application'

android {
    compileSdkVersion 29
    buildToolsVersion "29.0.2"
    defaultConfig {
        applicationId "com.maunexus"
        minSdkVersion 21
        targetSdkVersion 29
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
        multiDexEnabled true
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation 'androidx.appcompat:appcompat:1.0.2'
    implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
    implementation 'com.google.firebase:firebase-core:17.2.1'
    implementation 'com.google.firebase:firebase-analytics:17.2.1'
    implementation 'com.google.firebase:firebase-messaging:20.1.0'
    implementation 'com.google.firebase:firebase-inappmessaging-display:19.0.2'
    implementation 'com.android.support:multidex:1.0.3'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'androidx.test.ext:junit:1.1.0'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.1'
    implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
}
apply plugin: 'com.google.gms.google-services'

以下行已添加到 strings.xml

 <string name="fcm_token">FCM Token: %s</string>

最后,我从 logcat 中发现了几行相关内容

2019-12-13 23:41:25.894 10009-10009/com.maunexus I/FirebaseInitProvider: FirebaseApp initialization successful

2019-12-13 23:41:29.181 10009-10074/com.maunexus I/FIAM.Headless: Successfully fetched 0 messages from backend
2019-12-13 23:41:31.796 10009-10009/com.maunexus I/chromium: [INFO:CONSOLE(27)] "AltenarSportsbook", source: https://sb1client-static-altenar.biahosted.com/static/skins/pari365.js?v=aca125c500d0eed54e11a4c03bd17a08 (27)
2019-12-13 23:41:37.425 10009-10127/com.maunexus E/eglCodecCommon: glUtilsParamSize: unknow param 0x000088ef
2019-12-13 23:41:37.474 10009-10127/com.maunexus I/chatty: uid=10134(com.maunexus) Chrome_InProcGp identical 4 lines
2019-12-13 23:41:37.474 10009-10127/com.maunexus E/eglCodecCommon: glUtilsParamSize: unknow param 0x000088ef
2019-12-13 23:41:37.504 10009-10111/com.maunexus I/libOpenSLES: Emulating old channel mask behavior (ignoring positional mask 0x3, using default mask 0x3 based on channel count of 2)
2019-12-13 23:41:47.509 10009-10111/com.maunexus D/AudioTrack: stop(53): called with 440356 frames delivered

2019-12-13 23:59:29.115 10438-10438/? E/com.maunexus: Unknown bits set in runtime_flags: 0x8000
2019-12-13 23:59:34.099 10438-10553/com.maunexus E/eglCodecCommon: glUtilsParamSize: unknow param 0x000088ef
2019-12-13 23:59:34.100 10438-10553/com.maunexus E/eglCodecCommon: glUtilsParamSize: unknow param 0x000088ef
2019-12-13 23:59:34.335 10438-10553/com.maunexus E/eglCodecCommon: glUtilsParamSize: unknow param 0x000088ef
2019-12-13 23:59:34.335 10438-10553/com.maunexus E/eglCodecCommon: glUtilsParamSize: unknow param 0x000088ef
2019-12-13 23:59:34.552 10438-10498/com.maunexus E/eglCodecCommon: glUtilsParamSize: unknow param 0x000088ef
2019-12-13 23:59:34.553 10438-10498/com.maunexus E/eglCodecCommon: glUtilsParamSize: unknow param 0x000088ef
2019-12-13 23:59:35.345 10438-10553/com.maunexus E/eglCodecCommon: glUtilsParamSize: unknow param 0x000088ef
2019-12-13 23:59:35.349 10438-10553/com.maunexus E/eglCodecCommon: glUtilsParamSize: unknow param 0x000088ef
2019-12-13 23:59:44.720 10438-10553/com.maunexus E/eglCodecCommon: glUtilsParamSize: unknow param 0x000088ef
2019-12-13 23:59:44.763 10438-10553/com.maunexus E/eglCodecCommon: glUtilsParamSize: unknow param 0x000088ef
2019-12-13 23:59:45.097 10438-10553/com.maunexus E/eglCodecCommon: glUtilsParamSize: unknow param 0x000088ef
2019-12-13 23:59:45.098 10438-10553/com.maunexus E/eglCodecCommon: glUtilsParamSize: unknow param 0x000088ef

非常感谢您抽出时间来检查这个问题。 请帮助我解决此处的问题。

最佳答案

在发布通知之前尝试创建通知 channel :

这只是一个示例,请为 channel ID 创建常量,并为名称和描述创建资源。

MyFirebaseMessagingService.java

package com.maunexus;

import android.app.NotificationChannel;
import android.app.NotificationManager;
import android.content.Context;
import android.media.RingtoneManager;
import android.os.Build;

//import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.core.app.NotificationCompat;

import com.google.firebase.messaging.FirebaseMessagingService;
import com.google.firebase.messaging.RemoteMessage;

public class MyFirebaseMessagingService extends FirebaseMessagingService {
    RemoteMessage remoteMessage;

    @Override
    public void onMessageReceived(@Nullable RemoteMessage message) {
        super.onMessageReceived(remoteMessage);

        createNotificationChannel();
        NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this, "channel_id")
                .setContentTitle(remoteMessage.getNotification().getTitle())
                .setContentText(remoteMessage.getNotification().getBody())
                .setPriority(NotificationCompat.PRIORITY_DEFAULT)
                .setStyle(new NotificationCompat.BigTextStyle())
                .setSound(RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION))
                .setSmallIcon(R.mipmap.ic_launcher)
                .setAutoCancel(true);

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

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


    private void createNotificationChannel() {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
            NotificationChannel channel = new NotificationChannel(
                    "channel_id",
                    "Channel name",
                    NotificationManager.IMPORTANCE_DEFAULT);
            channel.setDescription("Channel description");

            // Register the channel with the system; you can't change the importance
            // or other notification behaviors after this
            NotificationManager notificationManager = getSystemService(NotificationManager.class);
            if (notificationManager != null) {
                notificationManager.createNotificationChannel(channel);
            }
        }
    }
}

关于java - Android 应用程序未通过 Firebase FCM 接收推送通知,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59330194/

相关文章:

java - 识别组件频率并计算曲线的积分

java - 将列表作为批处理文件中的参数传递

android - Flutter App Firebase 推送通知未在后台出现

java - 为什么鼓励使用处理程序的私有(private)变量?

java - 默认情况下可以将字符串数组附加到 ListView 吗?

ios - WhatsApp如何绕过APNS限制以显示设备离线时收到的多个推送消息?

iOS FCM 通知在后台不工作

java - 在服务器关闭连接之前,客户端不会收到响应消息(Java)

java - AntPathRequestMatcher 已弃用。更换方法是什么?

java - 通知抽屉似乎已满 - 新通知被丢弃