Add servlet to either open a pass or the market
this is work to get good UX for use case #61
This commit is contained in:
parent
5ef885a635
commit
6e37ffb674
6 changed files with 168 additions and 131 deletions
|
@ -6,7 +6,7 @@ buildscript {
|
||||||
jcenter()
|
jcenter()
|
||||||
}
|
}
|
||||||
dependencies {
|
dependencies {
|
||||||
classpath 'com.google.appengine:gradle-appengine-plugin:1.9.19'
|
classpath 'com.google.appengine:gradle-appengine-plugin:1.9.34'
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -22,7 +22,7 @@ sourceCompatibility = JavaVersion.VERSION_1_7
|
||||||
targetCompatibility = JavaVersion.VERSION_1_7
|
targetCompatibility = JavaVersion.VERSION_1_7
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
appengineSdk 'com.google.appengine:appengine-java-sdk:1.9.18'
|
appengineSdk 'com.google.appengine:appengine-java-sdk:1.9.34'
|
||||||
compile 'com.google.appengine:appengine-endpoints:1.9.18'
|
compile 'com.google.appengine:appengine-endpoints:1.9.18'
|
||||||
compile 'com.google.appengine:appengine-endpoints-deps:1.9.18'
|
compile 'com.google.appengine:appengine-endpoints-deps:1.9.18'
|
||||||
compile 'javax.servlet:servlet-api:2.5'
|
compile 'javax.servlet:servlet-api:2.5'
|
||||||
|
|
|
@ -0,0 +1,15 @@
|
||||||
|
package org.ligi.passandroid.backend;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import javax.servlet.ServletException;
|
||||||
|
import javax.servlet.http.HttpServlet;
|
||||||
|
import javax.servlet.http.HttpServletRequest;
|
||||||
|
import javax.servlet.http.HttpServletResponse;
|
||||||
|
|
||||||
|
public class OpenOrInstallServlet extends HttpServlet {
|
||||||
|
|
||||||
|
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
|
||||||
|
response.sendRedirect("market://details?id=org.ligi.passandroid&refferer=" + request.getParameter("url"));
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -1,6 +1,6 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<appengine-web-app xmlns="http://appengine.google.com/ns/1.0">
|
<appengine-web-app xmlns="http://appengine.google.com/ns/1.0">
|
||||||
<application>myApplicationId</application>
|
<application>pass-cloud</application>
|
||||||
<version>1</version>
|
<version>1</version>
|
||||||
<threadsafe>true</threadsafe>
|
<threadsafe>true</threadsafe>
|
||||||
|
|
||||||
|
|
|
@ -16,11 +16,21 @@
|
||||||
<param-value>org.ligi.passandroid.backend.RegistrationEndpoint, org.ligi.passandroid.backend.MessagingEndpoint</param-value>
|
<param-value>org.ligi.passandroid.backend.RegistrationEndpoint, org.ligi.passandroid.backend.MessagingEndpoint</param-value>
|
||||||
</init-param>
|
</init-param>
|
||||||
</servlet>
|
</servlet>
|
||||||
|
|
||||||
|
<servlet>
|
||||||
|
<servlet-name>OpenOrInstall</servlet-name>
|
||||||
|
<servlet-class>org.ligi.passandroid.backend.OpenOrInstallServlet</servlet-class>
|
||||||
|
</servlet>
|
||||||
<servlet-mapping>
|
<servlet-mapping>
|
||||||
<servlet-name>SystemServiceServlet</servlet-name>
|
<servlet-name>SystemServiceServlet</servlet-name>
|
||||||
<url-pattern>/_ah/spi/*</url-pattern>
|
<url-pattern>/_ah/spi/*</url-pattern>
|
||||||
</servlet-mapping>
|
</servlet-mapping>
|
||||||
|
|
||||||
|
<servlet-mapping>
|
||||||
|
<servlet-name>OpenOrInstall</servlet-name>
|
||||||
|
<url-pattern>/open_or_install</url-pattern>
|
||||||
|
</servlet-mapping>
|
||||||
|
|
||||||
<welcome-file-list>
|
<welcome-file-list>
|
||||||
<welcome-file>index.html</welcome-file>
|
<welcome-file>index.html</welcome-file>
|
||||||
</welcome-file-list>
|
</welcome-file-list>
|
||||||
|
|
|
@ -1,135 +1,12 @@
|
||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
<html>
|
<html>
|
||||||
<head>
|
<head>
|
||||||
<title>PassAndroid Backend!</title>
|
<title>PassAndroid Backend</title>
|
||||||
<link rel="stylesheet" href="//netdna.bootstrapcdn.com/bootstrap/3.1.1/css/bootstrap.min.css">
|
|
||||||
<link rel="stylesheet" href="//netdna.bootstrapcdn.com/bootstrap/3.1.1/css/bootstrap-theme.min.css">
|
|
||||||
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
|
|
||||||
<script src="//netdna.bootstrapcdn.com/bootstrap/3.1.1/js/bootstrap.min.js"></script>
|
|
||||||
</head>
|
</head>
|
||||||
<body role="document" style="padding-top: 70px;">
|
<body role="document" style="padding-top: 70px;">
|
||||||
<div class="navbar navbar-inverse navbar-fixed-top" role="navigation">
|
This is not what you are looking for! These are valid entry-points for this service:
|
||||||
<div class="container">
|
<br/>
|
||||||
<div class="navbar-header">
|
<a href="http://espass.it">espass.it</a><br/>
|
||||||
<a class="navbar-brand" href="#">Hello, Google Cloud Messaging!</a>
|
<a href="http://github.com/ligi/passandroid">PassAndroid</a>
|
||||||
</div>
|
|
||||||
<div class="navbar-collapse collapse">
|
|
||||||
<ul class="nav navbar-nav">
|
|
||||||
<li class="dropdown">
|
|
||||||
<a href="#" class="dropdown-toggle" data-toggle="dropdown">Documentation <b class="caret"></b></a>
|
|
||||||
<ul class="dropdown-menu">
|
|
||||||
<li><a href="https://developers.google.com/appengine/docs/java/">Google App Engine</a></li>
|
|
||||||
<li><a href="https://developers.google.com/appengine/docs/java/endpoints/">Google Cloud Endpoints</a></li>
|
|
||||||
<li><a href="http://developer.android.com/google/gcm/">Google Cloud Messaging</a></li>
|
|
||||||
<li><a href="https://github.com/GoogleCloudPlatform/gradle-appengine-templates/tree/master/GcmEndpoints">Connecting your Android
|
|
||||||
application to this backend</a></li>
|
|
||||||
</ul>
|
|
||||||
</li>
|
|
||||||
<li><a href="/_ah/api/explorer">Google Cloud Endpoints API Explorer</a></li>
|
|
||||||
<li><a href="https://console.developers.google.com">Google Developers Console</a></li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="container theme-showcase" role="main">
|
|
||||||
<!--
|
|
||||||
Output from GCM call.
|
|
||||||
-->
|
|
||||||
<div class="alert alert-success" style="visibility: collapse;" id="outputAlert"></div>
|
|
||||||
|
|
||||||
<!--
|
|
||||||
A form that takes a message text and submits it to "messaging" Endpoints API,
|
|
||||||
access to this Endpoints API is enabled once the client is loaded below.
|
|
||||||
-->
|
|
||||||
<div class="jumbotron">
|
|
||||||
<div class="row">
|
|
||||||
<div class="col-lg-12">
|
|
||||||
<h1>Hello, Google Cloud Messaging!</h1>
|
|
||||||
|
|
||||||
<p>Enter your message below and press "Send Message" button to send it over Google Cloud Messaging to all registered devices.</p>
|
|
||||||
|
|
||||||
<form>
|
|
||||||
<div class="input-group">
|
|
||||||
<input type="text" class="form-control input-lg" placeholder="Message text" id="messageTextInput"/>
|
|
||||||
<span class="input-group-btn">
|
|
||||||
<button class="btn btn-default btn-primary btn-group btn-lg" type="submit" id="sendMessageButton">Send Message »</button>
|
|
||||||
</span>
|
|
||||||
</div>
|
|
||||||
</form>
|
|
||||||
<br/>
|
|
||||||
|
|
||||||
<p>If you need step-by-step instructions for connecting your Android application to this backend module, see <a
|
|
||||||
href="https://github.com/GoogleCloudPlatform/gradle-appengine-templates/tree/master/GcmEndpoints">"App Engine Backend with Google Cloud
|
|
||||||
Messaging" template documentation</a>.</p>
|
|
||||||
|
|
||||||
<p>
|
|
||||||
<small>
|
|
||||||
For more information about Google App Engine for Java, check out the <a href="https://developers.google.com/appengine/docs/java/">App
|
|
||||||
Engine documentation</a>.<br/>
|
|
||||||
To learn more about Google Cloud Endpoints, see <a href="https://developers.google.com/appengine/docs/java/endpoints/">Cloud Endpoints
|
|
||||||
documentation</a>.<br/>
|
|
||||||
Similarly, for more information about Google Cloud Messaging, see <a href="http://developer.android.com/google/gcm/">Cloud Messaging
|
|
||||||
documentation</a>.<br/>
|
|
||||||
If you'd like to access your generated Google Cloud Endpoints APIs directly, see the <a href="/_ah/api/explorer">Cloud Endpoints API
|
|
||||||
Explorer</a>.
|
|
||||||
</small>
|
|
||||||
</p>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<script type="text/javascript">
|
|
||||||
// A function that attaches a "Send Message" button click handler
|
|
||||||
function enableClick() {
|
|
||||||
document.getElementById('sendMessageButton').onclick = function() {
|
|
||||||
var message = document.getElementById('messageTextInput').value;
|
|
||||||
if (!message) {
|
|
||||||
message = '(Empty message)';
|
|
||||||
}
|
|
||||||
|
|
||||||
gapi.client.messaging.messagingEndpoint.sendMessage({'message': message}).execute(
|
|
||||||
function(response) {
|
|
||||||
var outputAlertDiv = document.getElementById('outputAlert');
|
|
||||||
outputAlertDiv.style.visibility = 'visible';
|
|
||||||
|
|
||||||
if (response && response.error) {
|
|
||||||
outputAlertDiv.className = 'alert alert-danger';
|
|
||||||
outputAlertDiv.innerHTML = '<b>Error Code:</b> ' + response.error.code + ' [' + response.error.message +']';
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
outputAlertDiv.className = 'alert alert-success';
|
|
||||||
outputAlertDiv.innerHTML = '<b>Success:</b> Message \"' + message + '\" sent to all registered devices!</h2>';
|
|
||||||
}
|
|
||||||
}
|
|
||||||
);
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// This is called initially
|
|
||||||
function init() {
|
|
||||||
var apiName = 'messaging'
|
|
||||||
var apiVersion = 'v1'
|
|
||||||
var apiRoot = 'https://' + window.location.host + '/_ah/api';
|
|
||||||
if (window.location.hostname == 'localhost'
|
|
||||||
|| window.location.hostname == '127.0.0.1'
|
|
||||||
|| ((window.location.port != "") && (window.location.port > 1023))) {
|
|
||||||
// We're probably running against the DevAppServer
|
|
||||||
apiRoot = 'http://' + window.location.host + '/_ah/api';
|
|
||||||
}
|
|
||||||
var callback = function() {
|
|
||||||
enableClick();
|
|
||||||
}
|
|
||||||
gapi.client.load(apiName, apiVersion, callback, apiRoot);
|
|
||||||
}
|
|
||||||
|
|
||||||
</script>
|
|
||||||
<!--
|
|
||||||
Load the Google APIs Client Library for JavaScript
|
|
||||||
More info here : https://developers.google.com/api-client-library/javascript/reference/referencedocs
|
|
||||||
-->
|
|
||||||
<script src="https://apis.google.com/js/client.js?onload=init"></script>
|
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
135
backend/src/main/webapp/test.html
Normal file
135
backend/src/main/webapp/test.html
Normal file
|
@ -0,0 +1,135 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<title>PassAndroid Backend!</title>
|
||||||
|
<link rel="stylesheet" href="//netdna.bootstrapcdn.com/bootstrap/3.1.1/css/bootstrap.min.css">
|
||||||
|
<link rel="stylesheet" href="//netdna.bootstrapcdn.com/bootstrap/3.1.1/css/bootstrap-theme.min.css">
|
||||||
|
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
|
||||||
|
<script src="//netdna.bootstrapcdn.com/bootstrap/3.1.1/js/bootstrap.min.js"></script>
|
||||||
|
</head>
|
||||||
|
<body role="document" style="padding-top: 70px;">
|
||||||
|
<div class="navbar navbar-inverse navbar-fixed-top" role="navigation">
|
||||||
|
<div class="container">
|
||||||
|
<div class="navbar-header">
|
||||||
|
<a class="navbar-brand" href="#">Hello, Google Cloud Messaging!</a>
|
||||||
|
</div>
|
||||||
|
<div class="navbar-collapse collapse">
|
||||||
|
<ul class="nav navbar-nav">
|
||||||
|
<li class="dropdown">
|
||||||
|
<a href="#" class="dropdown-toggle" data-toggle="dropdown">Documentation <b class="caret"></b></a>
|
||||||
|
<ul class="dropdown-menu">
|
||||||
|
<li><a href="https://developers.google.com/appengine/docs/java/">Google App Engine</a></li>
|
||||||
|
<li><a href="https://developers.google.com/appengine/docs/java/endpoints/">Google Cloud Endpoints</a></li>
|
||||||
|
<li><a href="http://developer.android.com/google/gcm/">Google Cloud Messaging</a></li>
|
||||||
|
<li><a href="https://github.com/GoogleCloudPlatform/gradle-appengine-templates/tree/master/GcmEndpoints">Connecting your Android
|
||||||
|
application to this backend</a></li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li><a href="/_ah/api/explorer">Google Cloud Endpoints API Explorer</a></li>
|
||||||
|
<li><a href="https://console.developers.google.com">Google Developers Console</a></li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="container theme-showcase" role="main">
|
||||||
|
<!--
|
||||||
|
Output from GCM call.
|
||||||
|
-->
|
||||||
|
<div class="alert alert-success" style="visibility: collapse;" id="outputAlert"></div>
|
||||||
|
|
||||||
|
<!--
|
||||||
|
A form that takes a message text and submits it to "messaging" Endpoints API,
|
||||||
|
access to this Endpoints API is enabled once the client is loaded below.
|
||||||
|
-->
|
||||||
|
<div class="jumbotron">
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-lg-12">
|
||||||
|
<h1>Hello, Google Cloud Messaging!</h1>
|
||||||
|
|
||||||
|
<p>Enter your message below and press "Send Message" button to send it over Google Cloud Messaging to all registered devices.</p>
|
||||||
|
|
||||||
|
<form>
|
||||||
|
<div class="input-group">
|
||||||
|
<input type="text" class="form-control input-lg" placeholder="Message text" id="messageTextInput"/>
|
||||||
|
<span class="input-group-btn">
|
||||||
|
<button class="btn btn-default btn-primary btn-group btn-lg" type="submit" id="sendMessageButton">Send Message »</button>
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
<br/>
|
||||||
|
|
||||||
|
<p>If you need step-by-step instructions for connecting your Android application to this backend module, see <a
|
||||||
|
href="https://github.com/GoogleCloudPlatform/gradle-appengine-templates/tree/master/GcmEndpoints">"App Engine Backend with Google Cloud
|
||||||
|
Messaging" template documentation</a>.</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
<small>
|
||||||
|
For more information about Google App Engine for Java, check out the <a href="https://developers.google.com/appengine/docs/java/">App
|
||||||
|
Engine documentation</a>.<br/>
|
||||||
|
To learn more about Google Cloud Endpoints, see <a href="https://developers.google.com/appengine/docs/java/endpoints/">Cloud Endpoints
|
||||||
|
documentation</a>.<br/>
|
||||||
|
Similarly, for more information about Google Cloud Messaging, see <a href="http://developer.android.com/google/gcm/">Cloud Messaging
|
||||||
|
documentation</a>.<br/>
|
||||||
|
If you'd like to access your generated Google Cloud Endpoints APIs directly, see the <a href="/_ah/api/explorer">Cloud Endpoints API
|
||||||
|
Explorer</a>.
|
||||||
|
</small>
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<script type="text/javascript">
|
||||||
|
// A function that attaches a "Send Message" button click handler
|
||||||
|
function enableClick() {
|
||||||
|
document.getElementById('sendMessageButton').onclick = function() {
|
||||||
|
var message = document.getElementById('messageTextInput').value;
|
||||||
|
if (!message) {
|
||||||
|
message = '(Empty message)';
|
||||||
|
}
|
||||||
|
|
||||||
|
gapi.client.messaging.messagingEndpoint.sendMessage({'message': message}).execute(
|
||||||
|
function(response) {
|
||||||
|
var outputAlertDiv = document.getElementById('outputAlert');
|
||||||
|
outputAlertDiv.style.visibility = 'visible';
|
||||||
|
|
||||||
|
if (response && response.error) {
|
||||||
|
outputAlertDiv.className = 'alert alert-danger';
|
||||||
|
outputAlertDiv.innerHTML = '<b>Error Code:</b> ' + response.error.code + ' [' + response.error.message +']';
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
outputAlertDiv.className = 'alert alert-success';
|
||||||
|
outputAlertDiv.innerHTML = '<b>Success:</b> Message \"' + message + '\" sent to all registered devices!</h2>';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// This is called initially
|
||||||
|
function init() {
|
||||||
|
var apiName = 'messaging'
|
||||||
|
var apiVersion = 'v1'
|
||||||
|
var apiRoot = 'https://' + window.location.host + '/_ah/api';
|
||||||
|
if (window.location.hostname == 'localhost'
|
||||||
|
|| window.location.hostname == '127.0.0.1'
|
||||||
|
|| ((window.location.port != "") && (window.location.port > 1023))) {
|
||||||
|
// We're probably running against the DevAppServer
|
||||||
|
apiRoot = 'http://' + window.location.host + '/_ah/api';
|
||||||
|
}
|
||||||
|
var callback = function() {
|
||||||
|
enableClick();
|
||||||
|
}
|
||||||
|
gapi.client.load(apiName, apiVersion, callback, apiRoot);
|
||||||
|
}
|
||||||
|
|
||||||
|
</script>
|
||||||
|
<!--
|
||||||
|
Load the Google APIs Client Library for JavaScript
|
||||||
|
More info here : https://developers.google.com/api-client-library/javascript/reference/referencedocs
|
||||||
|
-->
|
||||||
|
<script src="https://apis.google.com/js/client.js?onload=init"></script>
|
||||||
|
</body>
|
||||||
|
</html>
|
Loading…
Reference in a new issue