java 用firebase推送消息给ios和android
用firebase向android和ios推送消息,ios 是apsalert,android 是androidNotification,首先添加依赖https://firebase.google.com/docs/admin/setup?hl=zh-cn
<dependency>
<groupId>com.google.firebase</groupId>
<artifactId>firebase-admin</artifactId>
<version>6.4.0</version>
</dependency>
初始化firebase app
@PostConstruct
public void initFireBase() throws IOException {
String path = this.getClass().getResource("/rr-hitube-firebase-adminsdk-ivopy-0743e9a8b3.json").getPath();
FileInputStream serviceAccount = new FileInputStream(path);
FirebaseOptions options = new FirebaseOptions.Builder()
.setCredentials(GoogleCredentials.fromStream(serviceAccount))
// .setDatabaseUrl("https://<DATABASE_NAME>.firebaseio.com/")
.build();
FirebaseApp.initializeApp(options);
}
发消息,注意对于一条消息,格式上要兼容ios和android
public void pushMessage(ConsumerRecord<Long, String> consumerRecord) {
try {
PushMessageEvent pushMessageEvent = JSON.parseObject(consumerRecord.value(), PushMessageEvent.class);
String topic = "";
if (null != pushMessageEvent && null != pushMessageEvent.getUserId()) {
topic = "9";
ApsAlert apsAlert = ApsAlert.builder() //ios格式
.setTitle(pushMessageEvent.getTitle())
.setBody(pushMessageEvent.getContent())
.setLaunchImage(pushMessageEvent.getImage())
.build();
AndroidNotification androidNotification = AndroidNotification.builder() //andorid格式
.setTitle(pushMessageEvent.getTitle())
.setBody(pushMessageEvent.getContent())
.setIcon(pushMessageEvent.getImage())
.build();
Message message = Message.builder()
.setApnsConfig(ApnsConfig.builder()
.putHeader("apns-priority", "10")
.setAps(Aps.builder()
.setAlert(apsAlert)
.setBadge(1)
.build())
.build())
.setAndroidConfig(AndroidConfig.builder().setNotification(androidNotification).build())
.putData("type",pushMessageEvent.getPushType().toString())
.setTopic(topic)
.build();
String response = FirebaseMessaging.getInstance().send(message);
System.out.println("Successfully sent message: " + response);
}
} catch (Exception e) {
log.error("exception:", e);
}
}
这样就收到标准的消息了