123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140 |
- package uprrp.tania;
-
- import android.os.AsyncTask;
- import android.util.Log;
-
- import com.amazonaws.auth.CognitoCachingCredentialsProvider;
- import com.amazonaws.services.sns.AmazonSNSClient;
- import com.amazonaws.services.sns.model.CreatePlatformEndpointRequest;
- import com.amazonaws.services.sns.model.CreatePlatformEndpointResult;
- import com.amazonaws.services.sns.model.GetEndpointAttributesRequest;
- import com.amazonaws.services.sns.model.GetEndpointAttributesResult;
- import com.amazonaws.services.sns.model.InvalidParameterException;
- import com.amazonaws.services.sns.model.NotFoundException;
- import com.amazonaws.services.sns.model.SetEndpointAttributesRequest;
-
- import java.util.HashMap;
- import java.util.Map;
- import java.util.regex.Matcher;
- import java.util.regex.Pattern;
-
- public class SNSRegister extends AsyncTask <String, Void, String> {
-
- private static final String TAG = "SNSRegister";
- AmazonSNSClient client;
- String arnStorage = null;
-
- public SNSRegister (CognitoCachingCredentialsProvider credentialsProvider){
- client = new AmazonSNSClient(credentialsProvider);
- }
-
- @Override
- protected void onPostExecute(String s) {
- super.onPostExecute(s);
- }
-
- @Override
- protected String doInBackground(String... strings) {
- String endpointArn = retrieveEndpointArn();
- String token = GlobalValues.getInstance().getDeviceToken(); // FirebaseInstanceId.getInstance().getToken()
-
- boolean updateNeeded = false;
- boolean createNeeded = (null == endpointArn);
-
- if (createNeeded) {
- // No platform endpoint ARN is stored; need to call createEndpoint.
- endpointArn = createEndpoint(token);
- createNeeded = false;
- }
-
- Log.i(TAG, "Retrieving platform endpoint data...");
- // Look up the platform endpoint and make sure the data in it is current, even if
- // it was just created.
- try {
- GetEndpointAttributesRequest geaReq =
- new GetEndpointAttributesRequest()
- .withEndpointArn(endpointArn);
-
- GetEndpointAttributesResult geaRes =
- client.getEndpointAttributes(geaReq);
-
- updateNeeded = !geaRes.getAttributes().get("Token").equals(token)
- || !geaRes.getAttributes().get("Enabled").equalsIgnoreCase("true");
-
- } catch (NotFoundException nfe) {
- // We had a stored ARN, but the platform endpoint associated with it
- // disappeared. Recreate it.
- createNeeded = true;
- }
-
- if (createNeeded) {
- createEndpoint(token);
- }
-
- Log.d(TAG, "updateNeeded = " + updateNeeded);
-
- if (updateNeeded) {
- // The platform endpoint is out of sync with the current data;
- // update the token and enable it.
- Log.d(TAG, "Updating platform endpoint " + endpointArn);
- Map attribs = new HashMap();
- attribs.put("Token", token);
- attribs.put("Enabled", "true");
- SetEndpointAttributesRequest saeReq =
- new SetEndpointAttributesRequest()
- .withEndpointArn(endpointArn)
- .withAttributes(attribs);
- client.setEndpointAttributes(saeReq);
- }
-
- return endpointArn;
- }
-
- /**
- * @return never null
- * */
- private String createEndpoint(String token) {
-
- String endpointArn = null;
- try {
- Log.d(TAG, "Creating platform endpoint with token " + token);
- CreatePlatformEndpointRequest cpeReq =
- new CreatePlatformEndpointRequest()
- .withPlatformApplicationArn("arn:aws:sns:us-east-1:227586183436:app/GCM/TANIA_Android")
- .withToken(token);
- CreatePlatformEndpointResult cpeRes = client
- .createPlatformEndpoint(cpeReq);
- endpointArn = cpeRes.getEndpointArn();
- } catch (InvalidParameterException ipe) {
- String message = ipe.getErrorMessage();
- Log.d(TAG, "Exception message: " + message);
- Pattern p = Pattern
- .compile(".*Endpoint (arn:aws:sns[^ ]+) already exists " +
- "with the same token.*");
- Matcher m = p.matcher(message);
- if (m.matches()) {
- // The platform endpoint already exists for this token, but with
- // additional custom data that
- // createEndpoint doesn't want to overwrite. Just use the
- // existing platform endpoint.
- endpointArn = m.group(1);
- } else {
- // Rethrow the exception, the input is actually bad.
- throw ipe;
- }
- }
- storeEndpointArn(endpointArn);
- return endpointArn;
- }
-
-
- private String retrieveEndpointArn() {
- return arnStorage;
- }
-
- private void storeEndpointArn(String endpointArn) {
- arnStorage = endpointArn;
- }
-
-
- }
|