autostarter autofire config( 二 )

<>(); //获取AndroidConfig.Builder对象 private static com.google.firebase.messaging.AndroidConfig.Builder androidConfigBuilder=AndroidConfig.builder(); //获取AndroidNotification.Builder对象 private static AndroidNotification.Builder androidNotifiBuilder=AndroidNotification.builder(); /** * 判断SDK是否初始化 * @param appName * @return */ public static boolean isInit(String appName) { return firebaseAppMap.get(appName) != null; } /** * 初始化SDK * @param jsonPath JSON路径 * @param dataUrl firebase数据库 * @param appName APP名字 * @throws IOException */ public static void initSDK(String jsonPath, String dataUrl,String appName) throws IOException { InputStream serviceAccount = Thread.currentThread().getContextClassLoader().getResourceAsStream(jsonPath); FirebaseOptions options = new FirebaseOptions.Builder() .setCredentials(GoogleCredentials.fromStream(serviceAccount)) .setDatabaseUrl(dataUrl).build(); //初始化firebaseApp FirebaseApp firebaseApp = FirebaseApp.initializeApp(options); //存放 firebaseAppMap.put(appName,firebaseApp); } /** * 单设备推送 * @param appName 应用的名字 * @param token 注册token * @param title 推送题目 * @param bady 推送内容 * @return * @throws IOException * @throws FirebaseMessagingException */ public static void pushSingle(String appName, String token, String title, String body) throws IOException, FirebaseMessagingException{ //获取实例 FirebaseApp firebaseApp = firebaseAppMap.get(appName); //实例为空的情况 if (firebaseApp == null) { return; } //构建消息内容 Message message = Message.builder().setNotification(new Notification(title,body)) .setToken(token) .build(); //发送后,返回messageID String response = FirebaseMessaging.getInstance(firebaseApp).send(message); System.out.println("单个设备推送成功 : "+response); } /** * 给设备订阅主题 * @param appName 应用的名字 * @param tokens 设备的token,最大1000个 * @param topic 要添加的主题 * @return * @throws FirebaseMessagingException * @throws IOException */ public static void registrationTopic(String appName, List tokens, String topic) throws FirebaseMessagingException, IOException { //获取实例 FirebaseApp firebaseApp = firebaseAppMap.get(appName); //实例不存在的情况 if(firebaseApp == null) { return; } //订阅,返回主题管理结果对象 。TopicManagementResponse response = FirebaseMessaging.getInstance(firebaseApp).subscribeToTopic(tokens, topic); System.out.println("添加设备主题,成功:" + response.getSuccessCount() + ",失败:" + response.getFailureCount()); } /** * 按主题推送 * @param appName 应用的名字 * @param topic 主题的名字 * @param title 消息题目 * @param body 消息体 * @return * @throws FirebaseMessagingException * @throws IOException */ public static void sendTopicMes(String appName, String topic, String title, String body) throws FirebaseMessagingException, IOException { //获取实例 FirebaseApp firebaseApp = firebaseAppMap.get(appName); //实例不存在的情况 if(firebaseApp == null) { return; } //构建消息 Message message = Message.builder() .setNotification(new Notification(title,body)) .setTopic(topic) .build(); //发送后,返回messageID String response = FirebaseMessaging.getInstance(firebaseApp).send(message); System.out.println("主题推送成功: " + response); }}第七步:编写FCM推送Controller一共两个Controller,单推和群推 。
import com.google.firebase.messaging.*;import io.swagger.annotations.Api;import io.swagger.annotations.ApiImplicitParam;import io.swagger.annotations.ApiOperation;import lombok.extern.slf4j.Slf4j;import org.springframework.http.MediaType;import org.springframework.web.bind.annotation.*;import java.io.*;import java.util.*;@Api(value = "https://www.baikexueshe.com/s/FireBase", description = "FireBase")@RequestMapping("/")@RestController@Slf4jpublic class FireBaseController { //渠道名字,也是APP的名字 public static String appName = "FCM后台新增的项目名称"; @ApiOperation(value = "https://www.baikexueshe.com/s/批量FireBase推送", notes = "批量FireBase推送") @ApiImplicitParam(name = "fcmSendMessageReqDTO", value = "https://www.baikexueshe.com/s/{/"title\":\"测试标题\",\"body\":\"测试内容\",\"tokens\":\"1,2\"}") @PostMapping(value = "https://www.baikexueshe.com/pushFireBaseAll", produces = MediaType.APPLICATION_JSON_UTF8_VALUE) public void pushFireBaseAll(@RequestBody FCMSendMessageReqDTO fcmSendMessageReqDTO) { log.info("进入批量FireBase推送 pushFireBaseAll:[{}]", fcmSendMessageReqDTO.toString()); //添加tokens List tokens = Arrays.asList(fcmSendMessageReqDTO.getTokens().split(",")); //设置Java代理,端口号是代理软件开放的端口,这个很重要 。System.setProperty("proxyHost", "127.0.0.1"); System.setProperty("proxyPort", "8081"); //如果FirebaseApp没有初始化 if (!FireBaseUtil.isInit(appName)) { String jsonPath = "fcm/xxxx-firebase-adminsdk.json"; String dataUrl = "https://xxxx.firebaseio.com/"; //初始化FirebaseApp try { FireBaseUtil.initSDK(jsonPath, dataUrl, appName); FireBaseUtil.registrationTopic(appName, tokens, fcmSendMessageReqDTO.getTopic()); //设置主题 FireBaseUtil.sendTopicMes(appName, fcmSendMessageReqDTO.getTopic(), fcmSendMessageReqDTO.getTitle(), fcmSendMessageReqDTO.getBody()); //按主题推送 } catch (Exception e) { e.printStackTrace(); } } else { log.info("如果FirebaseApp已经初始化"); try { FireBaseUtil.registrationTopic(appName, tokens, fcmSendMessageReqDTO.getTopic()); //设置主题 FireBaseUtil.sendTopicMes(appName, fcmSendMessageReqDTO.getTopic(), fcmSendMessageReqDTO.getTitle(), fcmSendMessageReqDTO.getBody()); //按主题推送 } catch (IOException e) { e.printStackTrace(); } catch (FirebaseMessagingException e) { e.printStackTrace(); } } } @ApiOperation(value = "https://www.baikexueshe.com/s/FireBase推送", notes = "FireBase推送") @ApiImplicitParam(name = "fcmSendMessageReqDTO", value = "https://www.baikexueshe.com/s/{/"title\":\"测试标题\",\"body\":\"测试内容\",\"tokens\":\"1\"}") @PostMapping(value = "https://www.baikexueshe.com/pushFireBase", produces = MediaType.APPLICATION_JSON_UTF8_VALUE) public void pushFireBase(@RequestBody FCMSendMessageReqDTO fcmSendMessageReqDTO) { log.info("进入批量FireBase推送 pushFireBaseAll:[{}]", fcmSendMessageReqDTO.toString()); //添加tokens List tokens = Arrays.asList(fcmSendMessageReqDTO.getTokens().split(",")); //设置Java代理,端口号是代理软件开放的端口,这个很重要 。System.setProperty("proxyHost", "127.0.0.1"); System.setProperty("proxyPort", "8081"); //如果FirebaseApp没有初始化 if (!FireBaseUtil.isInit(appName)) { String jsonPath = "fcm/xxxx-firebase-adminsdk.json"; String dataUrl = "https://xxxx.firebaseio.com/"; //初始化FirebaseApp try { FireBaseUtil.initSDK(jsonPath, dataUrl, appName); FireBaseUtil.pushSingle(appName, tokens.get(0), fcmSendMessageReqDTO.getTitle(), fcmSendMessageReqDTO.getBody()); //单推 } catch (Exception e) { e.printStackTrace(); } } else { log.info("如果FirebaseApp已经初始化"); try { FireBaseUtil.pushSingle(appName, tokens.get(0), fcmSendMessageReqDTO.getTitle(), fcmSendMessageReqDTO.getBody()); //单推 } catch (IOException e) { e.printStackTrace(); } catch (FirebaseMessagingException e) { e.printStackTrace(); } } }}


    特别声明:本站内容均来自网友提供或互联网,仅供参考,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。