elemental2.dom.PushSubscription(v2.25)缺失p256dh和auth密钥,如何获取?
获取elemental2.dom.PushSubscription的p256dh和auth密钥
我之前也碰到过这个版本的elemental2没有封装p256dh和auth属性的问题,给你两个实用的解决方案:
方案1:通过JS互操作直接访问底层属性
早期版本的elemental2-dom(比如v2.25)确实没在PushSubscription类里暴露这两个密钥属性,但它们其实已经存在于底层的JavaScript对象中。你可以用Jsinterop的工具类直接获取:
import jsinterop.base.Js; import elemental2.dom.PushSubscription; // 假设你已经通过Service Worker拿到了subscription实例 PushSubscription subscription = ...; // 获取p256dh密钥 String p256dh = Js.asPropertyMap(subscription).get("p256dh").asString(); // 获取auth密钥 String auth = Js.asPropertyMap(subscription).get("auth").asString();
如果后续需要把这些base64编码的密钥转换成Uint8Array(用于推送消息的加密处理),可以这样处理:
import jsinterop.base.Js; import elemental2.core.Uint8Array; // 转换p256dh为Uint8Array String p256dhBase64 = Js.asPropertyMap(subscription).get("p256dh").asString(); Uint8Array p256dhBytes = Js.uncheckedCast(Js.global).atob(p256dhBase64) .split("") .map(c -> c.charCodeAt(0)); // 转换auth为Uint8Array String authBase64 = Js.asPropertyMap(subscription).get("auth").asString(); Uint8Array authBytes = Js.uncheckedCast(Js.global).atob(authBase64) .split("") .map(c -> c.charCodeAt(0));
方案2:升级elemental2-dom版本
elemental2后续的版本(比如v2.3.0及以上)已经在PushSubscription类中添加了getP256dh()和getAuth()方法,升级依赖后就能直接调用封装好的方法:
如果使用Maven,更新pom.xml中的依赖:
<dependency> <groupId>com.google.elemental2</groupId> <artifactId>elemental2-dom</artifactId> <version>2.3.0</version> <!-- 推荐使用最新稳定版 --> </dependency>
升级后代码会更简洁规范:
// 直接调用封装方法获取密钥 String p256dh = subscription.getP256dh(); String auth = subscription.getAuth();
两种方案都能解决你的问题——如果不想改动项目依赖,方案1是最直接的选择;如果项目允许升级依赖,方案2的代码会更易维护。
内容的提问来源于stack exchange,提问作者philwq
相关产品推荐
相关产品推荐

