ios 当应用程序不在后台运行时,自定义URL方案不起作用

jtjikinw  于 11个月前  发布在  iOS
关注(0)|答案(3)|浏览(133)

我从safari调用自定义URL来启动应用程序。如果应用程序在后台运行,它可以正常工作。但是当应用程序不在后台运行时,但已经安装在设备上,应用程序不会启动。我已经实现了以下两种方法:

- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url

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

字符串
但是当应用程序不在后台运行时,它们都不会被调用。
此外,我已经谷歌,发现我们可以启动应用程序使用以下代码时,应用程序不运行在后台

if ( [launchOptions objectForKey:UIApplicationLaunchOptionsURLKey] != nil ) {
    NSURL *url =(NSURL *)[launchOptions valueForKey:UIApplicationLaunchOptionsURLKey];
    [self application:application handleOpenURL:url];
}


- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions


但是很遗憾,didnashLaunchingWithOptions也没有触发,有人有指针吗?
P.S:这个问题只发生在iPad上。它在iPhone上工作正常。

xu3bshqb

xu3bshqb1#

我也面临着同样的问题。
似乎我们的代码运行得太快了。
插入延迟以运行自定义代码将解决此问题。

- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
{
    [NSTimer scheduledTimerWithTimeInterval:0.5f target:self selector:@selector(yourCustomActions) userInfo:nil repeats:NO];

    return YES;
}

字符串
希望它能帮助

velaa5lx

velaa5lx2#

得到你的信息.plist和执行必要的更改
1.添加新行--> URL类型
1.将其扩展
1.在项目0中添加新行---> URL方案
1.将其扩展
1.在其下的项目0中,添加要使用的自定义URL
1.在urlTypes --> URL identifier的第0项下添加一行
1.在此处提供您的应用程序的bundle id
例如:anubhab:stackoverflow.com/
对于上面的自定义URL,您可以将URL方案项0设置为:anubhab
详细信息见附件x1c 0d1x
我已经遵循了这些link。希望它有帮助。它对我来说很好,即使我从后台杀死应用程序。
该链接的Wayback机器版本:https://web.archive.org/web/20170707150909/http://chrisrisner.com/31-Days-of-iOS-Day-18-Opening-your-App-from-a-Website

g0czyy6m

g0czyy6m3#

当另一个应用打开包含您的自定义方案的URL时,系统将启动您的应用(如有必要),并将其置于前台。系统将通过调用您的应用委托的应用(_:open:options:)将URL传递给您的应用
override应用程序委托中的以下函数

func application(_ application: UIApplication,
                 open url: URL,
                 options: [UIApplicationOpenURLOptionsKey : Any] = [:] ) -> Bool {


    // Process the URL.
    guard let components = NSURLComponents(url: url, resolvingAgainstBaseURL: true),
        let albumPath = components.path,
        let params = components.queryItems else {
            print("Invalid URL or album path missing")
            return false
    }
}

字符串
apple's official documentation

相关问题