Name: webpush-java
Owner: web-push-libs
Description: Web Push library for Java
Created: 2016-03-11 22:23:02.0
Updated: 2018-05-22 19:49:44.0
Pushed: 2018-03-05 09:16:49.0
Size: 3078
Language: Java
GitHub Committers
User | Most Recent Commit | # Commits |
---|
Other Committers
User | Most Recent Commit | # Commits |
---|
A Web Push library for Java 7. Supports payloads and VAPID.
For Gradle, add the following dependency to build.gradle
:
ile group: 'nl.martijndwars', name: 'web-push', version: '3.1.0'
For Maven, add the following dependency to pom.xml
:
endency>
<groupId>nl.martijndwars</groupId>
<artifactId>web-push</artifactId>
<version>3.1.0</version>
pendency>
This library depends on BouncyCastle, which acts as a Java Cryptography Extension (JCE) provider. BouncyCastle's JARs are signed, and depending on how you package your application, you may need to include BouncyCastle yourself as well.
To build the project yourself, clone this repository and build a run:
adlew assemble
To build a fat JAR in build/libs
(e.g. to use the CLI):
adlew shadowJar
This library is meant to be used as a Java API. However, it also exposes a CLI to easily generate a VAPID keypair and send a push notification.
A command-line interface is available to easily generate a keypair (for VAPID) and to try sending a notification.
e: <main class> [command] [command options]
mmands:
generate-key Generate a VAPID keypair
Usage: generate-key
send-notification Send a push notification
Usage: send-notification [options]
Options:
--subscription
A subscription in JSON format.
--publicKey
The public key as base64url encoded string.
--privateKey
The private key as base64url encoded string.
--payload
The message to send.
Default: Hello, world!
--ttl
The number of seconds that the push service should retain the message.
For example, to generate a keypair and output the keys in base64url encoding:
va -jar build/libs/web-push-3.1.0-all.jar generate-key
icKey:
7I82SAQM78oyGwaJdrQFhVfZqL9h4Y18BLtgJQ-9pSGXwxqAWQudqmcv41RcWgk1ssUeItv4-8khxbhYveM=
ateKey:
cVVFB4JiMYcI74_h9h04QZ1Ks96AyEa1yrMgDwn3
Use the public key in the call to pushManager.subscribe
to get a subscription. Then, to send a notification:
va -jar build/libs/web-push-3.1.0-all.jar send-notification \
subscription="{'endpoint':'https://fcm.googleapis.com/fcm/send/fH-M3xRoLms:APA91bGB0rkNdxTFsXaJGyyyY7LtEmtHJXy8EqW48zSssxDXXACWCvc9eXjBVU54nrBkARTj4Xvl303PoNc0_rwAMrY9dvkQzi9fkaKLP0vlwoB0uqKygPeL77Y19VYHbj_v_FolUlHa','keys':{'p256dh':'BOtBVgsHVWXzwhDAoFE8P2IgQvabz_tuJjIlNacmS3XZ3fRDuVWiBp8bPR3vHCA78edquclcXXYb-olcj3QtIZ4=','auth':'IOScBh9LW5mJ_K2JwXyNqQ=='}}" \
publicKey="BGgL7I82SAQM78oyGwaJdrQFhVfZqL9h4Y18BLtgJQ-9pSGXwxqAWQudqmcv41RcWgk1ssUeItv4-8khxbhYveM=" \
privateKey="ANlfcVVFB4JiMYcI74_h9h04QZ1Ks96AyEa1yrMgDwn3" \
payload="Hello, lovely world!"
If you are behind a corporate proxy you may need to specify the proxy host. This library respects Java's Network Properties, which means that you can pass https.proxyHost
and http.proxyPort
when invoking java
, e.g. java -Dhttp.proxyHost=proxy.corp.com -Dhttp.proxyPort=80 -Dhttps.proxyHost=proxy.corp.com -Dhttps.proxyPort=443 -jar ...
.
First, make sure you add the BouncyCastle security provider:
rity.addProvider(new BouncyCastleProvider());
Then, create an instance of the push service:
Service pushService = new PushService(...);
Then, create a notification based on the user's subscription:
fication notification = new Notification(...);
To send a push notification:
Service.send(notification);
Use sendAsync
instead of send
to get a Future<HttpResponse>
:
Service.sendAsync(notification);
See doc/UsageExample.md for detailed usage instructions. If you plan on using VAPID, read doc/VAPID.md.
Our integration tests use Web Push Testing Service (WPTS) to handle the Selenium and browser orchestrating. To install WPTS:
install web-push-testing-service -g
Then, to start WPTS:
push-testing-service start wpts
Finally, to run all tests:
adlew test
There may not be enough entropy to generate a random seed, which is common on headless servers. There exist two ways to overcome this problem:
Install haveged, a “random number generator that remedies low-entropy conditions in the Linux random device that can occur under some workloads, especially on headless servers.“ This tutorial explains how to install haveged on different Linux distributions.
Change the source for random number generation in the JVM from /dev/random
to /dev/urandom
. This page offers some explanation.
To give credit where credit is due, the PushService is mostly a Java port of marco-c/web-push. The HttpEce class is mostly a Java port of martinthomson/encrypted-content-encoding.
The web-push-libs organization hosts implementations of the Web Push protocol in several languages: