iOS Universal Links and GET parameters

前端 未结 3 1722
耶瑟儿~
耶瑟儿~ 2021-01-04 05:14

we\'re trying to implement app indexing on iOS using the Apple Universal Links (I\'m looking at https://developer.apple.com/library/ios/documentation/General/Conceptual/AppS

3条回答
  •  悲&欢浪女
    2021-01-04 05:41

    NO, Currently #(inline-links) and ?(query-parmeter) not supported by Universal Links. Apple not provided any format to support Inline-Links & Query-Parmeter in apple-app-site-association file.

    In order to do indexing to https://www.mywebsite.com?parameter=something, I'm using the following JSON file.

    {
      "applinks": {
        "apps": [],
        "details": [
          {
            "appID": "TEAMID.BUNDLEID",
            "paths":[ "*" ]
          }
        ]
      }
    }
    

    If you want to limit the indexing only to some parameter for example query_parmeter1 and query_parmeter2 then you need to handle this in UIApplicationDelegate method [UIApplicationDelegate application: continueUserActivity: restorationHandler:] something like this

    Objective-C:

    -(BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void (^)(NSArray * _Nullable))restorationHandler{
        if ([userActivity.activityType isEqualToString: NSUserActivityTypeBrowsingWeb]) {
            NSURL *url = userActivity.webpageURL;
            if ([url.query containsString:@"query_parmeter1"]) {
               //handle code for query_parmeter1
            }else if ([url.query containsString:@"query_parmeter2"]){
               //handle code for query_parmeter2
            }
    
            return YES;
        }
        return NO;
    } 
    

    Swift:

    func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([Any]?) -> Void) -> Bool {
        if userActivity.activityType == NSUserActivityTypeBrowsingWeb {
            let url = userActivity.webpageURL!
            let query = url.query ?? ""
    
            if query.contains("query_parmeter1") {
                // handle code for query_parmeter1
            } else if query.contains("query_parmeter2") {
                // handle code for query_parmeter2
            }
    
            return true
        }
    
        return false
    }
    

    Note: This trick won't prevent the app from opening when a link to the website is clicked. But you can check If URL meets your requirement or not if not then you can open your URL in the web browser again. Similar to Amazon App -

    References - Handle query parameters in universal links

提交回复
热议问题