2009-12-31 13 views
22

iPhone에서 Facebook Connect webapp을 사용하려고하므로 Facebook Connect iPhone SDK를 사용하는 기본 iPhone 응용 프로그램에서 보이는 모양과 비슷하게 보입니다. 나는 사파리 열려하지 않기 때문에iPhone 웹 응용 프로그램에서 Facebook Connect 사용 방법

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 참조)

아이폰 SDK 방문하여 멋진 로그인 페이지를 가져옵니다 iframe을 사용하여

그런 다음 성공과 실패를 감지하는 문제가 있습니다.

SDK는 webView:shouldStartLoadWithRequest: 대리자 메서드를 사용하고 fbconnect://successfbconnect://cancel을 확인하기 만하면됩니다.

내가 아는 한 상위 페이지는 iframe의 URL을 모니터링 할 수 없습니다.

부모 페이지에서 서버에 대한 Comet 연결을 열 수 있고 Facebook이 내 서버로 리디렉션 할 수 있습니다. 그러면 내 서버가 성공할 때 부모 페이지에 알립니다. 그러나 나는 이것 때문에 웹 컴포넌트에 서버 컴포넌트를 도입하는 아이디어를 좋아하지 않는다.

누구도 영리한 아이디어가 있습니까?

편집 : 이것은 기본 앱이 아닌 웹 앱에 관한 것입니다.

+0

이 문제에 대한 해결책을 찾았나요 시도? OpenID에서 동일한 문제가 발생했는지 확인하고 싶습니다. 고마워! – Cimm

+0

나는이 정확하게 똑같은 문제를 게시하려하고 있었다. 나는 그것을 iframe에 넣는 것을 생각하지 않았습니다 - 그것은 좋은 생각입니다. – steve

답변

0

OAuth 2.0을 통해이 작업을 수행 할 수있는 것처럼 들릴 수도 있습니다. 페이스 북의 문서는 매우 얇습니다. 여기에 대한 좋은 토론이 있습니다. http://www.raywenderlich.com/1488/how-to-use-facebooks-new-graph-api-from-your-iphone-app

블로그 게시물은 OAuth와 새로운 Graph API를 iPhone 앱에서 사용하는 것에 관한 것이지만 OAuth 토론은 다른 어느 곳보다 더 뛰어나다는 것을 알았습니다. 당신은 동일한 것을 달성하기 위해 웹 애플리케이션 내에서 그가 논의하는 URL과 흐름을 사용할 수있을 것입니다.

1

OK 그래서 그냥 작은 테스트,하지만 난이 밖으로 시도 :

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

그리고 확인을 작동하는 것 같았다. 나는 똑같은 문제가있어서 오늘 밤 내 앱에서이 똑같은 해결책을 시도 할 것이다. 나는 끊임없이 SRC를 검사하는 간격을 원하지 않기 때문에 SRC의 변경에 대한 이벤트를 트리거 할 수 있는지를 알 수 있습니다.

또한 Comet을 다루는 대안은 WebSockets입니다. 서비스를 다루기 쉽고, 어쨌든 이미 내 응용 프로그램에서 사용하고있는 PusherApp입니다. iframe SRC 속성이 변경되면 이벤트를 트리거하는 방법을 알 수 없으면 " auth_succeeded "이벤트를 클라이언트에 보내고 그런 식으로 처리합니다.

iframe 아이디어를 제공해 주셔서 감사합니다. Safari 창을 생성하고 앱에서 꺼내지 않고 iPhone Webapp에서 FB Connect를 어떻게 지원할 지 궁금합니다.

+0

iframe의 src가 변경되지 않습니다. –

-1

Sharekit을 사용하면 문제를 해결하기 전까지 좋은 옵션입니다. 준비가되어있는 수업을 제공합니다. 간단히 말해서 메소드를 호출하면 트위터처럼 다른 소셜 네트워킹 사이트에도 충분합니다. 또한 필요에 따라 사용자 정의 방법을 추가 할 수 있습니다.

-1

개별적으로 각 소셜 네트워크 API를 사용할 수 있습니다, 또는 당신은 내가 모든 페이스 북의 연결로, iOS 및 안드로이드, 모바일 웹 응용 프로그램을 수행 한 ShareKit

0

사용할 수 있습니다. 허락하면, 그것은 모두 서버에서 호스팅되었고 iOS 장치에 웹 앱으로 배포되지 않았습니다.

기본 아이디어는 FB Javascript SDK를 사용하여 로그인/로그 아웃 대화 상자를로드하고 서버에 "로그인 한 상태"(표시)로 결과를 처리하고 "로그인하지 않았습니다"오류 메시지를 표시합니다. 또는 로그인하지 않은 콘텐츠.

참고로 iFrames는 FB 앱용으로했지만 캔버스에서는 Web mobiel이 아니며 로그인 URL에 '_top'으로 연결하고 수신하면 iFrame으로 다시 리디렉션합니다 (제공 이름)을 다양한 signed_request 데이터와 비교합니다. 그래서 네, 로그인/로그 아웃 상태를 처리 할 수있는 서버 스크립팅이 있습니다 (위에서 언급 한 경우).

1
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. 
관련 문제