我遇到了这个问题,我设置了一个公司的联系信息,由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:
已弃用),但似乎没有被调用。
有没有办法拦截这个开场?
答案 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;
}