2014-02-10 48 views
0

我有這個問題,我設置了一個公司的聯繫信息,由ABUnknownPersonViewController顯示。其中一個信息是Facebook頁面,如果我在模擬器上點擊它,它會在正確的頁面上打開Safari。在設備上,URL被FB應用攔截,除了我的時間表外,其他任何內容都不會打開。
我知道,當您嘗試使用方法-openURL:在應用程序內部打開FB頁面URL時,會發生同樣的情況,並且我知道使用該片段可以輕鬆修復此問題。
打開並添加來自ABUnknownPersonViewController的Facebook頁面

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)annotationhandleOpenURL:已過時)攔截的URL,但它似乎並不被調用。
有沒有辦法攔截這個開放?

回答

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