如何获取Firebase Cloud Messaging API(V1)的访问令牌。虽然我已经完成了所有必要的步骤,但我无法获取访问令牌。
我正在使用以下代码结构,但我得到以下错误:
java.lang.NullPointerException:尝试对空对象引用调用虚拟方法“java.lang.String com.google.auth.oauth2.getTokenValue()”
service_account文件位置:app\src\main\assets
private String getAccessToken() throws IOException {
String MESSAGING_SCOPE = "https://www.googleapis.com/auth/firebase.messaging";
String[] SCOPES = { MESSAGING_SCOPE };
InputStream serviceAccountStream = getAssets().open("service_account.json");
GoogleCredentials googleCredentials = GoogleCredentials
.fromStream(serviceAccountStream)
.createScoped(Arrays.asList(SCOPES));
googleCredentials.refreshAccessToken();
return googleCredentials.getAccessToken().getTokenValue();
}
private void sendFCMNotificationToPostOwner(String user_is_pro, String user_fcm_token, String notificationTitle, String notificationBody) {
ExecutorService executor = Executors.newFixedThreadPool(1);
Future<String> futureToken = executor.submit(() -> {
try {
return getAccessToken();
} catch (IOException e) {
Log.d("TAGFCM", "eun_exdsds: " + e.getMessage());
e.printStackTrace();
return "null";
}
});
try {
Log.d("TAGFCM", "eun_exdsds: " + futureToken.get());
String bearerToken = futureToken.get();
final String FCM_API = "https://fcm.googleapis.com/v1/projects/project-pro/messages:send";
AsyncTask.execute(() -> {
try {
OkHttpClient client = new OkHttpClient();
String jsonBody = "{\"message\":{\"token\":\"" + user_fcm_token + "\", \"notification\":{\"title\":\"" + notificationTitle + "\", \"body\":\"" + notificationBody + "\"}}}";
RequestBody body = RequestBody.create(MediaType.parse("application/json"), jsonBody);
okhttp3.Request request = new okhttp3.Request.Builder()
.url(FCM_API)
.post(body)
.addHeader("Authorization", "Bearer " + bearerToken)
.addHeader("Content-Type", "application/json")
.build();
okhttp3.Response response = client.newCall(request).execute();
Log.d("TAGFCM", "response: " + response.message());
} catch (IOException e) {
Log.d("TAGFCM", "exception" +e.getMessage());
e.printStackTrace();
}
});
} catch (InterruptedException | ExecutionException e) {
Log.d("TAGFCM", "" + e.getMessage()+" ");
e.printStackTrace();
}
executor.shutdown();
}
字符串
2条答案
按热度按时间raogr8fs1#
字符串
ygya80vv2#
字符串
请在刷新getTokenValue时立即执行此操作。