I would like to make frequently changes for the contact's image on the iPhone.
This app: Photo Phonebook, did it with facebook profile pictures.
In the app, there are automatics updates of contact's image:
Next time a Facebook friend calls, their Facebook photo appears on your iPhone. It also appears in the address book. When your friends change their profile photos on Facebook, they change on your iPhone as well.
Because there's no background processing for syncing contact images on the iPhone, I assume that they used some kind of a link or 'pointer' to the fb image.
Is it possible to put a link to image instead of the image itself? and every time the user access the same contact, the image is loaded from external link?
Checkout this post on Asynch Image View. I have used this code and it works well.
AsyncImageView derives from UIView and asynchronously fetches the image at the configured URL.
I think that it is really possible. Our application did the same. We store the link to the Facebook photo. Whenever, user need to view the photo, we downloaded it. You can use asynchronous method like Cannoade's suggestion or just write some few multithreaded code yourself to do asynchronous. That's easy.
Another suggestion is that you should cache your image and when you need to get the new photo, check your image's link to see if the avatar has been changed. Facebook changes the user's avatar link whenever user changes the avatar so if you check the link, you can know if the cache is out of date not.
Related
I'm stuck with this problem for several weeks now and will try to give a short and detailed explanation below:
Situation
Users visiting the websites and has the option to generate an image with the GD-library. So every users generated a personal image. Simple... until now. After generating the image, the user gets the option to share this image to Facebook. This is done via the OpenGraph protocol.
What's working (Yeah!)
Generating the image is working perfectly fine. Sharing something to Facebook is working also.
Problem
Although the following code is used on sharing the image (fbrefresh=CAN_BE_ANYTHING). FB stills pulls an old image. Sometimes this is a really old image, sometimes it's a more current generated image. But never the just generated image.
And now?
As said I've already tried the fbrefresh=CAN_BE_ANYTHING. Also in de debug tool the right image isn't showing up, but this is probably because the generated image has an unique ID generated from the users cookie. So this id is only usable when the users clicks on generate and after that shares the generated image.
Is there any example on the internet that uses the same sort of strategy and is working? I've searched half the internet and didn't found it yet it's becoming more and more frustrating.
After generating the image, the user gets the option to share this image to Facebook. This is done via the OpenGraph protocol.
What exactly do you mean by the latter? Are you just uploading that image to the user’s wall/one of their albums, or are you publishing an Open Graph object with a user-generated photo attached? (Btw., user-generated photo is meant literally for OG actions – you should only do it with photos that the user has taken using f.e. their mobile phone camera while they where undertaking the action. I doubt if a GDlib-generated image fits into that description.)
Although the following code is used on sharing the image (fbrefresh=CAN_BE_ANYTHING). FB stills pulls an old image.
And by “pull” you mean what exactly, again? Do you upload the photo as an HTTP POST upload, do you upload it by URL, did you specify it as og:image for an OG object, or do you pass it as user-generated photo while publishing an action?
Now, usually the easiest way for resources referenced by a URL to get properly refreshed by the requesting client, is to attach a different value to the query string/as a GET parameter – f.e. the current unix timestamp: …/image.php?1984372634 or …/image.php?foo=bar&forcerefresh=1984372634
Since this value changes every second, it makes each of those URLs a different URL, and the requesting client absolutely has no choice but to request that resource, because he can not have it in its cache already.
I'm designing a photo-oriented Facebook app that would let users tell stories in the app-specific way and advertise such stories by posting a single, preferably large, "cover" photo. Photo posting is done by the app and people that would like to see the story need an easy and obvious way of being redirected to the corresponding app-generated page. So hence is the question.
Is it possible for a Facebook app to post a maximally large (column-wide) photo on the user's behalf, so that when others (non-users included) click on the photo, it takes them to a specific page that is related to the app instead of zooming into the photo by default? If not, what would be the best workaround?
To get the maximum large photo on news feed, you should look into user generated photos, which requires two additional parameters you add to your open graph action to indicate that the user-generated photo should have maximum photo display on news feed and ticker.
Example OG POST:
https://graph.facebook.com/me/nyccookbook:cook?
recipe=http://www.yourdomain.com/pizza.html&
image[0][url]=http://www.yourdomain.com/images/my_camera_pizza_pic.jpg&
image[0][user_generated]=true&
access_token=YOUR_ACCESS_TOKEN
If the photo is not user-generated, then explicit sharing is an alternative to get maximum display size on news feed and ticker provided that you follow all the requirements and guidelines for explicit sharing.
when others (non-users included) click on the photo, it takes them to a specific page that is related to the app instead of zooming into the photo by default
This is not possible because FB users expect the behavior to zoom the photo in when clicking on it. If clicking on a photo launches an URL, it is a bad user experience because that is not what anyone expects when clicking on a photo on FB.
The best workaround I can think of is to edit the description of the image with a link to your specific page on your app, such that when a FB user sees the picture, they can click the link in the description to go where you want.
I've read the documentation here.
I have an action, "cook", which is applied to an object "recipe". I want to allow the user to post a photo of their cooking when they perform the action.
I would like to have the photo hosted on Facebook. Is there any way to post the actual image data as part of the request, rather than posting a URL to the user generated photo?
The docs say
The photo used will NOT be taken from the object's meta data og:image tag. Instead, it is passed with the POST
and
The photo will be uploaded and placed in a Facebook photo album titled after the "App Display Name" for that app
but they also mention that the image[0][url] property is required.
The context is an iOS app: the user takes a photo on the device and wishes to post it to Facebook. To get a URL to the image, I'd obviously have to do an upload to some web hosting somewhere as a separate step, which would be harder to code and would require some hosting.
but they also mention that the image[0][url] property is required.
You’ll have to upload the photo first to some place where it’s available over the web via HTTP, and then give that URL while posting your action.
So what I am trying to do is post an image that has been created by a user on an iphone into that users newsfeed.
The functionality I am having a hard time understanding if it is possible:
Can I pass a local NSURL (or URL?)(to a png file that lives in the documents folder) through a JSON string and onto Facebook?
i want to mimic the action of a user going to his/her facebook page, clicking into the textfield for their newsfeeld, uploading an image by clicking the "photos" icon and selecting an image from a local disk and uploading it. I would also like to add some text into the post optionally.
I'm just getting started with the Facebook api and it seems pretty tough right now, any help would be appreciated. code examples appreciated.
Thanks,
Nick
You'll need to use a third-party image host like YFrog or roll your own image host. Facebook requires that all media attachments (including photos) be hosted on the public web. Even though they cache the images themselves, the URL that you send to them has to have its own public URL. Many of the popular Twitter image hosts have simple REST APIs to achieve this.
You can also use Facebook itself to host the image via their photo.upload API, if you don't mind two side-effects: it will appear in the user's photo albums, and the thumbnail is likely to appear in the stream twice (once representing the addition to the photo album, and the second in the actual stream story you publish). You can't currently get around this doubling artifact, but it will give you a stable host for the uploaded image.
Just to clarify this. I was actually able to pass and image directly from the iPhone without a third party but that was posting an image to a users photo album. There are I think two methods in the fbconnect api for posting one contains an extra argument for a data argument which can be an image. I'll post more details when I'm in front of the documentation.
Is there any way to upload an image (UIImage) directly from an iPhone app to a user's wall/feed?
All the samples I see are either using a json-embedded link or they use the photos.upload call with album ID (aid) which results in the user getting the image in his photo album(s).
What I want to do is to upload an (UI)Image created (by the user) inside an iPhone app and upload to his/her wall. Is this possible? Sample code would be highly appreciated.
This isn't possible. To understand why, you have to consider the conceptual model that Facebook currently uses: Posts on a user's wall are just bits of text optionally attached to some link URL. That link URL can be some random image on the web, or it can just as well be an image that the user already has in their photo albums.
But a wall post cannot inherently "contain" an image in and of itself. Therefore you need to host the image somewhere, be it on your own site, or on Facebook itself, inside one of the user's albums by uploading it first to there.
I'm trying to figure out the same thing myself. One thing I did find out is that if you post the "Wall Photos" album they do get posted to the wall. However you only have a wall photos album if you've uploaded photos to your wall from your profile page before. And even then, you need to get the album aid and then post to it.
EDIT
Found a much better solution. First upload the photo to your default album, then make a post to the wall with the link to your photo that was returned when uploading (not a link to the image but the page the image is on).