2016-02-11 80 views
2

嗯,我盡我所能解決這個問題,但絕對沒有運氣。如何替換 - (BOOL)應用程序:openURL:sourceApplication:註釋:(id)註釋

我有這段使用正常工作。但需要解決棄用方法。

-(BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation { 

    NSLog(@"%@",url.scheme); 
    NSString *path = [[NSBundle mainBundle] pathForResource: @"Info" ofType: @"plist"]; 
    NSDictionary *dict = [NSDictionary dictionaryWithContentsOfFile: path]; 
    NSString *str = [NSString stringWithFormat:@"fb%@",[dict objectForKey: @"FacebookAppID"]] ; 

    BOOL result = [[FBSDKApplicationDelegate sharedInstance] application:application 
                  openURL:url 
               sourceApplication:sourceApplication 
                 annotation:annotation 
      ]; 
    if (result) { 
     return YES; 
    } 

    return [self.instagram handleOpenURL:url]; 
} 

我看到它現在已被棄用。

iOS(4.2及更高版本)已棄用:使用應用程序:openURL:options:取而代之。其中產生以下。但這不是所謂的。我錯過了什麼?

-(BOOL)application:(UIApplication *)application openURL:(NSURL *)url options:(NSDictionary<NSString *,id> *)options{ 
NSLog(@"%@",url.scheme); 
     NSString *path = [[NSBundle mainBundle] pathForResource: @"Info" ofType: @"plist"]; 
     NSDictionary *dict = [NSDictionary dictionaryWithContentsOfFile: path]; 
     NSString *str = [NSString stringWithFormat:@"fb%@",[dict objectForKey: @"FacebookAppID"]] ; 

     BOOL result = [[FBSDKApplicationDelegate sharedInstance] application:application 
                   openURL:url 
                sourceApplication:sourceApplication 
                  annotation:annotation 
       ]; 
     if (result) { 
      return YES; 
     } 

     return [self.instagram handleOpenURL:url]; 
    } 

在預先感謝您的評論和任何幫助,非常感謝您。

回答

0

看看這個post。它是快速的,但它的實現基本相同。

在Objective-C會是這樣的

NSString *sourceApplication = options[UIApplicationOpenURLOptionsSourceApplicationKey]; 
return [[FBSDKApplicationDelegate sharedInstance] application:application 
                  openURL:url 
               sourceApplication:sourceApplication 
                 annotation:nil]; 
+0

凡將這個簡單的解決方案邏輯被執行?如果在didFinishLaunchingWithOptions中,URL不可用,並且我引用了本文以訪問url方案,但未解決。它將在'application:openURL:options:'中。[鏈接](http://www.idev101.com/code/Objective-C/custom_url_schemes.html) – JetSet

+0

。FBSDK將訪問plist並使用應用程序方案調用此方法。 – quant24

+1

謝謝!我會試一試。但主要的是我不知道如何調用'application:openURL:options:'方法。 – JetSet

2

您所使用的方法是從的iOS 9.0起。它不會在iOS 9.0以下的設備中調用。

也適用於iOS 9+設備。你必須在LSApplicationQueriesSchemes鍵添加到您的信息的plist

LSApplicationQueriesSchemes(陣列 - iOS設備)指定 你想要的應用能夠與canOpenURL使用URL方案:在 UIApplication類的方法。對於您希望應用程序與 canOpenURL:方法一起使用的每個URL方案,請將其作爲字符串添加到此數組中。閱讀 canOpenURL:關於 聲明支持的方案和使用該方法的重要信息的方法描述。

要了解註冊應用程序可以處理的URL模式 的逆向操作,請閱讀CFBundleURLTypes鍵的描述。

此密鑰在iOS 9.0及更高版本中受支持。

+0

而不是發佈鏈接作爲答案添加一些文本來解釋這個答案如何幫助OP在修復當前issue.Thanks –

1

的方法 「應用:的OpenURL:sourceApplication:註釋:」 是從iOS9起廢棄。所以基本上如@ user2559325所示,此回調在iOS9以下的設備中不起作用。請參考以下SDK界面。

- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(nullable NSString *)sourceApplication annotation:(id)annotation 

NS_DEPRECATED_IOS(4_2,9_0, 「請使用應用程序:的OpenURL:選擇:」)

0

下面是該斯威夫特3.

func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool { 
    return FBSDKApplicationDelegate.sharedInstance().application(app, open: url, options: options) 
}