code: static PendingIntent generatePendingIntentFromApptentivePushData(Conversation conversation, String apptentivePushData) {
  		ApptentiveLog.d(PUSH, "Generating Apptentive push PendingIntent.");
  		if (!TextUtils.isEmpty(apptentivePushData)) {
  			try {
  				JSONObject pushJson = new JSONObject(apptentivePushData);
  
  				// we need to check if current user is actually the receiver of this notification
  				final String conversationId = pushJson.optString(PUSH_CONVERSATION_ID, null);
  				if (conversationId != null) {
  					// is it an actual receiver?
  					if (!StringUtils.equal(conversation.getConversationId(), conversationId)) {
  						ApptentiveLog.i(PUSH, "Can't generate pending intent from Apptentive push data: push conversation id doesn't match active conversation");
  						return null;
  					}
  				}
  
  				ApptentiveInternal.PushAction action = ApptentiveInternal.PushAction.unknown;
  				if (pushJson.has(ApptentiveInternal.PUSH_ACTION)) {
  					action = ApptentiveInternal.PushAction.parse(pushJson.getString(ApptentiveInternal.PUSH_ACTION));
  				}
  				switch (action) {
  					case pmc: {
  						// Prefetch message when push for message center is received
  						MessageManager mgr = conversation.getMessageManager();
  						if (mgr != null) {
  							mgr.startMessagePreFetchTask();
  						}
  						// Construct a pending intent to launch message center
  						return ApptentiveInternal.prepareMessageCenterPendingIntent(ApptentiveInternal.getInstance().getApplicationContext(), conversation);
  					}
  					default:
  						ApptentiveLog.w(PUSH, "Unknown Apptentive push notification action: \"%s\"", action.name());
  				}
  			} catch (Exception e) {
  				ApptentiveLog.e(PUSH, e, "Error parsing JSON from push notification.");
  				logException(e);
  			}
  		}
  		return null;
  	}
docs: TODO: Decouple this from Conversation and Message Manager so it can be unit tested.