package com.mobmonkey.mobmonkeysdk.adapters; import java.io.UnsupportedEncodingException; import org.apache.http.Header; import org.apache.http.client.methods.HttpGet; import org.apache.http.client.methods.HttpPost; import org.apache.http.client.methods.HttpPut; import org.apache.http.entity.StringEntity; import org.json.JSONException; import android.net.Uri; import android.net.Uri.Builder; import android.util.Log; import com.mobmonkey.mobmonkeysdk.asynctasks.MMGetAsyncTask; import com.mobmonkey.mobmonkeysdk.asynctasks.MMPostAsyncTask; import com.mobmonkey.mobmonkeysdk.asynctasks.MMPutAsyncTask; import com.mobmonkey.mobmonkeysdk.utils.MMSDKConstants; import com.mobmonkey.mobmonkeysdk.utils.MMAdapter; import com.mobmonkey.mobmonkeysdk.utils.MMCallback; import com.mobmonkey.mobmonkeysdk.utils.MMDeviceUUID; /** * Final adapter class that handles all the user functionalities of MobMonkey Android * @author Dezapp, LLC * */ public class MMUserAdapter extends MMAdapter { private final static String TAG = "MMUserAdapter: "; /** * Private class to prevent the instantiation of this class outside the scope of this class */ private MMUserAdapter() { throw new AssertionError(); } /** * Function that signs user in to MobMonkey with normal email and password * @param mmCallback The {@link MMCallback} to handle the response from MobMonkey server after posting the sign in url * @param partnerId MobMonkey unique partner id * @param emailAddress The email address of the user * @param password The password that is associated with the email address of the user */ public static void signInUser(MMCallback mmCallback, String partnerId, String user, String auth) { createUriBuilderInstance(MMSDKConstants.URI_PATH_SIGNIN); uriBuilder.appendQueryParameter(MMSDKConstants.KEY_DEVICE_TYPE, MMSDKConstants.DEVICE_TYPE) .appendQueryParameter(MMSDKConstants.KEY_DEVICE_ID, MMDeviceUUID.getDeviceUUID().toString()) .appendQueryParameter(MMSDKConstants.KEY_USE_OAUTH, Boolean.toString(false)); Log.d(TAG, TAG + "signin uri: " + uriBuilder.toString()); HttpPost httpPost = new HttpPost(uriBuilder.toString()); httpPost.setHeader(MMSDKConstants.KEY_CONTENT_TYPE, MMSDKConstants.CONTENT_TYPE_APP_JSON); httpPost.setHeader(MMSDKConstants.KEY_PARTNER_ID, partnerId); httpPost.setHeader(MMSDKConstants.KEY_USER, user); httpPost.setHeader(MMSDKConstants.KEY_AUTH, auth); new MMPostAsyncTask(mmCallback).execute(httpPost); } /** * Function that signs user in to MobMonkey with Facebook credentials * @param mmCallback The {@link MMCallback} to handle the response from MobMonkey server after posting the sign in url * @param oauthToken Facebook OAuth access token * @param providerUserName Facebook provider username * @param partnerId MobMonkey unique partner id * @param firstName * @param lastName * @param birthdate * @param gender */ public static void signInUserFacebook(MMCallback mmCallback, String partnerId, String oauthToken, String providerUserName, String firstName, String lastName, String birthdate, String gender) { createUriBuilderInstance(MMSDKConstants.URI_PATH_SIGNIN); uriBuilder.appendQueryParameter(MMSDKConstants.KEY_DEVICE_TYPE, MMSDKConstants.DEVICE_TYPE) .appendQueryParameter(MMSDKConstants.KEY_DEVICE_ID, MMDeviceUUID.getDeviceUUID().toString()) .appendQueryParameter(MMSDKConstants.KEY_USE_OAUTH, Boolean.toString(true)) .appendQueryParameter(MMSDKConstants.KEY_PROVIDER, MMSDKConstants.OAUTH_PROVIDER_FACEBOOK) .appendQueryParameter(MMSDKConstants.KEY_OAUTH_TOKEN, oauthToken) .appendQueryParameter(MMSDKConstants.KEY_PROVIDER_USERNAME, providerUserName) .appendQueryParameter(MMSDKConstants.KEY_FIRST_NAME, firstName) .appendQueryParameter(MMSDKConstants.KEY_LAST_NAME, lastName) .appendQueryParameter(MMSDKConstants.KEY_BIRTHDATE, birthdate) .appendQueryParameter(MMSDKConstants.KEY_GENDER, gender); Log.d(TAG, TAG + "signin uri: " + uriBuilder.toString()); HttpPost httpPost = new HttpPost(uriBuilder.toString()); httpPost.setHeader(MMSDKConstants.KEY_CONTENT_TYPE, MMSDKConstants.CONTENT_TYPE_APP_JSON); httpPost.setHeader(MMSDKConstants.KEY_PARTNER_ID, partnerId); httpPost.setHeader(MMSDKConstants.KEY_OAUTH_PROVIDER_USER_NAME, providerUserName); httpPost.setHeader(MMSDKConstants.KEY_OAUTH_TOKEN, oauthToken); httpPost.setHeader(MMSDKConstants.KEY_OAUTH_PROVIDER, MMSDKConstants.OAUTH_PROVIDER_FACEBOOK); new MMPostAsyncTask(mmCallback).execute(httpPost); } /** * Function that signs user in to MobMonkey with Twitter credentials * @param mmCallback The {@link MMCallback} to handle the response from MobMonkey server after posting the sign in url * @param oauthToken Twitter OAuth access token * @param providerUserName Twitter provider username * @param partnerId MobMonkey unique partner id */ public static void signInUserTwitter(MMCallback mmCallback, String partnerId, String providerUserName, String oauthToken) { createUriBuilderInstance(MMSDKConstants.URI_PATH_SIGNIN); uriBuilder.appendQueryParameter(MMSDKConstants.KEY_DEVICE_ID, MMDeviceUUID.getDeviceUUID().toString()) .appendQueryParameter(MMSDKConstants.KEY_DEVICE_TYPE, MMSDKConstants.DEVICE_TYPE) .appendQueryParameter(MMSDKConstants.KEY_USE_OAUTH, Boolean.toString(true)) .appendQueryParameter(MMSDKConstants.KEY_PROVIDER, MMSDKConstants.OAUTH_PROVIDER_TWITTER) .appendQueryParameter(MMSDKConstants.KEY_PROVIDER_USERNAME, providerUserName); Log.d(TAG, TAG + "uriBuilder: " + uriBuilder.toString()); HttpPost httpPost = new HttpPost(uriBuilder.toString()); httpPost.setHeader(MMSDKConstants.KEY_CONTENT_TYPE, MMSDKConstants.CONTENT_TYPE_APP_JSON); httpPost.setHeader(MMSDKConstants.KEY_PARTNER_ID, partnerId); httpPost.setHeader(MMSDKConstants.KEY_OAUTH_PROVIDER_USER_NAME, providerUserName); httpPost.setHeader(MMSDKConstants.KEY_OAUTH_TOKEN, oauthToken); httpPost.setHeader(MMSDKConstants.KEY_OAUTH_PROVIDER, MMSDKConstants.OAUTH_PROVIDER_TWITTER); new MMPostAsyncTask(mmCallback).execute(httpPost); } /** * Function that signs user up normally to MobMonkey with entered information * @param mmCallback The {@link MMCallback} to handle the response from MobMonkey server after posting the sign up url * @param firstName User first name * @param lastName User last name * @param emailAddress User email address * @param password User password * @param birthdate User birth date * @param gender User gender * @param checkedToS User accepted Term of Use flag * @param partnerId MobMonkey unique partner id */ public static void signUpNewUser(MMCallback mmCallback, String firstName, String lastName, String emailAddress, String password, String birthdate, String gender, boolean checkedToS, String partnerId) { createUriBuilderInstance(MMSDKConstants.URI_PATH_USER); uriBuilder.appendQueryParameter(MMSDKConstants.KEY_DEVICE_ID, MMDeviceUUID.getDeviceUUID().toString()) .appendQueryParameter(MMSDKConstants.KEY_DEVICE_TYPE, MMSDKConstants.DEVICE_TYPE); createParamsInstance(); try { params.put(MMSDKConstants.KEY_FIRST_NAME, firstName); params.put(MMSDKConstants.KEY_LAST_NAME, lastName); params.put(MMSDKConstants.KEY_EMAIL_ADDRESS, emailAddress); params.put(MMSDKConstants.KEY_PASSWORD, password); params.put(MMSDKConstants.KEY_BIRTHDATE, birthdate); params.put(MMSDKConstants.KEY_GENDER, gender); params.put(MMSDKConstants.KEY_ACCEPTEDTOS, checkedToS); // TODO: remove hardcoded values params.put(MMSDKConstants.KEY_CITY, "Tempe"); params.put(MMSDKConstants.KEY_STATE, "Arizona"); params.put(MMSDKConstants.KEY_ZIP, "85280"); params.put(MMSDKConstants.KEY_PHONE_NUMBER, "480-555-5555"); // end TODO: Log.d(TAG, TAG + "userInfo: " + params.toString()); Log.d(TAG, TAG + "uri: " + uriBuilder.toString()); HttpPut httpPut = new HttpPut(uriBuilder.toString()); StringEntity stringEntity = new StringEntity(params.toString()); httpPut.setEntity(stringEntity); httpPut.setHeader(MMSDKConstants.KEY_CONTENT_TYPE, MMSDKConstants.CONTENT_TYPE_APP_JSON); httpPut.setHeader(MMSDKConstants.KEY_PARTNER_ID, partnerId); new MMPutAsyncTask(mmCallback).execute(httpPut); } catch (JSONException e) { e.printStackTrace(); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } } /** * Function that signs user in to MobMonkey with Facebook credentials * @param mmCallback The {@link MMCallback} to handle the response from MobMonkey server after posting the sign up url * @param partnerId MobMonkey unique partner id * @param oauthToken Facebook OAuth access token * @param providerUserName Facebook provider username * @param firstName * @param lastName * @param birthdate * @param gender */ public static void signUpNewUserFacebook(MMCallback mmCallback, String partnerId, String oauthToken, String providerUserName, String firstName, String lastName, String birthdate, String gender) { createUriBuilderInstance(MMSDKConstants.URI_PATH_SIGNIN); uriBuilder.appendQueryParameter(MMSDKConstants.KEY_DEVICE_TYPE, MMSDKConstants.DEVICE_TYPE) .appendQueryParameter(MMSDKConstants.KEY_DEVICE_ID, MMDeviceUUID.getDeviceUUID().toString()) .appendQueryParameter(MMSDKConstants.KEY_USE_OAUTH, Boolean.toString(true)) .appendQueryParameter(MMSDKConstants.KEY_PROVIDER, MMSDKConstants.OAUTH_PROVIDER_FACEBOOK) .appendQueryParameter(MMSDKConstants.KEY_PROVIDER_USERNAME, providerUserName) .appendQueryParameter(MMSDKConstants.KEY_FIRST_NAME, firstName) .appendQueryParameter(MMSDKConstants.KEY_LAST_NAME, lastName) .appendQueryParameter(MMSDKConstants.KEY_BIRTHDATE, birthdate) .appendQueryParameter(MMSDKConstants.KEY_GENDER, gender); // Log.d(TAG, TAG + "signUpURL: " + signUpURL); Log.d(TAG, TAG + "uriBuilder: " + uriBuilder.toString()); HttpPost httpPost = new HttpPost(uriBuilder.toString()); httpPost.setHeader(MMSDKConstants.KEY_CONTENT_TYPE, MMSDKConstants.CONTENT_TYPE_APP_JSON); httpPost.setHeader(MMSDKConstants.KEY_PARTNER_ID, partnerId); httpPost.setHeader(MMSDKConstants.KEY_OAUTH_PROVIDER_USER_NAME, providerUserName); httpPost.setHeader(MMSDKConstants.KEY_OAUTH_TOKEN, oauthToken); httpPost.setHeader(MMSDKConstants.KEY_OAUTH_PROVIDER, MMSDKConstants.OAUTH_PROVIDER_FACEBOOK); new MMPostAsyncTask(mmCallback).execute(httpPost); } /** * Function that signs user up to MobMonkey with Twitter credentials and user entered info * @param mmCallback The {@link MMCallback} to handle the response from MobMonkey server after posting the sign up url * @param firstName User first name * @param lastName User last name * @param oauthToken Twitter OAuth access token * @param providerUserName Twitter provider username * @param emailAddress User email address * @param birthdate User birth date * @param gender User gender * @param partnerId MobMonkey unique partner id */ public static void signUpNewUserTwitter(MMCallback mmCallback, String firstName, String lastName, String oauthToken, String providerUserName, String emailAddress, String birthdate, int gender, String partnerId) { createUriBuilderInstance(MMSDKConstants.URI_PATH_SIGNIN, MMSDKConstants.URI_PATH_REGISTEREMAIL); uriBuilder.appendQueryParameter(MMSDKConstants.KEY_DEVICE_TYPE, MMSDKConstants.DEVICE_TYPE) .appendQueryParameter(MMSDKConstants.KEY_DEVICE_ID, MMDeviceUUID.getDeviceUUID().toString()) .appendQueryParameter(MMSDKConstants.KEY_PROVIDER, MMSDKConstants.OAUTH_PROVIDER_TWITTER) .appendQueryParameter(MMSDKConstants.KEY_OAUTH_TOKEN, oauthToken) .appendQueryParameter(MMSDKConstants.KEY_PROVIDER_USERNAME, providerUserName) .appendQueryParameter(MMSDKConstants.KEY_EMAIL_ADDRESS, emailAddress) .appendQueryParameter(MMSDKConstants.KEY_FIRST_NAME, firstName) .appendQueryParameter(MMSDKConstants.KEY_LAST_NAME, lastName) .appendQueryParameter(MMSDKConstants.KEY_GENDER, Integer.toString(gender)) .appendQueryParameter(MMSDKConstants.KEY_BIRTHDATE, birthdate); // Log.d(TAG, TAG + "signUpURL: " + signUpURL); Log.d(TAG, TAG + "uriBuilder: " + uriBuilder.toString()); HttpPost httpPost = new HttpPost(uriBuilder.toString()); httpPost.setHeader(MMSDKConstants.KEY_CONTENT_TYPE, MMSDKConstants.CONTENT_TYPE_APP_JSON); httpPost.setHeader(MMSDKConstants.KEY_PARTNER_ID, partnerId); new MMPostAsyncTask(mmCallback).execute(httpPost); } /** * Function that signs out user from MobMonkey server * @param mmCallback The {@link MMCallback} to handle the response from MobMonkey server after posting the sign out url */ public static void signOut(MMCallback mmCallback) { createUriBuilderInstance(MMSDKConstants.URI_PATH_SIGNOUT, MMSDKConstants.DEVICE_TYPE, MMDeviceUUID.getDeviceUUID().toString()); Log.d(TAG, TAG + "uriBuilder: " + uriBuilder.toString()); HttpPost httpPost = newHttpPostInstance(); new MMPostAsyncTask(mmCallback).execute(httpPost); } /** * * @param mmCallback */ public static void getUserInfo(MMCallback mmCallback) { createUriBuilderInstance(MMSDKConstants.URI_PATH_USER); HttpGet httpGet = newHttpGetInstance(); new MMGetAsyncTask(mmCallback).execute(httpGet); } /** * * @param mmCallback * @param firstName * @param lastName * @param password * @param birthdate * @param gender * @param city * @param state * @param zip * @param acceptedtos */ public static void updateUserInfo(MMCallback mmCallback, String firstName, String lastName, String password, long birthdate, int gender, String city, String state, String zip, boolean acceptedtos) { createUriBuilderInstance(MMSDKConstants.URI_PATH_USER); createParamsInstance(); try { params.put(MMSDKConstants.KEY_FIRST_NAME, firstName); params.put(MMSDKConstants.KEY_LAST_NAME, lastName); params.put(MMSDKConstants.KEY_PASSWORD, password); params.put(MMSDKConstants.KEY_BIRTHDATE, birthdate); params.put(MMSDKConstants.KEY_GENDER, gender); params.put(MMSDKConstants.KEY_CITY, city); params.put(MMSDKConstants.KEY_STATE, state); params.put(MMSDKConstants.KEY_ZIP, zip); params.put(MMSDKConstants.KEY_ACCEPTEDTOS, acceptedtos); Log.d(TAG, params.toString()); HttpPost httpPost = newHttpPostInstance(); StringEntity stringEntity = new StringEntity(params.toString()); httpPost.setEntity(stringEntity); new MMPostAsyncTask(mmCallback).execute(httpPost); } catch (JSONException ex) { ex.printStackTrace(); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } } /** * * @param mmCallback */ public static void subscribeUser(MMCallback mmCallback) { createUriBuilderInstance(MMSDKConstants.URI_PATH_USER, MMSDKConstants.URI_PATH_PAID_SUBSCRIPTION); uriBuilder.appendQueryParameter(MMSDKConstants.URI_QUERY_PARAM_KEY_EMAIL, getEmail()) .appendQueryParameter(MMSDKConstants.URI_QUERY_PARAM_KEY_PARTNER_ID, partnerId); HttpPost httpPost = newHttpPostInstance(); new MMPostAsyncTask(mmCallback).execute(httpPost); } }