Android 从服务器向安装应用程序的用户段发送通知
在Firebase控制台中,我看到了使用应用程序“com.example”(其中com.example是应用程序名称)向用户段发送通知的选项 如图所示: 但是如何使用FCM REST API从服务器端执行此操作: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"
实际上,您需要向主题发送消息。。所有订阅主题的成员都将收到您的邮件 请查看链接 使用以下参数对进行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认为主题订阅必须在客户端完成。你找到办法了吗?