首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过JavaScript访问FCM令牌密钥

通过JavaScript访问FCM令牌密钥
EN

Stack Overflow用户
提问于 2018-06-10 07:14:10
回答 1查看 1.6K关注 0票数 1

是否有任何选项可以通过客户端的Java脚本获得FCM访问令牌密钥?我正在为一个简单的android应用程序使用Firebase,我想让一些用户可以选择发送推送通知消息。

代码语言:javascript
复制
function getAccessToken(){  }

var xhr = new XMLHttpRequest();
xhr.responseType = "json";
xhr.open('POST', "https://fcm.googleapis.com/v1/projects/**********/messages:send", true);
xhr.setRequestHeader('Authorization', "Bearer " + getAccessToken());

我用下面的代码片段尝试了@Ali的建议,但是现在我从refreshAccessToken(.)获得了一个异常带有"Scopes未配置为服务帐户“的消息。我想澄清的是,Ali的答案的第一个注释中的DotNet代码仍然在处理同一个JSON文件。

代码语言:javascript
复制
@JavascriptInterface
private static String readToken() throws IOException, InterruptedException {
    String str = new String("{\n" +
            "  \"type\": \"service_account\",\n" +
            "  \"project_id\": \"*****\",\n" +
            "  \"private_key_id\": \"*****\",\n" +
            "  \"private_key\": \"-----BEGIN PRIVATE KEY-----\\n*****\\n-----END PRIVATE KEY-----\\n\",\n" +
            "  \"client_email\": \"*****\",\n" +
            "  \"client_id\": \"*****\",\n" +
            "  \"auth_uri\": \"*****",\n" +
            "  \"token_uri\": \"*****",\n" +
            "  \"auth_provider_x509_cert_url\": \"*****",\n" +
            "  \"client_x509_cert_url\": \"*****\"\n" + "}\n");

    InputStream stream = new ByteArrayInputStream(str.getBytes(StandardCharsets.UTF_8));
    GoogleCredentials googleCredential = GoogleCredentials.fromStream(stream);
    googleCredential.createScoped(Arrays.asList("https://www.googleapis.com/auth/firebase.messaging"));

    AccessToken token = googleCredential.refreshAccessToken();
    String x = token.getTokenValue();
    return x;
}

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-10 13:24:16

在创建webview之后,启用JavaScript并附加一个JavaScript接口并命名为:

代码语言:javascript
复制
WebSettings webSettings = webview.getSettings();
webSettings.setJavaScriptEnabled(true);
webview.addJavascriptInterface(this, "InterfaceName");

现在,您可以将任何Java函数分配到JavaScript接口,并通过网页访问它。

获取用户FCM令牌的示例:

代码语言:javascript
复制
@JavascriptInterface
public String readToken(){
    String token = FirebaseInstanceId.getInstance().getToken();
    return token;
}

获取FCM访问令牌密钥(参考文献)的示例:

代码语言:javascript
复制
@JavascriptInterface
private static String readToken() throws IOException {
  GoogleCredential googleCredential = GoogleCredential
      .fromStream(new FileInputStream("service-account.json"))
      .createScoped(Arrays.asList(SCOPES));
  googleCredential.refreshToken();
  return googleCredential.getAccessToken();
}

若要将访问令牌添加到HTTP请求头,请执行以下操作:

代码语言:javascript
复制
URL url = new URL(BASE_URL + FCM_SEND_ENDPOINT);
HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();
httpURLConnection.setRequestProperty("Authorization", "Bearer " + getAccessToken());
httpURLConnection.setRequestProperty("Content-Type", "application/json; UTF-8");
return httpURLConnection;

这就是如何在定义了接口的JavaScript中使用WebView调用该函数:

代码语言:javascript
复制
<script>
   var token=InterfaceName.readToken();
</scritp>
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50781408

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档