objective-c - 使用 SSO facebook 的故事链接流 - 未调用 openURL

标签 objective-c ios facebook fbconnect openurl

我已在我的 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/

相关文章:

ios - 为 iCloud 和 UILocalNotification 更新安排 iOS 后台任务

objective-c - 在这种情况下,为什么我会收到发送到已释放实例的消息错误?

javascript - Facebook JS SDK "feed"将窗口推到顶部并打开对话框

iphone - Facebook 登录要求安装 (iPhone)

Android Facebook 内容提供商权限

iphone - 如何在 Objective-C 中格式化 Facebook/Twitter 日期(来自 JSON 提要)

objective-c - Objective-C 中的 BOOL 评估

ios - 在 iOS7 中,cell.selectedBackgroundView 没有显示

ios - AVMutableComposition 不允许添加 4 个视频轨道

ios - 在打开/加载之前加载/刷新 WKWebView