1

Xcode 4.3.1 を使用しています

私のアプリでは、Facebook SSO を使用しようとしています。私の要件は、アプリが最初に承認を要求し、その後、アプリがユーザーによって承認されているかどうかを確認し、次のプロセスに移動する必要があることです (タスクの後でさえ)デバイスはキャンセルされます。認証ウィンドウを何度も繰り返す必要はありません。

Appdelegate で:

facebook=[[Facebook alloc]initWithAppId:appid andDelegate:first];
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    NSLog(@"%@Defaults:",[defaults objectForKey:@"FBAccessTokenKey"]);
    if ([defaults objectForKey:@"FBAccessTokenKey"] 
        && [defaults objectForKey:@"FBExpirationDateKey"]) 
    {
       facebook.accessToken = [defaults objectForKey:@"FBAccessTokenKey"];
        accessToken=facebook.accessToken;
       facebook.expirationDate = [defaults objectForKey:@"FBExpirationDateKey"];
        date=facebook.expirationDate;
    }
In my view Controller:



    -(IBAction)LoginClick:(id)sender
{
    NSUserDefaults *defaults1 = [NSUserDefaults standardUserDefaults];
    [defaults1 setObject:xapp.facebook.accessToken forKey:@"FBAccessTokenKey"];
    [defaults1 setObject:xapp.facebook.expirationDate forKey:@"FBExpirationDateKey"];
    [defaults1 synchronize];
    if (![xapp.facebook isSessionValid]) 
    {
         permissions = [[NSArray alloc] initWithObjects:@"read_stream",@"publish_stream", nil];
        [xapp.facebook authorize:permissions];
    }
    else if([xapp.facebook isSessionValid])
    { 
        NSLog(@"Hiii");
        permissions=nil;
        [xapp.facebook authorize: nil];
    }
}

アプリが認証された後に認証ウィンドウが表示されないようにするにはどうすればよいですか...

4

1 に答える 1

1

AppDelegate でアプリを実行するたびにアクセス許可を求めています。これを防ぐには、ログインボタンが押された場合にのみ許可される許可の別のメソッドを作成し、アプリが許可されているかどうかを確認する必要があります。AppDelegate でこれを試してください:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    [self.window makeKeyAndVisible];

    facebook = [[Facebook alloc] initWithAppId:@"YOURAPPID" andDelegate:self];

    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];

    if ([defaults objectForKey:@"FBAccessTokenKey"] && [defaults objectForKey:@"FBExpirationDateKey"]) 
    {
        facebook.accessToken = [defaults objectForKey:@"FBAccessTokenKey"];
        facebook.expirationDate = [defaults objectForKey:@"FBExpirationDateKey"];
    }

    return YES;
}

AppDelegate の fbDidLogIn メソッドの上にこのメソッドを追加します。FBUser プロトコルを AppDelegate に追加する必要があります。

-(void)fbLogin:(id<FBUser>)_listener
{
    listener = _listener;
    if(![facebook isSessionValid])
    {
        NSArray* permissions = [[NSArray arrayWithObjects:
                                 @"publish_stream",
                                 @"read_stream",
                                 nil] retain];
        [facebook authorize:permissions];
    }
    else
    {
        [listener facebookDidLogin];
    }
}

ViewController でログイン方法を次のように変更します。

-(IBAction)LoginClick:(id)sender
{
    YourAppDelegate *appDelegate = (YourAppDelegate *)[[UIApplication sharedApplication] delegate];
    [appDelegate fbLogin:self];
}

FBUser.h は、プロトコル メソッド -(void)fbDidLogIn を定義するカスタム ヘッダー ファイルです。これは、アプリが起動するたびにログイン許可を求めないようにするためです。

#import <Foundation/Foundation.h>

@protocol FBUser <NSObject>

-(void)facebookDidLogin;

@end

これにより、アプリが Facebook にログインして何かを行う必要がある場合にのみ、ログイン メソッドが呼び出されます。これがお役に立てば幸いです。乾杯!

于 2012-07-20T09:39:58.377 に答える