Android Open Source - scoreflex-android-sdk Scoreflex Gcm Client






From Project

Back to project page scoreflex-android-sdk.

License

The source code is released under:

Apache License

If you think the Android project scoreflex-android-sdk listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.

Java Source Code

/*
 * Licensed to Scoreflex (www.scoreflex.com) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership. Scoreflex licenses this
 * file to you under the Apache License, Version 2.0 (the
 * "License"); you may not use this file except in compliance
 * with the License.  You may obtain a copy of the License at
 *//  www  . j  a  v a2  s .  com
 *    http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied.  See the License for the
 * specific language governing permissions and limitations
 * under the License.
 */

package com.scoreflex;

import java.io.IOException;

import org.json.JSONException;
import org.json.JSONObject;

import com.scoreflex.google.ScoreflexGcmWrapper;
import com.scoreflex.google.ScoreflexGoogleWrapper;
import com.scoreflex.Scoreflex.Response;

import android.annotation.SuppressLint;
import android.app.Activity;
import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.content.pm.PackageManager.NameNotFoundException;
import android.os.AsyncTask;
import android.os.Handler;
import android.os.Looper;
import android.text.TextUtils;
import android.os.Bundle;
import android.support.v4.app.NotificationCompat;
import android.support.v4.app.TaskStackBuilder;
import android.util.Log;


/**
 * A class that handles all the messages form Google Cloud Messaging service
 *
 */
public class ScoreflexGcmClient {
  private static final String GCM_REGISTRATION_ID_PREF_NAME = "__scoreflex_gcm_registration_id";
  private static final String GCM_REGISTRATION_APP_VERSION_PREF_NAME = "__scoreflex_gxm_registration_app_version";
  private static final String SCOREFLEX_CUSTOM_DATA_EXTRA_KEY = "custom";
  private static final String SCOREFLEX_NOTIFICATION_EXTRA_KEY = "_sfx";


  private static int getAppVersion(Context context) {
    try {
      PackageInfo packageInfo = context.getPackageManager().getPackageInfo(
          context.getPackageName(), 0);
      return packageInfo.versionCode;
    } catch (NameNotFoundException e) {
      // should never happen
      throw new RuntimeException("Could not get package name: " + e);
    }
  }

  private static void storeRegistrationIdToScoreflex(String registrationId){
    Scoreflex.RequestParams params = new Scoreflex.RequestParams();
    params.put("token", registrationId);
    Scoreflex.postEventually("/notifications/deviceTokens", params, new Scoreflex.ResponseHandler(){
      public void onFailure(Throwable e, Response errorResponse) {

      }

      public void onSuccess(Response response) {

      }
    });
  }

  protected static String getRegistrationId(Context c) {
    final SharedPreferences prefs = Scoreflex.getSharedPreferences(c);
    String registrationId = prefs.getString(GCM_REGISTRATION_ID_PREF_NAME, "");
    if (registrationId == null || registrationId.length() >0) {
      return "";
    }

    int registeredVersion = prefs.getInt(
        GCM_REGISTRATION_APP_VERSION_PREF_NAME, Integer.MIN_VALUE);
    int currentVersion = getAppVersion(Scoreflex.getApplicationContext());
    if (registeredVersion != currentVersion) {
      return "";
    }
    return registrationId;
  }

  protected static void storeRegistrationId(String registrationId, Context c) {
    final SharedPreferences prefs = Scoreflex.getSharedPreferences(c);
    int appVersion = getAppVersion(c);
    SharedPreferences.Editor editor = prefs.edit();
    editor.putString(GCM_REGISTRATION_ID_PREF_NAME, registrationId);
    editor.putInt(GCM_REGISTRATION_APP_VERSION_PREF_NAME, appVersion);
    editor.commit();
  }

  protected static PendingIntent buildPendingIntent(JSONObject scoreflexData, Context context, Class<? extends Activity> activity) {
    Intent resultIntent = new Intent(context, activity);

    resultIntent.putExtra(Scoreflex.NOTIFICATION_EXTRA_KEY,scoreflexData.toString());

    TaskStackBuilder stackBuilder = TaskStackBuilder.create(context);
    stackBuilder.addParentStack(activity);
    stackBuilder.addNextIntent(resultIntent);
    PendingIntent resultPendingIntent =
       stackBuilder.getPendingIntent(
           0,
           PendingIntent.FLAG_UPDATE_CURRENT
       );
    return resultPendingIntent;
  }

  protected static Notification buildNotification(String text, Context context, int iconResource, PendingIntent pendingIntent)
  {
    final PackageManager pm = context.getApplicationContext().getPackageManager();
    ApplicationInfo ai;
    try {
        ai = pm.getApplicationInfo( context.getPackageName(), 0);
    } catch (final NameNotFoundException e) {
        ai = null;
    }
    final String applicationName = (String) (ai != null ? pm.getApplicationLabel(ai) : "(unknown)");
    NotificationCompat.Builder mBuilder =
       new NotificationCompat.Builder(context)
       .setContentTitle(applicationName)
       .setContentText(text).setSmallIcon(iconResource);

    mBuilder.setContentIntent(pendingIntent);
    Notification notification = mBuilder.build();
    notification.defaults =  Notification.DEFAULT_SOUND | Notification.DEFAULT_VIBRATE;
    notification.flags = Notification.FLAG_AUTO_CANCEL;
    return notification;
  }

  protected static boolean onBroadcastReceived(Context context, Intent intent, int iconResource, Class<? extends Activity> activity) {
     Bundle extras = intent.getExtras();

     if (extras.isEmpty()) {  // has effect of unparcelling Bundle
       return false;
     }
     String customDataJson = extras.getString(SCOREFLEX_CUSTOM_DATA_EXTRA_KEY);
     if (null == customDataJson) {
       return false;
     }

     try {

      JSONObject customData = new JSONObject(customDataJson);
        JSONObject data = customData.getJSONObject(SCOREFLEX_NOTIFICATION_EXTRA_KEY);
        JSONObject sfxData = data.optJSONObject("data");

            if (data.getInt("code") < Scoreflex.NOTIFICATION_TYPE_CHALLENGE_INVITATION) {
                return false;
            }
            String targetPlayerId = sfxData.optString("targetPlayerId");
      String loggedPlayerId = ScoreflexRestClient.getPlayerId(context);

      if (!targetPlayerId.equals(loggedPlayerId)) {
        return false;
      }
      PendingIntent pendingIntent = buildPendingIntent(data, context, activity);
      Notification notification= buildNotification(extras.getString("alert"), context, iconResource, pendingIntent);

      NotificationManager mNotificationManager =
          (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
      mNotificationManager.notify(data.getInt("code"), notification);
      intent.removeExtra(SCOREFLEX_CUSTOM_DATA_EXTRA_KEY);
    } catch (JSONException e1) {

    }

    return false;
  }

  private static void registerInBackground(final String senderId, final Context activity) {
        Handler handler = new Handler(Looper.getMainLooper());
        handler.post(new Runnable() {
            public void run() {
                    new AsyncTask<Object, Object, Object>() {
                        @Override
                        protected Object doInBackground(Object... arg0) {
                            String msg = "";
                            try {
                                String regid = ScoreflexGcmWrapper.register(Scoreflex.getApplicationContext(), senderId);
                                if (regid == null) {
                                    return null;
                                }
                                msg = "Device registered, registration ID=" + regid;
                                storeRegistrationId(regid, activity);
                                storeRegistrationIdToScoreflex(regid);
                            } catch (IOException ex) {
                                msg = "Error :" + ex.getMessage();
                            }
                            return msg;
                        }

                        @Override
                        protected void onPostExecute(Object msg) {

                    }
                }.execute(null, null, null);
            }
        });
    }

  /**
   * Start the registration process for GCM.
   * @param senderID The sender ID to register to.
   * @param context A valid context
   */
  @SuppressLint("NewApi")
  public static void registerForPushNotification(Context context) {
    String regid = getRegistrationId(context);
    String pushSenderId = null;
    try {
      ApplicationInfo ai = context.getPackageManager().getApplicationInfo(context.getPackageName(), PackageManager.GET_META_DATA);
      Bundle bundle = ai.metaData;
      pushSenderId = bundle.getString("com.scoreflex.push.SenderId");
    } catch (NameNotFoundException e) {
      Log.e("Scoreflex", "Could not get com.scoreflex.push.SenderId meta data from your manifest did you add : <meta-data android:name=\"com.scoreflex.push.SenderId\" android:value=\"@string/push_sender_id\"/>");
    } catch (NullPointerException e) {
      Log.e("Scoreflex", "Could not get com.scoreflex.push.SenderId meta data from your manifest did you add : <meta-data android:name=\"com.scoreflex.push.SenderId\" android:value=\"@string/push_sender_id\"/>");
    }

    if (pushSenderId == null)  {
      return;
    }

    if (TextUtils.isEmpty(regid)) {
      registerInBackground(pushSenderId, context);
    } else {
      storeRegistrationIdToScoreflex(regid);
    }
    return;
  }
}




Java Source Code List

com.scoreflex.ConnectivityReceiver.java
com.scoreflex.QueryStringParser.java
com.scoreflex.ScoreflexActivity.java
com.scoreflex.ScoreflexBroadcastReceiver.java
com.scoreflex.ScoreflexGcmClient.java
com.scoreflex.ScoreflexJobQueue.java
com.scoreflex.ScoreflexRequestParamsDecorator.java
com.scoreflex.ScoreflexRequestVault.java
com.scoreflex.ScoreflexRestClient.java
com.scoreflex.ScoreflexUriHelper.java
com.scoreflex.ScoreflexView.java
com.scoreflex.Scoreflex.java
com.scoreflex.SocialCallback.java
com.scoreflex.SocialShareCallback.java
com.scoreflex.facebook.ScoreflexFacebookWrapper.java
com.scoreflex.google.ScoreflexGcmWrapper.java
com.scoreflex.google.ScoreflexGoogleWrapper.java
com.scoreflex.model.JSONParcelable.java