我在我的应用中使用URL方案。我轻松地打开我的应用程序,只需将必要的项目添加到info.plist。这个当前URL“myappname://”将用户带到初始视图控制器FirstTableViewController,但我想知道是否可以修改该URL方案,以便我可以使用一个将用户带到某个视图控制器,比如ThirdTableViewController。我会将其用作启动中心等方便的功能。
答案 0 :(得分:4)
希望这将是一个有用的
答案 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;
}