-
Notifications
You must be signed in to change notification settings - Fork 12
Push Server Integration
PowerAuth Push Server documentation has been moved to: https://developers.wultra.com/docs/develop/powerauth-push-server/Push-Server-Integration
Please use the new developer portal to access documentation.
In order to register devices and send push notifications, the Push Server needs to be integrated with server applications. The first application that must communicate with the Push Server is a mobile API application (the one that publishes service specific API for mobile application).
- Running PowerAuth Server with available SOAP interface.
- Running PowerAuth Push Server with available RESTful interface.
- Knowledge of applications based on Spring Framework.
- Software: IDE - Spring Tool Suite, Java EE Application Server (Pivotal Server, Tomcat, ...)
In order to be able to implement integration easily, add Push Server client Maven dependency to your pom.xml
file:
<dependency>
<groupId>io.getlime.security</groupId>
<artifactId>powerauth-push-client</artifactId>
<version>${powerauth.push-server.version}</version>
</dependency>
In order to connect to the PowerAuth Push Server, you need to add following configuration:
@Configuration
@ComponentScan(basePackages = {"io.getlime.push"})
public class PowerAuthPushConfiguration {
@Bean
public PushServerClient pushServerClient() {
PushServerClient client = new PushServerClient();
client.setServiceBaseUrl("http://localhost:8080/powerauth-push-server");
return client;
}
}
In order to implement generic device registration, implement a custom registration RESTful Endpoint that calls the Push Server under the hood, for example like so:
@Controller
@RequestMapping(value = "push")
public class DeviceRegistrationController {
@Autowired
private PushServerClient pushServerClient;
private static final Long APP_ID = 1; // Replace by your app ID or use a configuration class
@RequestMapping(value="device/create", method = RequestMethod.POST)
public @ResponseBody String registerDevice(@RequestBody Map<String,String> request) {
// Get the values from the request
String platform = request.get("platform");
String token = request.get("push_token");
// Check if the context is authenticated - if it is, add activation ID.
// This assures that the activation is assigned with a correct device.
String activationId = null;
PowerAuthApiAuthentication authentication = SecurityContextHolder.getContext().getAuthentication();
if (authentication != null) {
activationId = authentication.getActivationId();
}
// Register the device and return response
boolean result = pushServerClient.registerDevice(APP_ID, token, MobilePlatform.valueOf(platform), activationId);
if (result) {
return "OK";
} else {
return "NOT_OK";
}
}
}
The code checks for PowerAuthApiAuthentication
instance in the security context and if it is present, it binds the activation ID with the push service token.
Note: We are using 'dummy' request (Map<String,String>) and response (String) objects. Replace them with your proprietary classes.
Push Producer Application is any application that sends push notification request. The purpose of the producer applications is to call service for push notification sending (single or batch):
// Prepare push message object
PushMessage push = new PushMessage();
push.setUserId("123");
// Set push message attributes
push.getAttributes().setSilent(false);
push.getAttributes().setPersonal(true);
push.getAttributes().setEncrypted(true); // experimental
// Set push message body
PushMessageBody body = new PushMessageBody();
body.setTitle("Balance update");
body.setBody("Your balance is now $745.00");
body.setSound("default");
body.setBadge(1);
body.setCategory("balance");
body.setCollapseKey("balance");
body.setValidUntil(ISODate("2016-10-12T11:20:04Z").date());
// Add custom message data attributes
Map<String,Object> extras = new HashMap<>();
extras.put("customKey", "customValue");
extras.put("customDate", new Date());
body.setExtras(extras);
// Set the new push message body
push.setBody(body);
// Send single push message
pushServerClient.sendNotification(APP_ID, push);
// Send push message batch
List<PushMessage> messageList = new ArrayList<>();
messageList.add(push);
pushServerClient.sendNotificationBatch(APP_ID, messageList);
In testing or development environments, you may disable SSL validation by setting an attribute when creating PushServerClient
bean. Make sure that this setting is not used in production environment.
@Bean
public PushServerClient pushServerClient() {
PushServerClient client = new PushServerClient();
client.setServiceBaseUrl(powerAuthPushServiceUrl);
// whether invalid SSL certificates should be accepted
if (acceptInvalidSslCertificate) {
sslConfigurationService.trustAllCertificates();
}
return client;
}
Deployment Tutorials
Integration Tutorials
Reference Manual
Technical Topics