Windows Phone 8 facebook login (Beta) - facebook

I've been going through the instructions here trying to implement the FB login via the FB Beta application: http://facebooksdk.net/docs/phone/sso/
I had it working for a while, however ever since the last Beta update, something started failing.
Whenever i get a callback to MapUri from the FB application, i don't get the proper Uri being passed in. The following code always fails (the uri contains mundane URIs of pages within the application, not what i expected).
AppAuthenticationHelper.IsFacebookLoginResponse(uri)
I might have changes something on the web-configuration of the application, or on the WP8, however going over the settings, nothing seems to be working.
I checked the usual suspects (AppIds, ProductIds etc...) and it seems to be running properly, so that changing one of those IDs throws the error like i expect it to, however when i have setup everything properly, i get the facebook application to open my application, however the UriMapperBase when it get's called never has the proper Uri in it.
Here is the configuration for the WMAppManifest for the extension:
<Extensions>
<Protocol Name="msft-54045783c54e4c3a9f2b470c5b7ba353" NavUriFragment="encodedLaunchUri=%s" TaskID="_default" />
</Extensions>
Any ideas?
P.S. I am testing this on real devices with the latest FB Beta application.
UPDATE: Seems to only affect Samsung phones, no issues with HTC, haven't tried other ones.

Related

Facebook Send Dialog in iframe doesn't seem to work

I am having issues using the Facebook send dialog. If I open this window in a new browser, everything works:
https://www.facebook.com/dialog/send
?app_id=[My_App_Id]
&redirect_uri=https%3A%2F%2Fwww.example.com%2Fcallback
&link=https%3A%2F%2Fexample.com%2Fimage.jpg
So by doing that, I am able to send a message just fine. However, I need this to be in an iframe, which according to the send dialog documentation, this should work. So I then do this:
https://www.facebook.com/dialog/send
?app_id=[My_App_Id]
&display=iframe
&redirect_uri=https%3A%2F%2Fwww.example.com%2Fcallback
&link=https%3A%2F%2Fexample.com%2Fimage.jpg
Doing so, I get the following error:
API Error Code: 102
API Error Description: Session key invalid or no longer valid
Error Message: Iframe dialogs must be called with a session key
I find it a little strange that I can do this with a popup, but they require a session key for iframe. But even so, that isn't a problem. Because I have already gotten an access_token. So, this should work then:
https://www.facebook.com/dialog/send
?app_id=[My_App_Id]
&display=iframe
&redirect_uri=https%3A%2F%2Fwww.example.com%2Fcallback
&link=https%3A%2F%2Fexample.com%2Fimage.jpg
&access_token=[MY_OAUTH_ACCESS_TOKEN]
The access token was obtained from calling /v12.0/dialog/oauth, and I have confirmed that the access_token is valid:
However, I now get this message:
This Content Isn't Available Right Now
When this happens, it's usually because the owner only shared it with a small group of people, changed who can see it or it's been deleted.
So now this really makes no sense. I can send this link just fine if I use a popup with NO access_token present. But to set the display to iframe, I must include the token, which is fine, but it doesn't like the token for some reason?
It is also worth noting that this behaves the same way regardless if the Facebook app is in development mode or live mode. In development mode, all of the permissions should work for my test users. So it seems very unlikely that this is a permissions issue?
Anybody have any insight on this at all?

Facebook API returns empty response only from specific IP

Suddenly simple Facebook Graph API calls started to return an empty result. The node I'm calling is a simple search page by name:
`https://graph.facebook.com/search?type=page&fields=profile_picture,username,id,name,likes,category,talking_about_count&access_token=<APP_TOKEN>&limit=10&q=stackoverflow`
It just started to return an empty result set when called from my server:
{"data":[]}
When I'm calling it from my personal computer browser, it works just fine.
I don't see any notification in Facebook Manage Apps page. What can be the reason? Is there any way I can see any error in this Graph API result?
UPDATE: suddenly it started working again, after it was down for at least 2 hours. Is there any way I can make these calls through client side JS? Any way to avoid to exposure of my APP_TOKEN?
UPDATE2: It stopped working again, and although I haven't identified the reason, I did figure when replacing the with a , it does work. The documentation actually says to use an APP_TOKEN.

Facebook Canvas App Loading Partially

I have a single page FB Canvas app that is calling through the iframe a page I have hosted on Heroku.
Loading the page directly through my heroku link works no problem. However, when I try to load the page through the canvas app, it sometimes only loads half of the HTML. I need to spam refresh in order for the entire page to render correctly in the app.
I've checked my page against W3C validator and there are no syntax issues.
Is it Heroku just being slow? It loads pretty quickly when I access the url directly.
What could cause my page to just load halfway and stop?
I had this issue while using Heroku, but only for me and a colleague which were associated to the app as owner and tester respectively, other accounts could load the page just fine.
Testing the same app hosted via pagekite over a 24/3 ADSL works perfectly.
HTTPS or HTTP doesn't seem to matter. I'd say this is an Heroku issue.
EDIT: I'm not sure what happened, but the problem isn't there anymore. I can't think of anything that I did that fixed the issue, but I did many things both before and after the problem went away, such as cacheing remote data in the DB, and whatnot. I can't be certain anything of that helped or if it's some hidden issue in the Heroku infrastructure.
I contacted Heroku about the issue, by the time they came back to me, the issue had suddenly disappeared.
I have promised to get back with logs (both application and client HTTP/TCP logs), if you have this issue and can reproduce it, capture the logs and send it to Heroku support. Capturing TCP traffic can be done with wireshark and the Heroku application logs are available via heroku logs.
I had this issue, too. I think it is related to the issue in this question: iFrame showing up Blank in Facebook Canvas App
If it is a Python app using Flask try this code:
from werkzeug.wsgi import LimitedStream
class StreamConsumingMiddleware(object):
def __init__(self, app):
self.app = app
def __call__(self, environ, start_response):
stream = LimitedStream(environ['wsgi.input'],
int(environ['CONTENT_LENGTH'] or 0))
environ['wsgi.input'] = stream
app_iter = self.app(environ, start_response)
try:
stream.exhaust()
for event in app_iter:
yield event
finally:
if hasattr(app_iter, 'close'):
app_iter.close()
Active it with this line:
app.wsgi_app = StreamConsumingMiddleware(app.wsgi_app)
Source: http://flask.pocoo.org/snippets/47/

FB.getLoginStatus not calling its callback

The title really says it all. Under some (undetermined) conditions FB.getLoginStatus() just stops working and won't invoke the callback I gave it. The only interesting clues I've found are
FB.Auth._loadState is stuck on "loading" -- whatever is supposed to make it click over to "loaded" isn't happening
slight delays like putting in alert() calls tend to make it start working
Any hints at all about even how to investigate this welcome.
This usually happens for me when I am running the page under a different domain from what has been registered in Facebook. Typically this is when I am developing locally.
If you are running locally, you'll have to set up a local web server and then modify your hosts file to point the the registered domain to 127.0.0.1 in order to test on your local machine. Don forget to remove that line from the hosts file when you want to test it on the server.
According to:
https://developers.facebook.com/bugs/240058389381072
You cannot put your application under sandbox mode, or else it won't work. Go into your app settings, advanced, and switch it. This stumped me for a couple hours until I happened upon the bug report.
I had similar problem with FB API. It turned out, that my Facebook App was misconfigured. Please make sure that this is not the case for you. My problem was that my "Site URL" param in FB application was pointing to https, but I was using http protocol for development. Any call against FB api after FB.init was not calling my callback functions. So the first thing to do should be to double check App config.
Now, if some reason you depend on FB api but you wish to have a fallback option in case it;s inoperative - workaround with timer should be ok for you. Just set up a timer and disable it if FB Api gives you proper response. If not - fallback to some custom function which will perform some additional logic.
function callFbApi() {
var timeoutHandler = setTimeout(function() { requestFailed(); }, 1000);
function requestFailed() {
// When this happens, it means that FB API was unresponsive
doSomeFallbackWork();
alert('hey, FB API does not work!');
}
FB.getLoginStatus(function(response) {
clearTimeout(timeoutHandler); // This will clear the timeout in case of proper FB call
doSomeUsualWorkAfterFbReplies();
return false;
}, true);
}
If your application is in sandbox mode, Facebook acts as if your application is invisible to anyone who is not listed as an application developer. If you're not logged in, then it would stand to reason that your app is now invisible.
The callback will only fire if you're initializing with a visible application. Otherwise the following response is returned:
<span>Application Error: There was a problem getting data for the application you requested. The application may not be valid, or there may be a temporary glitch. Please try again later. </span>
For more info please see my comment on this bug ticket:
https://developers.facebook.com/bugs/240058389381072
Maybe you are using the asynchronous call. The same thing happened when I called FB.init with window.fbAsyncInit. All I did was delay the FB.getLoginStatus with a setTimeout function
window.setTimeout(checkLogStatus, 1000);
function checkLogStatus(){
alert("check");
// fetch the status on load
FB.getLoginStatus(handleSessionResponse);
}
It seemed to work after that
On the new version of the Developer app, you have to make sure to have put the correct URL you are using to access the application in the Website field under the
Select how your app integrates with Facebook
section.
Make sure the protocol is HTTPS and not HTTP.
I had a similar problem. The site worked every time when I was opening the browser, but fails when I tried to reload.
The cause was the missing "www" on the site name on Facebook configurations. Note that putting "www" (like www.yoursite.com) works on both situations (yoursite.com or www.yoursite.com).
As others have posted, you must be accessing your site at the same URL that facebook expects. For example if facebook has a callback "example.com" but you're browser has "www.example.com", that can cause this problem.
In addition, if third-party cookies are not allowed by your browser, you may also see this problem. Or you may see the callback erroneously reporting the user is not connected.
Just posting a situation I had were calling FB.getLoginStatus got absolutely no response.
My application is designed to run in a tab, and I only entered the Page Tab URLs on the app admin page, and not the App On Facebook (i.e. Canvas) URLs. The tab loads perfectly, but any calls to the FB JS SDK provoke no response.
In Facebook App Settings, go to Client OAuth Settings, look at Valid OAuth redirect URIs
Make sure you have listed all URIs which are the domains from which Facebook SDK is being invoked. For example:
I develop at localhost:5000 and deploy to Heroku. Notice the format: http://domain.name/

Facebook old API Video upload

Our application uploads video to facebook (using the REST API video.upload method). Everything was working fine, but nearly 10 hours ago we started to receive the error "This method must run on api-video.facebook.com". We're already running it on api-video.facebook.com! The url is http://api-video.facebook.com/restserver.php?method=video.upload, it's hardcoded in the application, and never changed. What's happening? How can this be fixed?
Since Facebook doesn't seem to want to document this:
the call is to https://api-video.facebook.com/restserver.php
params:
access_token=...
method=video.upload
The rest of the params work as before.