2

とても簡単な質問があります。

FB チュートリアルhttps://developers.facebook.com/docs/mobile/ios/build/didFinishLaunchingWithOptionsでは、アプリケーションの起動直後にログインが開始されます。

タップでログインしてからcallback、FB ウォールでメッセージを送信する必要があります。Hackbook アプリのサンプル デザイン アプリケーションは、この目的には複雑すぎると思います。

これを達成する最も簡単な方法は何ですか?

UPD: Hackbookの例に従いましたが、ViewControllersまだ取得できませんでしたcallback:(

yAppDelegate.h:

    #輸入
    #import "FBConnect.h"
    
    @interface yAppDelegate : UIResponder
    {
        フェイスブックフェイスブック;
        
    }
    
    @property (強力、非アトミック) UIWindow *window;
    @property (非アトミック、保持) Facebook *facebook;
    
    @終わり

yAppDelegate.m:

    #import "yAppDelegate.h"
    #import "yViewController.h"
    
    static NSString* kAppId = @"350435425024264";
    
    @実装 yAppDelegate
    
    @synthesize ウィンドウ = _window;
    @synthesize フェイスブック;
    
    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
    {    
        yViewController *viewController = [[yViewController alloc] init];
        
        facebook = [[Facebook 割り当て] initWithAppId:kAppId andDelegate:viewController];
        
        NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
        if ([defaults objectForKey:@"FBAccessTokenKey"] && [defaults objectForKey:@"FBExpirationDateKey"]) {
            facebook.accessToken = [デフォルト objectForKey:@"FBAccessTokenKey"];
            facebook.expirationDate = [デフォルト objectForKey:@"FBExpirationDateKey"];
        }
        
        はいを返します。
    }
    
    - (void)applicationDidBecomeActive:(UIApplication *)アプリケーション{
        [[self facebook] extendsAccessTokenIfNeeded];
    }
    
    - (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url {
        return [self.facebook handleOpenURL:url];
    }
    
    - (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication 注釈:(id)annotation {
        return [self.facebook handleOpenURL:url];
    }

yViewController.h:

    #輸入
    #import "FBConnect.h"
    
    @interface yViewController : UIViewController
    {
        NSArray *パーミッション;
    }
    
    @property (非アトミック、保持) NSArray *パーミッション。
    
    @終わり

yViewController.m

    #import "yViewController.h"
    #import "yAppDelegate.h"
    #import "FBConnect.h"
    
    @interface yViewController ()
    @終わり
    
    @実装 yViewController
    @synthesize パーミッション;
    
    - (IBAction)buttonPressed:(UIButton *)送信者 {
        
        NSLog(@"ボタンが押されました!");
        
        permissions = [[NSArray alloc] initWithObjects:@"offline_access", nil];
        
        yAppDelegate *delegate = (yAppDelegate *)[UIApplication sharedApplication].delegate;
        if (![[フェイスブックのデリゲート] isSessionValid]) {
            [[facebook のデリゲート] 承認:権限];
        } そうしないと {
            //[自己 showLoggedIn];
        }
        NSLog(@"ログイン!!");
        
    }
    
    
    - (void)viewDidLoad
    {
        [super viewDidLoad];
        // 通常はペン先からビューをロードした後、追加のセットアップを行います。
    }
    
    - (void)viewDidUnload
    {
        [super viewDidUnload];
        // メイン ビューの保持されているサブビューを解放します。
    }
    
    - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation が必要です
    {
        return (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown);
    }
    
    #pragma mark - FBSessionDelegate メソッド
    /**
     * ユーザーが正常にログインしたときに呼び出されます。
     */
    - (void)fbDidLogin {
        NSLog(@"ログインしました");
    }
    
    -(void)fbDidExtendToken:(NSString *)accessToken expiresAt:(NSDate *)expiresAt {
        NSLog(@"トークン拡張");
    }
    
    /**
     * ユーザーが承認ダイアログをキャンセルしたときに呼び出されます。
     */
    -(void)fbDidNotLogin:(BOOL)キャンセル {
        NSLog(@"fbDidNotLogin");
    }
    
    /**
     * リクエストのログアウトが成功したときに呼び出されます。
     */
    - (void)fbDidLogout {
        
        NSLog(@"fbDidLogout");
        
        // 保存されている承認情報が存在する場合は削除します。
        // クリアしてもいい (ログアウト、セッション無効、アプリ無許可)
        NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
        [デフォルト removeObjectForKey:@"FBAccessTokenKey"];
        [デフォルト removeObjectForKey:@"FBExpirationDateKey"];
        [デフォルト同期];
    
    }
    
    /**
     * セッションの有効期限が切れたときに呼び出されます。
     */
    - (void)fbSessionInvalidated {
        
        NSLog(@"fbSessionInvalidated");
        
        [自己 fbDidLogout];
    }
    
    #pragma mark - FBRequestDelegate メソッド
    /**
     * Facebook API リクエストがレスポンスを返したときに呼び出されます。
     *
     * このコールバックにより、生の応答にアクセスできます。前に呼ばれた
     * (void)request:(FBRequest *)request didLoad:(id)result,
     * 解析された応答オブジェクトが渡されます。
     */
    - (void)request:(FBRequest *)request didReceiveResponse:(NSURLResponse *)response {
        //NSLog(@"受信応答");
    }
    
    /**
     * リクエストが返され、そのレスポンスが解析されたときに呼び出されます
     * オブジェクト。
     *
     * 結果のオブジェクトは、辞書、配列、または文字列のいずれかになります。
     * API レスポンスの形式について。生の応答にアクセスする必要がある場合は、
     * 使用する:
     *
     * (void)request:(FBRequest *)request
     * didReceiveResponse:(NSURLResponse *) 応答
     */
    - (void)request:(FBRequest *)request didLoad:(id)result {
        NSLog(@"-(void)request");
    }
    
    /**
     * エラーにより Facebook API リクエストが完了できない場合に呼び出されます
     * 成功しました。
     */
    - (void)request:(FBRequest *)request didFailWithError:(NSError *)error {
        NSLog(@"エラー メッセージ: %@", [[エラー userInfo] objectForKey:@"error_msg"]);
        NSLog(@"エラーコード: %d", [エラーコード]);
    }

@終わり
4

1 に答える 1

2

FB チュートリアルが示しているのとまったく同じ方法で、ログイン コードをボタン イベントまたはそれをトリガーしたいものに移動するだけです。

于 2012-06-26T14:02:23.587 に答える