2016-02-17 13 views
6

Wir versuchen, App-Indizierung auf iOS mit den Apple Universal Links zu implementieren (Ich bin auf https://developer.apple.com/library/ios/documentation/General/Conceptual/AppSearch/UniversalLinks.html#//apple_ref/doc/uid/TP40016308-CH12-SW2).iOS Universal Links und GET-Parameter

Im Abschnitt "Erstellen und Hochladen der Zuordnungsdatei" sehe ich, dass ich die Indizierung auf bestimmte Seiten beschränken kann, was gut ist.

Ich möchte die Indizierung auf https://www.mywebsite.com?parameter=something beschränken, wie kann ich?

Ich dachte an so etwas wie das:

{ 
    "applinks": { 
    "apps": [], 
    "details": [ 
     { 
     "appID": "MYID", 
     "paths":[ "*?parameter=*" ] 
     } 
    ] 
    } 
} 

Glauben Sie, es funktionieren könnte? Ich kann es noch nicht testen, weil es Zeit braucht, um die Berechtigung zum Hochladen von Dateien in das Stammverzeichnis der Website zu bekommen. Deshalb frage ich Sie, ob Sie denken, dass es funktionieren könnte. Ich möchte die Datei nur einmal hochladen, wenn ich kann.

Danke

Antwort

10

NO, Zeit # (Inline-Links) und? (Abfrage-Parmeter) nicht von Universal Links unterstützt. Apple hat kein Format zur Unterstützung Inline-Links & Query-Parmeter in apple-app-site-association Datei zur Verfügung gestellt.

Um Indexierung zu https://www.mywebsite.com?parameter=something zu tun, verwende ich die folgende JSON-Datei.

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

Wenn Sie nur die Indizierung zu begrenzen, um einige Parameter zum Beispiel query_parmeter1 und query_parmeter2 dann müssen Sie diese Methode in UIApplicationDelegate Griff [UIApplicationDelegate application: continueUserActivity: restorationHandler:] so etwas wie dieses

-(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; 
} 

Hinweis: Dieser Trick gewonnen Die App kann nicht geöffnet werden, wenn auf einen Link zur Website geklickt wird.

Referenzen - Handle query parameters in universal links

+0

Dies ist eine großartige Antwort für die Handhabung von Parametern in Universal Links. Erwähnenswert ist vielleicht der Unterschied zwischen Universal Links, [App-Indexierung] (https://developer.apple.com/library/ios/documentation/General/Conceptual/AppSearch/AppContent.html#//apple_ref/doc/uid/ TP40016308-CH7-SW1) und Indizierung von Inhalten für [Spotlight Web Search] (https://developer.apple.com/library/ios/documentation/General/Conceptual/AppSearch/WebContent.html#//apple_ref/doc/uid/ TP40016308-CH8-SW1), da der Autor anscheinend letzteres tun möchte (was in einer grundlegenden Universal-Links-Implementierung nicht automatisch ist) –

+0

Danke Vineet Choudhari. Dies ist ein guter Trick, aber es wird nicht verhindern, dass die App öffnet, wenn ein Link auf die Website geklickt wird, oder? Wie gehen Sie mit der Umleitung der Website im Standardfall um, wenn keiner der Parameter gesetzt ist?Danke –

+0

@AlexBauer danke für deinen Kommentar und die Links. Eigentlich interessiert mich Applebot nicht sonderlich, aber ich möchte unsere App mit der Google App Indizierung (https://developers.google.com/app-indexing/) kompatibel machen. Tatsache ist, dass ich verrückt werde, um das zu erreichen. Und die Verwirrung zwischen universellen Links, benutzerdefinierter URL, App-Indexierung, markiertem Web-Content wächst jeden Tag: -/ –

2

Für Abfrageparameter an einen Pfad beigefügten off der Basisbereich (dh https://www.mywebsite.com/pathOffOfTheBaseDomain?parameter=something) verwenden:

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

Nach Apple Universal Link documentation:

Note that only the path component of the URL is used for comparison. Other components, such as the query string or fragment identifier, are ignored.

Die vollständige URL wird reif sein und bereit für die Analyse in AppDelegate continueUserActivity Methode.

Verwandte Themen