public static JSONObject toJSONObjectForWeb( final ShareOpenGraphContent shareOpenGraphContent) throws JSONException { ShareOpenGraphAction action = shareOpenGraphContent.getAction(); return OpenGraphJSONUtility.toJSONObject( action, new OpenGraphJSONUtility.PhotoJSONProcessor() { @Override public JSONObject toJSONObject(SharePhoto photo) { Uri photoUri = photo.getImageUrl(); JSONObject photoJSONObject = new JSONObject(); try { photoJSONObject.put( NativeProtocol.IMAGE_URL_KEY, photoUri.toString()); } catch (JSONException e) { throw new FacebookException("Unable to attach images", e); } return photoJSONObject; } }); }
private void startShareOnFacebook(final @NonNull Project project) { if (!ShareDialog.canShow(ShareLinkContent.class)) { return; } final Photo photo = project.photo(); final ShareOpenGraphObject object = new ShareOpenGraphObject.Builder() .putString("og:type", "kickstarter:project") .putString("og:title", project.name()) .putString("og:description", project.blurb()) .putString("og:image", photo == null ? null : photo.small()) .putString("og:url", project.webProjectUrl()) .build(); final ShareOpenGraphAction action = new ShareOpenGraphAction.Builder() .setActionType("kickstarter:back") .putObject("project", object) .build(); final ShareOpenGraphContent content = new ShareOpenGraphContent.Builder() .setPreviewPropertyName("project") .setAction(action) .build(); this.shareDialog.show(content); }
/** * Converts an action to a JSONObject. * * NOTE: All images are removed from the JSON representation and must be added to the builder * separately. * * @param action {@link com.facebook.share.model.ShareOpenGraphAction} to be converted. * @return {@link org.json.JSONObject} representing the action. * @throws JSONException */ public static JSONObject toJSONObject( final ShareOpenGraphAction action, final PhotoJSONProcessor photoJSONProcessor) throws JSONException { final JSONObject result = new JSONObject(); final Set<String> keys = action.keySet(); for (String key : keys) { result.put(key, toJSONValue(action.get(key), photoJSONProcessor)); } return result; }
private static void validateOpenGraphAction( ShareOpenGraphAction openGraphAction, Validator validator) { if (openGraphAction == null) { throw new FacebookException("Must specify a non-null ShareOpenGraphAction"); } if (Utility.isNullOrEmpty(openGraphAction.getActionType())) { throw new FacebookException("ShareOpenGraphAction must have a non-empty actionType"); } validator.validate((ShareOpenGraphValueContainer) openGraphAction, false); }
private ShareContent getFacebookShareContent(@NonNull PlaceCheckin theCheckin, @NonNull Place place, String applink) { ShareOpenGraphObject.Builder objectBuilder = new ShareOpenGraphObject.Builder() .putString("og:type", "fitness.course") .putString("og:url", applink) .putString("og:title", getContext().getString(R.string.share_title, place.getName())); if (place.getDescription() != null) { objectBuilder.putString("og:description", place.getDescription()); } if (place.hasLocation()) { objectBuilder.putDouble("fitness:metrics:location:latitude", place.getLocation().getLatitude()); objectBuilder.putDouble("fitness:metrics:location:longitude", place.getLocation().getLongitude()); } // Create an action ShareOpenGraphAction.Builder actionBuilder = new ShareOpenGraphAction.Builder() .setActionType("fitness.walks") .putObject("fitness:course", objectBuilder.build()); if (theCheckin.getImageUrl(SHARE_IMAGE_WIDTH) != null) { SharePhoto photo = new SharePhoto.Builder() .setImageUrl(Uri.parse(theCheckin.getImageUrl(SHARE_IMAGE_WIDTH))) .setUserGenerated(true) .build(); ArrayList<SharePhoto> photoArray = new ArrayList<>(); photoArray.add(photo); actionBuilder.putPhotoArrayList("image", photoArray); } return new ShareOpenGraphContent.Builder() .setPreviewPropertyName("fitness:course") .setAction(actionBuilder.build()) .build(); }
public static Bundle create( UUID callId, ShareContent shareContent, boolean shouldFailOnDataError) { Validate.notNull(shareContent, "shareContent"); Validate.notNull(callId, "callId"); Bundle nativeParams = null; if (shareContent instanceof ShareLinkContent) { final ShareLinkContent linkContent = (ShareLinkContent) shareContent; nativeParams = create(linkContent, shouldFailOnDataError); } else if (shareContent instanceof SharePhotoContent) { final SharePhotoContent photoContent = (SharePhotoContent) shareContent; List<String> photoUrls = ShareInternalUtility.getPhotoUrls( photoContent, callId); nativeParams = create(photoContent, photoUrls, shouldFailOnDataError); } else if (shareContent instanceof ShareVideoContent) { final ShareVideoContent videoContent = (ShareVideoContent) shareContent; nativeParams = create(videoContent, shouldFailOnDataError); } else if (shareContent instanceof ShareOpenGraphContent) { final ShareOpenGraphContent openGraphContent = (ShareOpenGraphContent) shareContent; final ShareOpenGraphAction action = openGraphContent.getAction(); try { JSONObject openGraphActionJSON = ShareInternalUtility.toJSONObjectForCall( callId, action); openGraphActionJSON = ShareInternalUtility.removeNamespacesFromOGJsonObject( openGraphActionJSON, false); nativeParams = create(openGraphContent, openGraphActionJSON, shouldFailOnDataError); } catch (final JSONException e) { throw new FacebookException( "Unable to create a JSON Object from the provided ShareOpenGraphContent: " + e.getMessage()); } } return nativeParams; }
public static JSONObject toJSONObjectForCall( final UUID callId, final ShareOpenGraphAction action) throws JSONException { final ArrayList<NativeAppCallAttachmentStore.Attachment> attachments = new ArrayList<>(); JSONObject actionJSON = OpenGraphJSONUtility.toJSONObject( action, new OpenGraphJSONUtility.PhotoJSONProcessor() { @Override public JSONObject toJSONObject(SharePhoto photo) { NativeAppCallAttachmentStore.Attachment attachment = getAttachment( callId, photo); if (attachment == null) { return null; } attachments.add(attachment); JSONObject photoJSONObject = new JSONObject(); try { photoJSONObject.put( NativeProtocol.IMAGE_URL_KEY, attachment.getAttachmentUrl()); if (photo.getUserGenerated()) { photoJSONObject.put(NativeProtocol.IMAGE_USER_GENERATED_KEY, true); } } catch (JSONException e) { throw new FacebookException("Unable to attach images", e); } return photoJSONObject; } }); NativeAppCallAttachmentStore.addAttachments(attachments); return actionJSON; }
public static Bundle create( UUID callId, ShareContent shareContent, boolean shouldFailOnDataError) { Validate.notNull(shareContent, "shareContent"); Validate.notNull(callId, "callId"); Bundle nativeParams = null; if (shareContent instanceof ShareLinkContent) { final ShareLinkContent linkContent = (ShareLinkContent)shareContent; nativeParams = create(linkContent, shouldFailOnDataError); } else if (shareContent instanceof SharePhotoContent) { final SharePhotoContent photoContent = (SharePhotoContent)shareContent; List<String> photoUrls = ShareInternalUtility.getPhotoUrls( photoContent, callId); nativeParams = create(photoContent, photoUrls, shouldFailOnDataError); } else if (shareContent instanceof ShareVideoContent) { final ShareVideoContent videoContent = (ShareVideoContent)shareContent; nativeParams = create(videoContent, shouldFailOnDataError); } else if (shareContent instanceof ShareOpenGraphContent) { final ShareOpenGraphContent openGraphContent = (ShareOpenGraphContent) shareContent; final ShareOpenGraphAction action = openGraphContent.getAction(); try { JSONObject openGraphActionJSON = ShareInternalUtility.toJSONObjectForCall( callId, action); nativeParams = create(openGraphContent, openGraphActionJSON, shouldFailOnDataError); } catch (final JSONException e) { throw new FacebookException( "Unable to create a JSON Object from the provided ShareOpenGraphContent: " + e.getMessage()); } } return nativeParams; }
public void validate(final ShareOpenGraphAction openGraphAction) { validateOpenGraphAction(openGraphAction, this); }
public static JSONObject toJSONObjectForCall( final UUID callId, final ShareOpenGraphContent content) throws JSONException { final ShareOpenGraphAction action = content.getAction(); final ArrayList<NativeAppCallAttachmentStore.Attachment> attachments = new ArrayList<>(); JSONObject actionJSON = OpenGraphJSONUtility.toJSONObject( action, new OpenGraphJSONUtility.PhotoJSONProcessor() { @Override public JSONObject toJSONObject(SharePhoto photo) { NativeAppCallAttachmentStore.Attachment attachment = getAttachment( callId, photo); if (attachment == null) { return null; } attachments.add(attachment); JSONObject photoJSONObject = new JSONObject(); try { photoJSONObject.put( NativeProtocol.IMAGE_URL_KEY, attachment.getAttachmentUrl()); if (photo.getUserGenerated()) { photoJSONObject.put(NativeProtocol.IMAGE_USER_GENERATED_KEY, true); } } catch (JSONException e) { throw new FacebookException("Unable to attach images", e); } return photoJSONObject; } }); NativeAppCallAttachmentStore.addAttachments(attachments); // People and place tags must be moved from the share content to the open graph action if (content.getPlaceId() != null) { String placeTag = actionJSON.optString("place"); // Only if the place tag is already empty or null replace with the id from the // share content if (Utility.isNullOrEmpty(placeTag)) { actionJSON.put("place", content.getPlaceId()); } } if (content.getPeopleIds() != null) { JSONArray peopleTags = actionJSON.optJSONArray("tags"); Set<String> peopleIdSet = peopleTags == null ? new HashSet<String>() : Utility.jsonArrayToSet(peopleTags); for (String peopleId : content.getPeopleIds()) { peopleIdSet.add(peopleId); } actionJSON.put("tags", new ArrayList<>(peopleIdSet)); } return actionJSON; }