我已在我的 iOS 4.3 应用程序中成功实现单点登录。现在我想发布一个指向用户 facebook 墙的链接,这样当他/她也拥有该应用程序的 friend 点击该链接时,他们应该被重定向到我的应用程序。我解释的方式 http://developers.facebook.com/docs/mobile/ios/build/#deeplink , 是委托(delegate)函数之一
- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url, (pre iOS 4.2)
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url
sourceApplication:(NSString *)sourceApplication annotation:(id)annotation , (iOS 4.2+)
将被调用并且可以从 [target_link] 键解析共享链接。但是,我无法让它工作。我使用以下方法成功发布了指向用户新闻提要的链接:
NSDictionary* params=[[NSDictionary alloc] initWithObjectsAndKeys:myFacebookAppID,@"app_id",
linkToPost,@"link",nil];
[_facebook dialog:@"feed" andParams:params andDelegate:self]
该帖子出现在我的动态消息中,但是当我单击链接时,没有调用上述任何委托(delegate)方法。我是否应该对链接做一些特别的事情,我尝试在链接前面添加“fb:myFacebookAppID://”,但这根本不起作用。我是不是误会了什么?
我的应用程序尚未在 AppStore 上线,在 developers.facebook.com 上有一个字段要求我输入我的 AppStore ID,这可能是问题所在吗?如果是这样,是否有任何解决方法?在将我的应用程序发送到 AppStore 之前,我想测试它是否正常工作。
感谢您的帮助!
最佳答案
例如,您需要在 AppDelegate 中拥有您的 facebook 实例:
@interface FacebookAppDelegate : UIResponder <UIApplicationDelegate>
@property (strong, nonatomic) UIWindow *window;
@property (strong, nonatomic) UINavigationController *navigationController;
@property (nonatomic, strong) Facebook *facebook;
@end
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
// Override point for customization after application launch.
self.viewController = [[FacebookViewController alloc] initWithNibName:@"FacebookViewController" bundle:nil];
self.facebook = [[Facebook alloc] initWithAppId:kAppId andDelegate:(id)self.viewController];
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
if ([defaults objectForKey:@"FBAccessTokenKey"] && [defaults objectForKey:@"FBExpirationDateKey"]) {
self.facebook.accessToken = [defaults objectForKey:@"FBAccessTokenKey"];
self.facebook.expirationDate = [defaults objectForKey:@"FBExpirationDateKey"];
}
self.window.rootViewController = self.viewController;
[self.window makeKeyAndVisible];
return YES;
}
在 AppDelegate 中你必须实现:
- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url {
return [self.facebook handleOpenURL:url];
}
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation {
return [self.facebook handleOpenURL:url];
}
如果你想在你自己的类中实现协议(protocol),你必须调用 facebook:
FacebookAppDelegate *fbAppDelegate = (FacebookAppDelegate *)[[UIApplication sharedApplication] delegate];
NSArray *permissions = [[NSArray alloc] initWithObjects:@"publish_stream",@"create_event",@"offline_access", nil];
[[fbAppDelegate facebook] authorize:permissions];
关于objective-c - 使用 SSO facebook 的故事链接流 - 未调用 openURL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9852986/