从ABUnknownPersonViewController打开并添加Facebook页面

时间:2014-02-10 17:22:27

标签: ios objective-c facebook

我遇到了这个问题,我设置了一个公司的联系信息,由ABUnknownPersonViewController显示。其中一个信息是Facebook页面,如果我在模拟器上点击它,它会在正确的页面上打开safari。在设备上,FB应用程序拦截了URL,除了我的时间线之外什么都不打开 我知道当您尝试使用方法-openURL:在应用程序内打开FB页面URL时会发生同样的情况,我知道这可以通过使用该代码段轻松修复。

NSURL *facebookURL = [NSURL URLWithString:@"fb://profile/113810631976867"];
if ([[UIApplication sharedApplication] canOpenURL:facebookURL]) {
    [[UIApplication sharedApplication] openURL:facebookURL];
} else {
    [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"http://facebook.com/pagename"]];
}

事实是,我尝试使用该应用委托方法- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation拦截网址  (handleOpenURL:已弃用),但似乎没有被调用。
有没有办法拦截这个开场?

1 个答案:

答案 0 :(得分:0)

我找到了答案,使用ABUnknownPresonViewcontroller的协议方法可以截取一些事件。我必须诚实地说,我仍然不知道如何识别不同的行为,但这样才有效。

- (BOOL)unknownPersonViewController:(ABUnknownPersonViewController *)personViewController shouldPerformDefaultActionForPerson:(ABRecordRef)person property:(ABPropertyID)property identifier:(ABMultiValueIdentifier)identifier {
    if (property == 46) { //46 seems to be number associated to the property facebook page
        NSURL * facebookURL = [NSURL URLWithString:@"fb://profile/PAGE_ID"];
        if ([[UIApplication sharedApplication] canOpenURL:facebookURL]) {
            [[UIApplication sharedApplication] openURL:facebookURL];
        } else {
            [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"http://facebook.com/PAGE_NAME"]];
        }
        return NO;
    }

    return YES;
}