Подтвердить что ты не робот

Как использовать Facebook Connect в iPhone webapp

Я пытаюсь использовать Facebook Connect с iPhone webapp, поэтому он будет похож на то, как он выглядит в родном приложении для iPhone, которое использует iPhone Connect iPhone для iPhone.

iPhone SDK получает приятную страницу входа, посещая:

http://www.facebook.com/login.php?fbconnect=1&connect_display=touch&api_key=<key>&next=fbconnect://success

(см. http://github.com/facebook/facebook-iphone-sdk/blob/master/src/FBLoginDialog.m)

Так как я не хочу, чтобы Safari открывался, единственный способ показать эту страницу - использовать iframe.

Тогда возникает проблема обнаружения успеха и сбоя.

SDK может сделать это, просто используя метод делегата webView:shouldStartLoadWithRequest: и проверив для fbconnect://success и fbconnect://cancel.

Насколько я знаю, родительская страница не может контролировать URL-адрес iframe.

Я мог бы открыть соединение Comet с сервером с родительской страницы и перенаправить Facebook на мой сервер, который затем будет уведомлять родительскую страницу об успешном завершении. Но мне не нравится идея вторжения серверного компонента в мой webapp только из-за этого.

Есть ли у кого-нибудь умные идеи?

Изменить: речь идет о веб-приложении, а не о родном приложении.

4b9b3361

Ответ 1

ОК, так что просто небольшой тест, но я пробовал это:

var iframe = $("<iframe src='http://google.com'></iframe");
$("body").append(iframe);
$("body").find("iframe:last").attr("src"); // => http://google.com

И это, казалось, работало нормально. У меня была такая же проблема, поэтому сегодня я собираюсь попробовать это же решение в своем приложении. Я не хочу делать интервал, который постоянно проверяет SRC, поэтому я посмотрю, могу ли я инициировать событие при изменении этого SRC.

Также альтернативой работе с кометами является WebSockets. Хорошая, простая в обслуживании услуга PusherApp (которую я все равно использую в своем приложении), поэтому, если я не могу понять, как чтобы инициировать событие после изменения атрибута SRC iframe, я, вероятно, просто отправлю клиенту "auth_succeeded" событие и обработаю его таким образом.

Спасибо за идею iframe. Мне было интересно, как я буду поддерживать FB Connect в iPhone Webapp, не создавая окна Safari и не вынимая их из моего приложения.

Ответ 2

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 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.

Ответ 3

Похоже, что вы сможете выполнить это через OAuth 2.0. Документация в Facebook довольно тонкая - там приятно обсуждать ее на http://www.raywenderlich.com/1488/how-to-use-facebooks-new-graph-api-from-your-iphone-app

Это сообщение в блоге об использовании OAuth и новом графическом API в приложении для iPhone, но я нашел, что обсуждение OAuth лучше, чем где-либо еще. Вы можете использовать URL-адреса и поток, которые он обсуждает в своем веб-приложении, чтобы выполнить одно и то же.

Ответ 4

Я сделал мобильное веб-приложение на iOS и Android со всеми подключениями к Facebook. Конечно, все было размещено на сервере и не было развернуто на устройстве iOS в качестве веб-приложения.

Основная идея заключалась в следующем: используйте FB Javascript SDK для загрузки диалогового окна для входа/выхода из системы, обработайте результат на сервере по мере того, как "вошел в систему" ​​(отображать что-то) или "не регистрировался", отображая сообщение об ошибке или не зарегистрированный контент.

В ссылке iFrames, которую я также сделал для приложений FB, но на холсте не в Web mobiel, вы ссылаетесь на URL-адрес входа в систему как "_top" и входящий, вы перенаправляете обратно в iFrame (дайте ему имя) с различными данными signed_request. Так что да, там есть серверные скрипты для обработки зарегистрированного состояния/выхода из системы (если это то, о чем вы говорили выше).

Ответ 6

Использование Sharekit - хороший вариант, пока вы просто не захотите покинуть проблему. Поскольку он предоставляет готовые классы для вас. Просто методов вызова было бы достаточно даже для других сайтов социальных сетей, а также для Twitter. Кроме того, вы можете добавить свои собственные методы в соответствии с вашими потребностями.

Ответ 7

Вы можете использовать каждый API социальных сетей индивидуально, или вы можете использовать ShareKit