无法在物理设备中通过firebase接收推送通知。

问题描述 投票:0回答:1

我正在使用firebase进行推送通知,但每当我进入云消息标签并试图发送消息时,我都无法收到它,以下是我正在尝试的。

MyFcmMessageService. java

import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
 import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
 import android.media.RingtoneManager;
import android.net.Uri;
 import android.util.Log;

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

 import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Random;

 import androidx.core.app.NotificationCompat;

public class MyFcmMessagingService extends FirebaseMessagingService {

private static final String TAG = "FirebaseMessageService";
Bitmap bitmap;

@Override
public void onMessageReceived(RemoteMessage remoteMessage) {

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

    //message will contain the Push Message
    String message = remoteMessage.getData().get("message");
    //imageUri will contain URL of the image to be displayed with Notification
    String imageUri = remoteMessage.getData().get("image");

    String TrueOrFlase = remoteMessage.getData().get("AnotherActivity");

    //To get a Bitmap image from the URL received
    bitmap = getBitmapfromUrl(imageUri);

    sendNotification(message, bitmap, TrueOrFlase);

}


private void sendNotification(String messageBody, Bitmap image, String TrueOrFalse) {

    int notificationId = new Random().nextInt(60000);

    Intent intent = new Intent(this, MainActivity.class);
    intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
    intent.putExtra("AnotherActivity", TrueOrFalse);
    PendingIntent pendingIntent = PendingIntent.getActivity(this, 0 /* Request code */, intent,
            PendingIntent.FLAG_ONE_SHOT);

    Uri defaultSoundUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
    NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this)
            .setLargeIcon(image)/*Notification icon image*/
            .setSmallIcon(R.drawable.applogo1)
            .setContentTitle(messageBody)
            .setStyle(new NotificationCompat.BigPictureStyle()
                    .bigPicture(image))/*Notification with Image*/
            .setAutoCancel(true)
            .setSound(defaultSoundUri)
            .setContentIntent(pendingIntent);

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

    notificationManager.notify(notificationId /* ID of notification */, notificationBuilder.build());
}


public Bitmap getBitmapfromUrl(String imageUrl) {
    try {
        URL url = new URL(imageUrl);
        HttpURLConnection connection = (HttpURLConnection) url.openConnection();
        connection.setDoInput(true);
        connection.connect();
        InputStream input = connection.getInputStream();
        Bitmap bitmap = BitmapFactory.decodeStream(input);
        return bitmap;

    } catch (Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
        return null;

    }
  }
 }

Manifest File.xml

    <uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<application
    android:allowBackup="true"
    android:icon="@drawable/applogo1"
    android:label="@string/app_name"
    android:roundIcon="@drawable/applogo1"
    android:supportsRtl="true"
    android:largeHeap="true"
    android:theme="@style/AppTheme">
    <activity android:name=".SplashActivity"
        android:screenOrientation="portrait">

        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

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

    <activity
        android:name=".MainActivity"
        android:label="@string/app_name"
        android:screenOrientation="portrait"
        >
        <intent-filter>
            <action android:name="MAINACTIVITY" />

            <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>
    </activity>
    <service
        android:name=".MyFcmMessagingService"
        android:exported="false"
        android:permission="com.google.android.c2dm.permission.SEND">
        <intent-filter>
            <action android:name="com.google.firebase.MESSAGING_EVENT" />
            <action android:name="com.google.android.c2dm.intent.RECEIVE" />
        </intent-filter>
    </service>

    <meta-data
        android:name="com.google.firebase.messaging.default_notification_icon"
        android:resource="@drawable/applogo1" />

    <meta-data
        android:name="com.google.firebase.messaging.default_notification_color"
        android:resource="@color/colorAccent" />
    <activity
        android:name=".OnBoardActivity"

        android:screenOrientation="portrait"
        >

    </activity>

</application>

Build.gradle(app level)

dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'androidx.appcompat:appcompat:1.0.2'
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
implementation 'androidx.legacy:legacy-support-v4:1.0.0'

implementation 'pl.droidsonroids.gif:android-gif-drawable:1.2.8'
implementation 'com.github.msayan:tutorial-view:v1.0.10'
implementation 'com.google.firebase:firebase-core:17.4.1'



implementation 'com.google.firebase:firebase-messaging:20.1.7'


testImplementation 'junit:junit:4.12'

androidTestImplementation 'com.android.support.test:runner:1.0.2'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'

}


apply plugin: 'com.google.gms.google-services'
com.google.gms.googleservices.GoogleServicesPlugin.config.disableVersionCheck = true

build.gradle(项目级)

 buildscript {
repositories {
    google()
    jcenter()
    maven { url 'https://jitpack.io' }
    maven {
        url 'https://maven.google.com/'
        name 'Google'
    }
}
dependencies {
    classpath 'com.android.tools.build:gradle:3.3.2'
    classpath 'com.google.gms:google-services:4.1.0'

    // NOTE: Do not place your application dependencies here; they belong
    // in the individual module build.gradle files
}
}

allprojects {
repositories {
    google()
    jcenter()
    maven { url 'https://jitpack.io' }
    maven {
        url 'https://maven.google.com/'
        name 'Google'
    }
 }
 }

task clean(type: Delete) {
delete rootProject.buildDir
}

另外,我已经在应用层级下添加了google-json文件,但每当我试图发送通知时,我仍然无法在我的物理设备上获得它,我已经下载了apk后建立它.This is this link of youtube tutorial which I reffered I followed each and every that he uses to send the push notification. 视频链接,注意安全,祝你有一个美好的一天!

android firebase
1个回答
0
投票

你是否添加了 google-services.json 文件到你的项目?


0
投票

刚刚更新了我的android studio ide和插件,现在一切都正常了。

© www.soinside.com 2019 - 2024. All rights reserved.