应用程序不是 运行 时的通用链接

Universal Links while app is not running

我正在我的应用程序中实现通用链接。一切都对我有用,除非应用程序不在后台 运行。在那种情况下,我如何在我的应用程序中打开特定页面? 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。

谢谢

当您使用您的应用打开通用 Link 时

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

以通用 Link 作为参数和选项调用(如果是这种情况)。检查 apple docs 了解详情。

你需要实施

- (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"

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

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

但为了更好地使用,您必须验证此 URL 和 return 如果您可以管理它,是的

例如...

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

..在此之后的方法

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

会叫

在 Swift 5 中,对于 SceneDelegate 文件,它将调用:

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

当您的应用不在后台 运行 并且用户点击通用 link。