我有一个API,并且当我更改名为“Meeting”的表中的内容时,我希望向智能手机发送通知。 为此,我正在创建一种类型为POST的方法,其中我发送以下JSON Body,同时还发送授权密钥(由Firebase提供)以及发送至以下URLhttps://fcm.googleapis.com/fcm/send。
这是我的Android推送通知服务。
这是我的HeaderRequestInterceptor。
问题在于当我访问
@Headers -> *******
{
"to": "/topics/groupNameChoosenByYou",
"data": {
"title": "Your title",
"message": "Your message"
}
}
这是我的Android推送通知服务。
@Service
public class AndroidPushNotificationsService {
private static final String FIREBASE_SERVER_KEY = "AAAAq88vWWE:APA91bF5rSyqGbx26AY5jm6NsEfwJynQsnTd1MPFOTOz1ekTGZyof3Vz6gBb0769MLLxD7EXMcqKiPIHnqLh5buHEeUASnpsn-ltxR1J8z3kWJIAPNWlPZB0r0zKkXMyWkrbT3BLPWmCdi-NZnP3Jkb2z-QqtwJt5Q";
private static final String FIREBASE_API_URL = "https://fcm.googleapis.com/fcm/send";
@Async
public CompletableFuture<String> send(HttpEntity<String> entity) {
RestTemplate restTemplate = new RestTemplate();
ArrayList<ClientHttpRequestInterceptor> interceptors = new ArrayList<>();
interceptors.add(new HeaderRequestInterceptor("Authorization", "key=" + FIREBASE_SERVER_KEY));
interceptors.add(new HeaderRequestInterceptor("Content-Type", "application/json"));
restTemplate.setInterceptors(interceptors);
String firebaseResponse = restTemplate.postForObject(FIREBASE_API_URL, entity, String.class);
return CompletableFuture.completedFuture(firebaseResponse);
}
}
这是我的HeaderRequestInterceptor。
public class HeaderRequestInterceptor implements ClientHttpRequestInterceptor {
private final String headerName;
private final String headerValue;
public HeaderRequestInterceptor(String headerName, String headerValue) {
this.headerName = headerName;
this.headerValue = headerValue;
}
@Override
public ClientHttpResponse intercept(HttpRequest request, byte[] body, ClientHttpRequestExecution execution)
throws IOException {
HttpRequest wrapper = new HttpRequestWrapper(request);
wrapper.getHeaders().set(headerName, headerValue);
return execution.execute(wrapper, body);
}
}
这是我的控制器
@RestController
public class WebController {
private final String TOPIC = "test";
@Autowired
AndroidPushNotificationsService androidPushNotificationsService;
@RequestMapping(value = "/send", method = RequestMethod.GET, produces = "application/json")
public ResponseEntity<String> send() throws JSONException {
JSONObject body = new JSONObject();
body.put("to", "/topics/" + TOPIC);
body.put("priority", "high");
JSONObject notification = new JSONObject();
notification.put("title", "JSA Notification");
notification.put("body", "Happy Message!");
JSONObject data = new JSONObject();
data.put("Key-1", "JSA Data 1");
data.put("Key-2", "JSA Data 2");
body.put("notification", notification);
body.put("data", data);
HttpEntity<String> request = new HttpEntity<>(body.toString());
CompletableFuture<String> pushNotification = androidPushNotificationsService.send(request);
CompletableFuture.allOf(pushNotification).join();
try {
String firebaseResponse = pushNotification.get();
return new ResponseEntity<>(firebaseResponse, HttpStatus.OK);
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
}
return new ResponseEntity<>("Push Notification ERROR!", HttpStatus.BAD_REQUEST);
}
}
问题在于当我访问
http://localhost:8080/springbootapi/send
时,出现了404错误,但是服务器正在运行。我想知道我的代码是否有问题,因为FCM API需要使用POST方法,在我的/send 方法中我正在使用GET方法,所以基本上我正在创建一个API来调用其他API,以便在表格发生更改时向用户提供通知,这是主要目的。是否有更好的方法来实现这一点或者这种做法甚至是一个好的实践方式?