2

タイトルが示すように、自分のiOSアプリケーション内で新しいFacebook SDK(利用可能なhere)を利用しています。Facebook SDKの統合 - アプリケーションデリゲートの代わりにビューコントローラを使用

私はFacebook開発者サイトで紹介されたthisの紹介をたどりました。少なくとも、その実装によれば、すべてがうまくいくはずです。

彼らのやり方は、一連のメソッドとアプリケーションデリゲート内の呼び出しを介して、applicationDidFinishLaunchingが呼び出された後、ユーザーが自分のアカウントをアプリに接続する選択肢を提示されたことを意味します。

私は代わりに、アプリケーションの他の場所に埋め込まれたビューコントローラ内のボタンの選択時にこれを強制するだけです。つまり、私はapplicationDidFinishLaunchingが呼び出されたときに承認に対処したくありません - 私はそれを強制するビューコントローラで私自身のメソッドをしたいです。また、私はFacebookのクラスをいくつかの独自のView Controllerから参照することになります。

私はこれまでのところ十分に説明した解決策(または実際には何か)を考えていませんでした。誰かがこれについてどうやって行くかについてのアイデアがあるなら、私に知らせてください。 StackOverflowはほとんどの場合、最後の手段です。

編集:ベリリウムが下に持ち込まれたので、私は単にアプリケーションデリゲートにあるすべてのものを取り、それを個々のビューコントローラーにスラップすることができます。それは機能しますが、これはこのユニークな状況を処理する最善の方法ですか、それともより良い実装があるのでしょうか?

、以下

関連するコードをありがとう:

をsampleAppDelegate.h

@interface sampleAppDelegate : NSObject <UIApplicationDelegate,FBRequestDelegate, FBSessionDelegate, FBDialogDelegate, FBLoginDialogDelegate> { 

Facebook *facebook; 
} 

@property (nonatomic, retain) Facebook *facebook; 

@end 

sampleAppDelegate.m

@synthesize facebook; 

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

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

     if (![facebook isSessionValid]) { 
      NSArray *permissions = [[NSArray alloc] initWithObjects: 
            @"offline_access", 
            @"publish_stream", 
            nil]; 
      [facebook authorize:permissions]; 
      [permissions release]; 
     } 
    } 
    // For 4.2+ support 
    - (BOOL)application:(UIApplication *)application openURL:(NSURL *)url 
     sourceApplication:(NSString *)sourceApplication annotation:(id)annotation { 
     return [facebook handleOpenURL:url]; 
    } 

    - (void)fbDidLogin { 
     NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
     [defaults setObject:[facebook accessToken] forKey:@"FBAccessTokenKey"]; 
     [defaults setObject:[facebook expirationDate] forKey:@"FBExpirationDateKey"]; 
     [defaults synchronize]; 

    } 
/*methods required by Facebook SDK to handle issues with connectivity--all currently empty*/ 

viewController.h

AppDelegate以外の場所でのデリゲートメソッドを使用することができ、さらには優れている場合は、求めている場合は0

viewController.m

-(void) facebookPost { 
    NSMutableDictionary* params = [NSMutableDictionary dictionaryWithObjectsAndKeys: 

            @"http://stackoverflow.com", @"link", 
            @"Message name", @"name", 
            @"Caption", @"caption", 
            @"Description", @"description", 
            @"Message", @"message", 
            nil]; 

    [sampleAppDelegate dialog:@"feed" andParams:params andDelegate: sampleAppDelegate]; 
} 
+1

VCにappDelegateのコードをカットして挿入するには、Cmd + XとCmd + Vを試しましたか? – beryllium

+0

ベリリウム、それは最善の方法でしょうか?それは確かに機能する - 私は、元のポストのそれで私の以前の試みに言及することを怠ったが、どのようにそのような実装を処理する必要がありますか?これはFacebook APIの私の最初の使い方です、明らかに、彼らのシステムに関する私の知識はおそらく私が好きかもしれないほど大きくはありません。プロンプトをありがとう! –

+0

私は、ある場所で動作するコードは別の場所でも正常に動作すると思います。だから、間違いなくコードを転送して何かを逃さないなら、すべてうまくいくでしょう。 – beryllium

答えて

2

このFacebookコードはView Controllerの一部であってはならないと思います。私は、Facebookとのコミュニケーションを処理するためにSingletonクラスを作成することを好みます。このシングルトンは特定のインターフェイスに準拠しており、Twitterなどの他のサービスをアプリケーションに追加すると便利です(各サービスは共有インターフェイスに準拠した別個のシングルトンで処理できます)。

インタフェースは-loginようなメソッドを定義することができ:-logout:-postMessage:、即ちほとんどのサービスで共有方法。

シングルトンは、Webサービス応答を同様の方法で処理するためにデリゲートまたはブロックを使用することがあります。 didSucceedWithStatus:又は-service:didFailWithError:サービスパラメータはデリゲートメッセージを送信するサービスまたはシングルトンインスタンスのタイプを示すであろう)デリゲートの実装の場合、いくつかの方法は、-serviceと呼ぶことができます。

私は実際に上記の説明に従ってコードを書きましたが、興味があればここに投稿することができました。

+0

こんにちはヴォルフガング、あなたが提供することができるすべてのヘルプは、特にFacebook SDKが提示するトラブルに対処しているので、素晴らしいでしょう。私は確かに1つのクラスのすべてのFacebookを維持するあなたの考えが好きで、あなたがそれをどのように管理しているのか興味があります。私はあなたの援助に非常に感謝しています! –

+0

シングルトンコードを投稿することはできますか?私は今、この非常事に立ち往生しています。ありがとうございます – hanumanDev

+0

コードはちょっと古いですし、ちょっとバグかもしれませんが、そのようなことを実装する方法の一般的なアイデアがあります:http://dl.dropbox.com/u/6487838/Facebook-Singleton zip - 私は将来的に改良版を作ることができます(リンクされたコードは1.5年前と同じように書かれています)。 –

0

、答えはYESです。

私の考えは、FBのすべてのものを含むクラスを準備し、ログインや認証をトリガーできるボタンを用意することです。

通常、コントローラがFBクラスに必要なプロトコルを採用し、コールバックに応答するように委任するだけで十分です。

私は同様のアプローチを試みましたが、うまくいきます。

+0

イングコンティ、私を正しい方向に導くかもしれない?これが説明されているところで私が逃したブログ記事はありますか?私は、すべてのアプリケーションデリゲートメソッドをそれ自身のクラスに変換する方法につまづいています。私はちょうどアプリのデリゲートにあることを意味するすべてのものをコピーしますか?それは本当に簡単ですか? :) –

関連する問題