apps - Cómo usar Facebook Connect en una aplicación web para iPhone
progressive web apps (7)
Bien, solo una pequeña prueba, pero probé esto:
var iframe = $("<iframe src=''http://google.com''></iframe");
$("body").append(iframe);
$("body").find("iframe:last").attr("src"); // => http://google.com
Y parecía funcionar bien. Tuve este mismo problema, así que voy a probar esta misma solución esta noche en mi aplicación. No quiero hacer un intervalo que compruebe constantemente el SRC, así que veré si puedo activar un evento al cambiar ese SRC.
También una alternativa para tratar con Comet es WebSockets. Un servicio agradable y fácil de tratar es PusherApp (que de todos modos ya estoy usando en mi aplicación), así que si no puedo descubrir cómo desencadenar un evento una vez que cambie el atributo iframe SRC, probablemente solo presione " auth_succeeded "evento al cliente y manejarlo de esa manera.
Gracias por la idea de iframe. Me preguntaba cómo sería compatible con FB Connect en una aplicación web de iPhone sin crear una ventana de Safari y sacarlas de mi aplicación.
Estoy tratando de usar Facebook Connect desde una aplicación web de iPhone, por lo que se vería similar a como se ve en una aplicación nativa de iPhone que usa el iPhone SDK de Facebook Connect.
El iPhone SDK obtiene la página de inicio de sesión agradable visitando:
http://www.facebook.com/login.php?fbconnect=1&connect_display=touch&api_key=<key>&next=fbconnect://success
(consulte http://github.com/facebook/facebook-iphone-sdk/blob/master/src/FBLoginDialog.m )
Como no quiero que Safari se abra, la única forma que veo para mostrar esta página es mediante un iframe.
Luego está el problema de detectar el éxito y el fracaso.
El SDK puede hacer esto simplemente usando la vista webView:shouldStartLoadWithRequest:
método delegado y comprobando fbconnect://success
y fbconnect://cancel
.
Por lo que sé, la página principal no puede monitorear la URL del iframe.
Podría abrir una conexión Comet a un servidor desde la página principal y redirigir Facebook a mi servidor, lo que luego notificaría a la página principal en caso de éxito. Pero no me gusta la idea de introducir un componente de servidor en mi aplicación web solo por esto.
¿Alguien tiene alguna idea inteligente?
Edición: se trata de una aplicación web , no de una aplicación nativa.
He realizado una aplicación web móvil, en iOS y Android, con toda la conectividad de Facebook. Por supuesto, todo estaba alojado en el servidor y no se implementó en el dispositivo iOS como una aplicación web.
La idea básica era: utilizar el SDK de Javascript de FB para cargar el cuadro de diálogo para iniciar sesión / cerrar sesión, manejar el resultado en el servidor como "está conectado" (mostrar algo) vs. "no está registrado" muestra un mensaje de error o no está registrado en el contenido.
En referencia a los iFrames, que también he hecho para las aplicaciones de FB, pero en el lienzo que no se encuentra en Web mobiel, te vinculas a la url de inicio de sesión como "_top", y entrante, redireccionas de nuevo al iFrame (dale un nombre) con varios datos de petición firmada. Así que sí, hay scripts de servidor allí para manejar el estado de inicio / cierre de sesión (si es a eso a lo que te refieres anteriormente).
Parece que podrías lograr esto a través de OAuth 2.0. La documentación de Facebook es bastante delgada: hay una buena discusión al respecto en http://www.raywenderlich.com/1488/how-to-use-facebooks-new-graph-api-from-your-iphone-app
Esa publicación del blog trata sobre el uso de OAuth y la nueva API Graph en una aplicación de iPhone, pero me pareció que la discusión de OAuth es mejor que en cualquier otro lugar. Es posible que pueda utilizar las URL y el flujo que analiza en su aplicación web para lograr lo mismo.
Puedes usar cada API de las redes sociales individualmente o puedes usar ShareKit
Usar Sharekit es una buena opción hasta que solo quieras salir del problema. Como proporciona clases preparadas para usted. Simplemente llamar a métodos sería suficiente incluso para otros sitios de redes sociales, como Twitter. Además, puede agregar sus métodos personalizados según sus necesidades.
To use facebook from your app just download FBConnect and drag and drop all files of FBConnect to your project.Make sure copy the files in project option is checked.After adding files make your .h file in which you have to share something like this
#import <Foundation/Foundation.h>
#import "cocos2d.h"
#import "Facebook.h"
#import "FBConnect.h"
@interface GameOverPage :CCLayer<FBSessionDelegate,FBDialogDelegate,FBLoginDialogDelegate,FBRequestDelegate>
{
//for sharing
BOOL isFBLogged;
Facebook *facebook;
}
after this add following delegate methods to .m file.To use facebook just call [self facebookLogin];
- (void) facebookLogin
{
// App ID
// ****************
//
// App secret
// *****************************
if (facebook == nil) {
facebook = [[Facebook alloc] initWithAppId:@"**********************"];
NSLog(@"reached in if facebook nill");
}
NSArray* permissions = [[NSArray arrayWithObjects:
@"publish_stream", @"offline_access", nil] retain];
[facebook authorize:permissions delegate:self];
// If you want to add Logout capability:
if (isFBLogged) {
NSLog(@"in isFBLogggged");
[facebook logout:self];
}
// } else { // then the code above inside the else
}
-(void) postdata
{
UIImage *facebookimage=[self takeScreenShot];
NSMutableDictionary* params = [NSMutableDictionary dictionaryWithObjectsAndKeys:
facebookimage,@"message",
nil];
[facebook requestWithGraphPath:@"me/photos" // use page ID instead of ''me''
andParams:params
andHttpMethod:@"POST"
andDelegate:self];
NSLog(@"Uploading screenshot. Please wait...");
}
- (void)fbDidLogin {
NSLog(@"in fbDidLogin");
isFBLogged = YES;
[self postdata];
}
-(void)fbDidNotLogin:(BOOL)cancelled {
if (cancelled) {
NSLog(@"LOGIN CANCELLED");
} else {
NSLog(@"login error");
}
//self.visible = YES;
}
- (void)fbDidLogout {
NSLog(@"in fbDidLogOut");
isFBLogged = NO;
//-facebookLoginButton.visible = YES;
//-facebookLogoutButton.visible = NO;
}
#pragma mark -
#pragma mark FBRequestDelegate
/**
* Called when the Facebook API request has returned a response. This callback
* gives you access to the raw response. It''s called before
* (void)request:(FBRequest *)request didLoad:(id)result,
* which is passed the parsed response object.
*/
- (void)request:(FBRequest *)request didReceiveResponse:(NSURLResponse *)response {
}
/**
* Called when a request returns and its response has been parsed into
* an object. The resulting object may be a dictionary, an array, a string,
* or a number, depending on the format of the API response. If you need access
* to the raw response, use:
*
* (void)request:(FBRequest *)request
* didReceiveResponse:(NSURLResponse *)response
*/
- (void)request:(FBRequest *)request didLoad:(id)result {
NSLog(@"posted");
};
/**
* Called when an error prevents the Facebook API request from completing
* successfully.
*/
- (void)request:(FBRequest *)request didFailWithError:(NSError *)error {
NSLog(@"an error occured");
};
#pragma mark -
#pragma mark FBDialogDelegate
/**
* Called when a UIServer Dialog successfully return.
*/
- (void)dialogDidComplete:(FBDialog *)dialog {
NSLog(@"publish successfully");
}
you can override all delegate methods according to your requirement or leave the same way they are.This will work fine.You should have appid of facebook which you will get after registration on Facebook.