1 后台
(1) 我后台是选择的多推的结构(可发单条和多条),更多的结构可以访问官网
先说下我遇到的需求
1 后台使用java给前台用户发送通知
2发送的通知需要能够点击后跳转到app内的页面(需要带有必要的参数)
//APP的名字
public static String appName = "xxxxxxxxx";
//google推送 json文件的地址
public static String jsonPath = "xxxxxxx";
//google推送上建立的数据库
public static String dataUrl = "xxxxxxxxx";
private static FirebaseApp firebaseApp = null;
//获取AndroidConfig.Builder对象
private static com.google.firebase.messaging.AndroidConfig.Builder androidConfigBuilder= AndroidConfig.builder();
//获取AndroidNotification.Builder对象
private static AndroidNotification.Builder androidNotifiBuilder=AndroidNotification.builder();
public static boolean sendPushNotice1(String title, String description, List<String> tokens, String toPage, String jParm) {
try {
List<Message> msgs = new ArrayList<>();
//设置Java代理,端口号是代理软件开放的端口,这个很重要。
System.setProperty("proxyType", "4"); // 设置代理类型,4是指http
System.setProperty("proxyPort", "1080"); // 设置代理的端口号
System.setProperty("proxyHost", "127.0.0.1"); // 设置代理的ip地址
System.setProperty("proxySet", "true"); // 使代理生效
if(firebaseApp == null ){
//初始化SDK
initSDK();
}
for (int i = 0; i < tokens.size(); i++) {
String token = tokens.get(i);
androidNotifiBuilder.setTitle(title);// 设置消息标题
androidNotifiBuilder.setBody(description);// 设置消息内容
androidNotifiBuilder.setClickAction(toPage); //跳转页面的地址(前端需配置)
AndroidNotification androidNotification=androidNotifiBuilder.build();
if(jParm!=null){
JMap toJump1= JMap.create().put("jParm",jParm);//所带的参数
androidConfigBuilder.putAllData(toJump1);
}
androidConfigBuilder.setNotification(androidNotification);
AndroidConfig androidConfig=androidConfigBuilder.build();
logger.info(JSON.toJSONString(androidConfig));
//构建消息内容
Message message = Message.builder().setAndroidConfig(androidConfig)
.setToken(token)
.build();
if (message != null) {
msgs.add(message);
}
}
if (msgs.size() > 0) {
//发送消息
BatchResponse batchResponse = FirebaseMessaging.getInstance(firebaseApp).sendAll(msgs);
logger.info("google推送结果:{}", batchResponse);
if (batchResponse != null) {
return true;
}
}
} catch (Exception e) {
e.printStackTrace();
logger.error("google推送异常", e);
}
return false;
}
/**
* 初始化SDK
*/
public static void initSDK() throws IOException {
FileInputStream serviceAccount = new FileInputStream(jsonPath);
FirebaseOptions options = new FirebaseOptions.Builder()
.setCredentials(GoogleCredentials.fromStream(serviceAccount))
.setDatabaseUrl(dataUrl).build();
//初始化firebaseApp
firebaseApp = FirebaseApp.initializeApp(options);
}
(2) 上边的代码已经很清楚了,踩的坑的话就是 做项目时没办法链接外网,在国外的服务器上可以(国外的api文档也太难看了)
(3) 如果有错误,一起讨论.