Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 从服务器向安装应用程序的用户段发送通知_Android_Firebase_Firebase Cloud Messaging - Fatal编程技术网

Android 从服务器向安装应用程序的用户段发送通知

Android 从服务器向安装应用程序的用户段发送通知,android,firebase,firebase-cloud-messaging,Android,Firebase,Firebase Cloud Messaging,在Firebase控制台中,我看到了使用应用程序“com.example”(其中com.example是应用程序名称)向用户段发送通知的选项 如图所示: 但是如何使用FCM REST API从服务器端执行此操作: 实际上,您需要向主题发送消息。。所有订阅主题的成员都将收到您的邮件 请查看链接 使用以下参数对进行post调用:- 标题:- 内容类型——应用程序/json 授权--key={您的服务器密钥} 正文:- { "data": { "my_custom_key"

在Firebase控制台中,我看到了使用应用程序“com.example”(其中com.example是应用程序名称)向用户段发送通知的选项

如图所示:

但是如何使用FCM REST API从服务器端执行此操作:


实际上,您需要向主题发送消息。。所有订阅主题的成员都将收到您的邮件

请查看链接

使用以下参数对进行post调用:-

标题:-

内容类型——应用程序/json

授权--key={您的服务器密钥}

正文:-

{
    "data": {
        "my_custom_key" : "my_custom_value",

        "message" : "notification message"
     },
    "registration_ids": ["device_token1,device_token2,.........."]
}
编辑:-

基本上,你需要做的是,每当你需要发送通知时,你必须从服务器端调用这个POST方法,你的应用程序将自动在OnMessageReceived中得到一个调用。您可以将其处理为:-

 @Override
    public void onMessageReceived(RemoteMessage remoteMessage) {
        super.onMessageReceived(remoteMessage);
        // TODO: Handle FCM messages here.
        // If the application is in the foreground handle both data and notification messages here.
        // Also if you intend on generating your own notifications as a result of a received FCM
        // message, here is where that should be initiated.
        Log.d(TAG, "From: " + remoteMessage.getFrom());

        Map<String, String> data=remoteMessage.getData();
        Log.d(TAG, "From: " + data.toString());
        String value=data.get("my_custom_key");
        Log.d(TAG, "From: " + value);
        String msg=data.get("message");
        Log.d(TAG, "From: " + msg);

        sendNotification(msg,value,remoteMessage.getSentTime());
    }
@覆盖
收到消息时公共无效(RemoteMessage RemoteMessage){
super.onMessageReceived(remoteMessage);
//TODO:在此处处理FCM消息。
//如果应用程序位于前台,则在此处处理数据和通知消息。
//此外,如果您打算根据收到的FCM生成自己的通知
//消息,这里是应该启动的位置。
Log.d(标记“From:”+remoteMessage.getFrom());
Map data=remoteMessage.getData();
Log.d(标记“From:”+data.toString());
字符串值=data.get(“我的自定义密钥”);
Log.d(标记“From:”+值);
字符串msg=data.get(“消息”);
Log.d(标签“From:”+msg);
sendNotification(msg,value,remoteMessage.getSentTime());
}
不幸的是,它是

另一种选择是,您必须使用其他方法,比如简单地使用
registration\u id
参数和主题消息传递(我认为这是最适合您的用例的)


以下是有关如何发送此或的示例。

根据操作系统订阅您的用户

主题:android用户的“android”

主题:iOS用户的“iOS”

(或者你想要的任何名字)

然后发送到该主题…

我找到了解决方案 你可以将你的应用订阅到一个特定的主题,例如你的FireBaseInstancedService类中的应用程序包名称,这样你就可以像这样发送数据

 {
  "to" : "/topics/your_package_name",
  "data" : {
    "key1" : "value 1",
    "key2": "value 2",
   ...
  }
}
以下是将应用程序订阅到FirebaseInstancedService类中主题的代码

     public class MyFirebaseInstanceIDService extends FirebaseInstanceIdService
    {
        private final String TAG="your_tag";
        @Override
        public void onTokenRefresh() {


        // Get updated InstanceID token.
        String refreshedToken = FirebaseInstanceId.getInstance().getToken();
        FirebaseMessaging.getInstance().subscribeToTopic("your_app_package_name");
        }
}

这对我来说很有效

“注册ID”:[“设备令牌1,设备令牌2,…”]
:我想发送给安装该应用程序的任何用户。请参阅更新的问题。使用用户段选项从firebase控制台发送,无需设备令牌。因为当用户安装您的应用程序时,我的通知是通用的,所以会生成一个刷新令牌。将此令牌发送到您的服务器,这是设备令牌,您可以从Firebase控制台将令牌保存到服务器中,您只能在应用程序位于前台时向用户发送通知。要在后台或关闭应用程序时发送通知,您需要有一个post callyes,这是android部分。但我正在研究如何从服务器端发送到用户段。我已经实现了前台部分。通知正在收到。但到目前为止,我仍然使用firebase控制台。现在我想切换到一个服务器,从那里我想发送通知我不能要求我的成员订阅主题。安装应用程序的人将开始收到通知,询问FCM并回复GCM。无关的answer@SanthoshYedidi当用户安装应用程序时,请调用subscribe to topic(订阅主题)方法,以便他们自动订阅主题。我不能要求我的会员订阅主题。无论是谁安装了该应用程序,都将开始收到通知——我在Santhoshyeddi上收到了通知——你应该继续使用
注册\u id
。如果您有超过1000个用户,则必须进行批处理请求,每个请求最多有1000个注册令牌。答案很老,但供将来参考:主题订阅可以在没有用户交互的情况下完成。只需通过http向
https://iid.googleapis.com/iid/v1/[REGISTRATIONTOKEN]/rel/topics/[TOPIC]
(通过您的服务器密钥授权)。@Brian这篇文章是关于在Firebase中使用本机用户段的。但是,如果你知道实际的细分市场和必须订阅的用户,那么使用主题确实是一个解决办法。@AL:我在回复santhosh的问题,他不能要求他的成员订阅主题,我认为这意味着santhosh认为主题订阅必须在客户端完成。你找到办法了吗?