当前位置: 首页 > 知识库问答 >
问题:

当应用程序不再活动时接收推送通知

郏景澄
2023-03-14

当app不再活动(即使是最近的任务)时,如何从FCM接收推送通知。我看到gmail、whatsapp都有这个功能。我正在使用FCM进行推送通知。我使用了WakefulBroadcast接收器来唤醒设备。我怎么用这个?

服务类别:

@Override
    public void onMessageReceived(RemoteMessage remoteMessage) {

        // [START_EXCLUDE]
        // There are two types of messages data messages and notification messages. Data messages are handled
        // here in onMessageReceived whether the app is in the foreground or background. Data messages are the type
        // traditionally used with GCM. Notification messages are only received here in onMessageReceived when the app
        // is in the foreground. When the app is in the background an automatically generated notification is displayed.
        // When the user taps on the notification they are returned to the app. Messages containing both notification
        // and data payloads are treated as notification messages. The Firebase console always sends notification
        // messages. For more see: 
        // [END_EXCLUDE]

        // TODO(developer): Handle FCM messages here.
        // Not getting messages here? See why this may be: 

        try {
            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());
            }
            sendNotification(remoteMessage);
            // 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.
        } catch (Exception ex) {
            Log.e(TAG, ex.getMessage());
        }
        // Check if message contains a data payload.

    }
public class FCMBroadcastReceiver extends BroadcastReceiver {
    public static final String TAG = FCMBroadcastReceiver.class.getSimpleName();
    @Override
    public void onReceive(Context context, Intent intent) {
        Log.i(TAG+"~~~~~~~", "On Boot Completed");
       // ComponentName comp = new ComponentName(context.getPackageName(),
                //YumigoBidMessagingService.class.getName());
        // Start the service, keeping the device awake while it is launching.

        //startWakefulService(context, (intent.setComponent(comp)));
        //setResultCode(Activity.RESULT_OK);

        Intent intent1 = new Intent(context, YumigoBidMessagingService.class);
        context.startService(intent1);

    }
}
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    package="in.yumigo.yumigovendor"
    android:versionCode="2"
    android:versionName="1.0.1">

    <permission android:name="in.yumigo.yumigovendor.permission.C2D_MESSAGE"
        android:protectionLevel="signature" />
    <uses-permission android:name="in.yumigo.yumigovendor.permission.C2D_MESSAGE" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.WAKE_LOCK" />
    <uses-permission android:name="android.permission.READ_SMS" />
    <uses-permission android:name="android.permission.VIBRATE" />
    <uses-permission android:name="android.permission.RECEIVE_SMS" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    <uses-permission android:name="android.permission.READ_LOGS" />
    <uses-feature android:name="android.hardware.camera"/>
    <uses-feature android:name="android.hardware.location.gps" />
    <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />

    <application
        android:name=".YumigoVendorApplication"

        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
 <receiver
            android:name="in.yumigo.yumigovendor.receivers.FCMBroadcastReceiver"
            >
            <intent-filter>

                <action android:name="android.intent.action.BOOT_COMPLETED" />
                <!--<action android:name="android.intent.action.QUICKBOOT_POWERON" />
                <category android:name="android.intent.category.DEFAULT" />-->
               <!-- <category android:name="com.android.recognition" />
                <category android:name="in.yumigo.yumigovendor.receivers" />-->
            </intent-filter>
        </receiver>

共有1个答案

印劲
2023-03-14

您的应用程序需要被调用一次,您的FCM代码(实现为服务)将由Play Agent调用。然后可以调用NotificationManager弹出消息。注意,FCM将为您处理一个“通知”(其中“通知”与一个“数据”有效负载区分开来)。赫特,祝你好运。

 类似资料:
  • 我正在iOS8+上使用最新的试用版PubNub,Xcode7.3,试图建立一个聊天应用程序。我正在评估PubNub作为另一个聊天服务器的替代方案。 我遵循了PubNub文档中关于苹果推送通知的说明,但我的应用程序在后台时从不接收推送通知。 我已经创建了p12证书并将其导入到PubNub密钥集中。我在Xcode常规设置中启用了推送通知。我已经编写了PubNub文档中指定的Swift代码。我能够成功发

  • 我正在使用FCM进行云消息传递。当我在后台和前台应用状态下收到来自服务器的消息推送时,我想添加应用徽章。我错过了什么?主要问题是根据消息推送添加/更新/删除应用徽章,我可以接收和处理推送消息。我在这个问题上花了3天时间。请帮帮我!?*徽章号码根据内部内容的变化,如如果收到新的电子邮件邮件到gmail应用程序,徽章号码在后台和前台应用程序状态更改为未读邮件计数。 使用XCode 9.2、Swift

  • 我目前正在开发Android(Cordova)应用程序,我正在使用Oneignal推送通知。首先,如果我关闭应用程序,推送通知不会被传递,所以我不得不添加一个Cordova插件来保持我的应用程序在后台运行: 我在deviceready之后的代码: 谢了。

  • 我已经开始研究电容了。在阅读https://capacitorjs.com/docs/cordova/knowled-incompatible-plugins之后,我发现Capablear不支持某些cordova插件。 我在我的应用程序中使用cordova-plugin-fcm-with-dependecy-updated(android)和cordova-plugin-fcm(iOS)进行推送通

  • 去年我在Xamarin Forms应用程序中配置了推送通知,本周我决定更新到新的SDK,在iOS上这是一帆风顺的,但在Android上我遇到了问题。 我试图在这里复制文档:https://docs.microsoft.com/en-us/azure/notification-hubs/xamarin-notification-hubs-push-notifications-android-gcm

  • 我试图在我正在开发的Cordova应用程序中获得推送通知。它们在Android应用程序中工作得很好,在iOS应用程序中,当应用程序处于前台时,它们也工作得很好,但当应用程序处于后台或终止时,我不会收到任何通知。 我启用了“推送通知”和“后台模式-远程通知”功能: 我100%肯定服务器有设备令牌(因为推送通知在前台工作,我可以在数据库中看到它)。 如果我在应用程序应该收到通知后启动它或将它带到前台,