2

我正在我的应用程序中实现通用链接。一切都对我有用,除非应用程序不在后台运行。在那种情况下,我如何在我的应用程序中打开特定页面?iOS 启动我的应用程序,但我没有收到任何回调

- (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void (^)(NSArray *))restorationHandler
在这个函数中,我没有得到任何带有这一行的 url

NSURL *launchURL = [launchOptions valueForKey:UIApplicationLaunchOptionsURLKey]; 里面

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions这个功能。

有谁知道我如何获得导致启动我的应用程序的 url。

谢谢

4

4 回答 4

2

您可以通过这种方式访问​​您的网址...

    NSDictionary *aux = [launchOptions objectForKey:UIApplicationLaunchOptionsUserActivityDictionaryKey];
    if (aux) {
         NSUserActivity *activity = [aux objectForKey:@"UIApplicationLaunchOptionsUserActivityKey"];
         NSString *urlString = activity.webpageURL.absoluteString;
    }

但为了更好地使用,您必须验证此 URL,如果您可以管理它,则返回 YES

例如 ...

if([urlString hasPrefix:@"https://myUrl.com"]) {
  return YES;
}

..在此之后的方法

- (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void (^)(NSArray *))restorationHandler

它将被称为

于 2017-02-16T18:21:56.123 回答
1

当您使用您的应用打开通用链接时

 - (BOOL)application:(UIApplication *)app
        openURL:(NSURL *)url
        options:(NSDictionary<NSString *,
                         id> *)options

如果是这种情况,则使用 Universal Link 作为参数和选项调用。查看苹果文档以获取详细信息。

于 2016-03-29T11:57:54.430 回答
1

在带有SceneDelegate文件的 Swift 5 中,它将调用:

    func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) { }

当您的应用程序未在后台运行并且用户单击通用链接时。

于 2020-05-30T17:51:35.720 回答
0

你需要实施

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

   url= yourappurl://with some app link data
   sourceApplication= //who called your application

  }

例如,如果您的应用程序是从 facebook messenger 调用的,那么您将获得

  sourceApplication=@"com.facebook.messenger"
于 2016-03-29T13:15:25.797 回答