iOS - 使用URL方案打开某些视图控制器

时间:2012-06-07 04:19:33

标签: ios url uiviewcontroller url-scheme

我在我的应用中使用URL方案。我轻松地打开我的应用程序,只需将必要的项目添加到info.plist。这个当前URL“myappname://”将用户带到初始视图控制器FirstTableViewController,但我想知道是否可以修改该URL方案,以便我可以使用一个将用户带到某个视图控制器,比如ThirdTableViewController。我会将其用作启动中心等方便的功能。

5 个答案:

答案 0 :(得分:4)

试一试:Custom Url Schemes

希望这将是一个有用的

答案 1 :(得分:4)

这篇文章有点陈旧但可能对iOS 5 +有用,因为选中的答案不正确。

AppDelegate没有任何navigationController属性。

相反,您可以在AppDelegate.m中执行:

enter code here

- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url {
    MyViewController *controller = [[MyViewController alloc] initWithNibName:@"MyViewController" bundle:[NSBundle mainBundle]];
    UINavigationController *navController = (UINavigationController *)self.window.rootViewController;
    [navController presentModalViewController:controller animated:YES];

    return YES;        
}

答案 2 :(得分:0)

嗨,这是我的解决方案。

如果您可以调用在“ application(_ app:UIApplication,打开url:URL,选项:[UIApplicationOpenURLOptionsKey:Any] = [:])-> Bool”事件中调用的导航功能(有延迟),则可以在应用程序中导航特定页面,甚至在调用前未运行。

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
        // Actived keyboard avoider
        changeAppereance()
        delay(1) {
            deeplink = Deeplink()
            self.manageNavigation(launchOptions: launchOptions)
            self.navigate()
        }

        return true

    }


    private func manageNavigation(launchOptions: [UIApplicationLaunchOptionsKey: Any]?) {
        if let url = launchOptions?[UIApplicationLaunchOptionsKey.url] as? URL { //Deeplink
            print(url.absoluteString)
            deeplink = Deeplink()
            deeplink?.url = url
        }
        else if let activityDictionary = launchOptions?[UIApplicationLaunchOptionsKey.userActivityDictionary] as? [AnyHashable: Any] { //Universal link
            for key in activityDictionary.keys {
                if let userActivity = activityDictionary[key] as? NSUserActivity {
                    if let url = userActivity.webpageURL {
                        deeplink = Deeplink()
                        deeplink?.url = url
                    }
                }
            }
        }

    }

open func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool {
        print(url.absoluteString)
        deeplink = Deeplink()
        deeplink?.url = url
        navigate()
        return true
    }

答案 3 :(得分:-1)

是的,可以修改URL方案,以便您可以将用户跳转到任何viewcontroller。我使用并实现了普通以及https://hokolinks.com/深层链接。通过hoko链接深层链接,您可以修改您的URL方案,也可以您可以使用该URL发送数据。

使用Hoko Link集成iOS SDK - 将URL方案添加到您的应用程序 - SDK设置 要在您的应用程序中集成HOKO开源SDK(仅限iOS 5及更高版本),您只需遵循3个简单步骤(使用cocoapods或手动执行)。

使用CocoaPods

1-在系统中安装CocoaPods

2-打开Xcode项目文件夹,创建一个名为Podfile的文件,其中包含以下内容:

pod' Hoko','〜> 2.3.0' 3-运行pod install并等待CocoaPods安装HOKO SDK。从现在开始,您应该开始使用.xcworkspace。

,而不是使用.xcodeproj文件

手动整合

1-下载Hoko SDK。

2-将Hoko文件夹拖到项目中。

3-确保还添加SystemConfiguration.framework和zlib.dylib,以防您的项目尚未包含它。

将SDK与Swift项目集成

因为HOKO SDK是用Objective-C编写的,所以你必须手动将Bridging Header文件添加到项目中,以便将它与Swift代码一起使用:

1-文件>新>文件...> iOS>来源>头文件

2-命名头文件YourAppName-Bridging-Header.h

3-在该头文件中,导入#import

4-转到您的项目>构建设置>搜索Objective-C桥接标题>从根文件夹(例如MyApp / MyApp-Bridging-Header.h)添加桥接头文件的路径

将URL方案添加到您的应用

接下来,我们需要定义您应用的自定义网址类型(如果您还没有)。打开Xcode项目设置,在“信息”选项卡下展开“URL类型”部分。如果您已配置了URL类型,则可以跳过此步骤。

如果此部分为空,请单击“+”图标以添加新的URL类型。假设我们想通过“hoko://”打开应用程序。因此,我们需要在URL Schemes中输入“hoko”。

我们还应该为此URL类型分配唯一的标识符。 Apple建议您使用反向DNS表示法以确保类型之间没有名称冲突。在这个例子中,我们将使用“com.hoko.app”。

请注意您的网址计划,因为我们会在您通过信息中心创建应用时向您提出要求,例如: “鉾”。

网址计划

设置关联域(通用链接) - iOS 9.0 +

为了让您的应用完全支持Apple新推出的Universal Links,您必须在应用目标的功能选项卡内的Associated Domains部分中启用并添加新条目。单击“+”按钮并添加一个具有以下值的新条目:applinks:myapp.hoko.link,myapp是您为应用程序的Hoko链接选择的Hoko子域。您还可以拥有自己的链接域(在子域名部分了解更多信息)。

网址计划

SDK设置

将以下行添加到AppDelegate类的applicationDidFinishLaunching方法中(如果您使用的是Objective-C,请不要忘记使用#import导入HOKO类。)

目标-C 迅速     #import

- (BOOL)application:(UIApplication *)application
  didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
  [Hoko setupWithToken:@"YOUR-APP-TOKEN"];
 // The rest of your code goes here...

  return YES;
}

如果您在智能链接中使用自定义域,则必须使用setupWithToken设置iOS SDK:customDomain:如下所示:

目标-C 迅速     #import

- (BOOL)application:(UIApplication *)application
  didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
  [Hoko setupWithToken:@"YOUR-APP-TOKEN"
     customDomain:@"your.custom.domain.com"];
  // The rest of your code goes here...

 return YES;

} 注意:确保在应用程序中返回YES:didFinishLaunchingWithOptions:delegate方法允许处理打开应用程序的传入深层链接。返回NO将阻止请求。

使用Hoko Link SDK设置您的移动深层链接

答案 4 :(得分:-2)

In ... AppDelegate.m

- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url {
MyViewController *controller = [[MyViewController alloc] initWithNibName:@"MyViewController" bundle:[NSBundle mainBundle]];
[self.viewController presentModalViewController:controller animated:YES];
[controller release];

return YES;        
}