タイトルが示すように、自分の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以外の場所でのデリゲートメソッドを使用することができ、さらには優れている場合は、求めている場合は0viewController.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];
}
VCにappDelegateのコードをカットして挿入するには、Cmd + XとCmd + Vを試しましたか? – beryllium
ベリリウム、それは最善の方法でしょうか?それは確かに機能する - 私は、元のポストのそれで私の以前の試みに言及することを怠ったが、どのようにそのような実装を処理する必要がありますか?これはFacebook APIの私の最初の使い方です、明らかに、彼らのシステムに関する私の知識はおそらく私が好きかもしれないほど大きくはありません。プロンプトをありがとう! –
私は、ある場所で動作するコードは別の場所でも正常に動作すると思います。だから、間違いなくコードを転送して何かを逃さないなら、すべてうまくいくでしょう。 – beryllium