gpt4 book ai didi

iphone - Facebook SDK 集成 - 使用 View Controller 而不是应用程序委托(delegate)

转载 作者:行者123 更新时间:2023-12-03 21:04:04 25 4
gpt4 key购买 nike

正如标题所示,我现在发现自己正在使用新的 Facebook SDK——可用 here -- 在我的 iOS 应用程序中。

我关注了this Facebook 开发者网站上概述了介绍,并且一切都按其应有的方式运行 - 至少根据其实现。

他们的处理方式意味着,在调用 applicationDidFinishLaunching 后,通过应用程序委托(delegate)中的一系列方法和调用,用户可以选择将其帐户连接到应用程序。

我只想在选择 Conceal 在应用程序其他地方的 View Controller 中的按钮时强制执行此操作。也就是说,我不想在调用 applicationDidFinishLaunching 时处理授权 - 我希望在 View Controller 中使用我自己的方法来强制授权。另外,我将从我自己的一些 View Controller 中引用 Facebook 类,如果这有什么区别的话。

我已经进行了广泛的搜索,但尚未提出一个完全解释的解决方案(或任何东西,真的)来处理这个问题。如果有人对如何解决这个问题有想法,请告诉我。大多数时候 StackOverflow 是最后的手段:)

编辑:正如下面提到的铍,我可以简单地将应用程序委托(delegate)中的所有内容放入每个单独的 View Controller 中。它有效,但这是处理这种独特情况的最佳方法还是有更好的实现?

谢谢,

相关代码如下:

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

#import "FBConnect.h"
#import "sampleAppDelegate.h"

@class sampleAppDelegate;


@interface viewController : UIViewController <FBRequestDelegate> {
Facebook *facebook;
UnitedUpdatesAppDelegate *facebookSampleAppDelegate;


}
@property (nonatomic, retain) sampleAppDelegate *appDelegate;
@property (nonatomic, retain) Facebook *facebook;

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];
}

最佳答案

我相信这个 Facebook 代码不应该成为任何 View Controller 的一部分。我更喜欢创建一个 Singleton 类来处理与 Facebook 的通信。这个单例符合一定的接口(interface),可以更方便地向应用程序添加其他服务,例如Twitter(每个服务可以由符合共享接口(interface)的单独单例来处理)。

该接口(interface)可以定义诸如 -login:-logout:-postMessage: 之类的方法,即大多数服务共享的方法。

单例可以使用委托(delegate)或 block 以类似的方式处理 Web 服务响应,例如在委托(delegate)实现的情况下,某些方法可以称为 -service:didSucceedWithStatus:-service:didFailWithError: (其中 service 参数将指示发送委托(delegate)消息的服务或单例实例的类型)。

我确实根据上面的描述编写了一些代码,如果您有兴趣,可以将其发布在这里。

关于iphone - Facebook SDK 集成 - 使用 View Controller 而不是应用程序委托(delegate),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9158464/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com