Facebook 3.1 SDK を iOS 4.3 以降で動作させ、アプリケーションが認証から戻った後にダイアログを表示しようとしていますが、古いバージョンの Facebook SDK で動作していたダイアログの認証と表示に問題があります。
私は Facebook のドキュメントを読みましたが、あまり明確でないものもあれば、減価償却されているものもあれば機能しないものもあります。正しい方向への助けをいただければ幸いです。
ありがとう
質問する
701 次
2 に答える
2
最新の SDK を使用している場合は、次のコードを試していただけますか。
[FBSession openActiveSessionWithReadPermissions:[NSArray arrayWithObjects:@"read_stream", nil] allowLoginUI:YES
completionHandler:^(FBSession *session,
FBSessionState status,
NSError *error) {
if (session.isOpen) {
UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Success!" message:@"You logged in" delegate:nil cancelButtonTitle:nil otherButtonTitles:@"Ok", nil];
[alertView show];
}
else if(status == FBSessionStateClosedLoginFailed) {
UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Oops!" message:@"Loggin failed" delegate:nil cancelButtonTitle:nil otherButtonTitles:@"Ok", nil];
[alertView show];
}
}];
于 2012-11-28T07:10:24.727 に答える
1
1. システムに最新の facebook SDK をインストールし、アプリに SDK フレームワークをインストールします。
2. アプリの delegate.m に次のコードを追加します。
- (BOOL)application:(UIApplication *)application
openURL:(NSURL *)url
sourceApplication:(NSString *)sourceApplication
annotation:(id)annotation {
// attempt to extract a token from the url
return [FBSession.activeSession handleOpenURL:url];
}
- (void)sessionStateChanged:(FBSession *)session
state:(FBSessionState) state
error:(NSError *)error
{
switch (state) {
case FBSessionStateOpen:
if (!error) {
// We have a valid session
NSLog(@"User session found");
}
break;
case FBSessionStateClosed:
case FBSessionStateClosedLoginFailed:
[FBSession.activeSession closeAndClearTokenInformation];
break;
default:
break;
}
if (error) {
UIAlertView *alertView = [[UIAlertView alloc]
initWithTitle:@"Error"
message:error.localizedDescription
delegate:nil
cancelButtonTitle:@"OK"
otherButtonTitles:nil];
[alertView show];
}
}
/*
* Opens a Facebook session and optionally shows the login UX.
*/
- (BOOL)openSessionWithAllowLoginUI:(BOOL)allowLoginUI {
NSArray *permissions = [[NSArray alloc] initWithObjects:
@"email",
@"user_likes",
nil];
return [FBSession openActiveSessionWithReadPermissions:permissions
allowLoginUI:allowLoginUI
completionHandler:^(FBSession *session,
FBSessionState state,
NSError *error) {
[self sessionStateChanged:session
state:state
error:error];
}];
}
- (void)openSession
{
[FBSession openActiveSessionWithReadPermissions:nil
allowLoginUI:YES
completionHandler:
^(FBSession *session,
FBSessionState state, NSError *error) {
[self sessionStateChanged:session state:state error:error];
}];
}
3. アプリの delegate.h に次のコードを追加します。
- (BOOL)openSessionWithAllowLoginUI:(BOOL)allowLoginUI;
4.必要なときにこのデリゲートを最後に呼び出します
navAppDelegate* appDelegate = [UIApplication sharedApplication].delegate;
[appDelegate openSessionWithAllowLoginUI:YES];
于 2012-11-28T07:06:17.040 に答える