簡體   English   中英

Android 應用程序未通過 Firebase FCM 接收推送通知

[英]Android App do not receive push notification trough Firebase FCM

更新一:

當應用程序在屏幕上時不會收到通知,只會在前台收到通知。 如果應用程序正在屏幕上運行,則會發生以下情況:

這是我在手機屏幕上看到的。

在此處輸入圖片說明

這是日志貓

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 控制台發送的任何通知。

我將附上我的應用程序中的所有相關文件。

主活動.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

非常感謝您花時間檢查這個問題。 請幫我解決這里的問題。

在發布通知之前嘗試創建通知渠道:

這只是一個示例,請為頻道 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);
            }
        }
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM