0

Meine Anforderung ist, das Schema URI aus der dynamischen Verknüpfung URL, die generiert wurde, zu erhalten. Selbst in der Beispielanwendung firebase wird die Deep Link-URL zurückgegeben und nicht das URI-Schema.Firebase Dynamische Verbindung: Wie erhält man das URI-Schema von der dynamischen Verbindung, die generiert wird?

Für zB:

Wenn ich die dynamische klicken Sie Link uRL aus E-Mail/Notes (https://my-app-code.app.goo.gl/value), wird der Rückruf der continueuseractivity Funktion sein und ich verwende den folgenden Block -

BOOL handled = [[FIRDynamicLinks dynamicLinks] handleUniversalLink:incomingUrl completion:^(FIRDynamicLink * _Nullable dynamicLink, NSError * _Nullable error) 

die uRL zu erhalten (dynamicLink.url). In diesem Block erhalte ich die Deeplink-URL
-> Meine-Web-URL (die Teil des Link-Parameters in der langen dynamischen Verbindung ist, die ich oben erwähnt habe).

Meine aktuelle Anforderung ist das URI-Schema myappscheme: // some-tag/some-tag-id, das mit der URL verknüpft ist. Wie bekomme ich das?

Ich habe sogar versucht, die unten -

FIRDynamicLink *dynamicLink = [[FIRDynamicLinks dynamicLinks] dynamicLinkFromCustomSchemeURL:url]; 

In beiden Fällen erhalte ich die URI-Schema nicht.

Bitte helfen.

Antwort

1

Was Sie versuchen, ist derzeit auf iOS mit Dynamic Links nicht möglich. Sie verwirren URI Schema (myappscheme://) mit URI Pfad (myappscheme://some-tag/some-tag-id).

Soweit ich weiß, unterstützen dynamische Links auf iOS nur das Schema (über den ius Param). Dies ist verwirrend, da Android einen URI-Pfad unterstützt (über den al Parameter). Für iOS müssen Sie Ihr Routing basierend auf der Deep Link-URL durchführen.

Alternativ könnten Sie eine robustere Deep-Linking-Plattform wie Branch.io untersuchen (vollständige Offenlegung: Ich bin im Branch-Team). Branch unterstützt benutzerdefinierte Link-Parameter, die beliebige Daten enthalten, einschließlich eines benutzerdefinierten URI-Pfads.

0

Was Alex gesagt hat, ist richtig. Es ist nicht möglich, aber es gibt einen einfachen Workaround dafür.

Ich habe meine gewünschte benutzerdefinierte URL Deep Link als Abfrageparameter an die HTTPS-Link-URL, die ich zur Verfügung gestellt.

in Ihrem Fall So wäre es so etwas wie dieses

https://my-app-code.app.goo.gl/?link=https://my-web-url.com/?myCustomSchemeUri%3Dmy-custom-scheme://my-custom-scheme-url&apn=id&isi=android-google-play-id&ibi=ios-bundle-id&ius=ios-custom-app-scheme

aussehen Wenn die continueuseractivity Rückruf an Ihre App bekommt können Sie myCustomSchemeUri Parameter aus der Abfrage-String und verwenden Sie es als Sie bitte abrufen.

Etwas wie folgt aus:

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

BOOL handled = [[FIRDynamicLinks dynamicLinks] 
       handleUniversalLink:userActivity.webpageURL 
       completion:^(FIRDynamicLink * _Nullable dynamicLink, 
          NSError * _Nullable error) { 
        // ... 
        NSURL *url = dynamicLink.url; 
        NSString *myUri = [url queryParameterValueWithName:@"customUri"]; 
        if (myUri.lenghth > 0){ 
         NSURL *myURL = [NSURL URLWithString:myUri]; 
         if (myURL != nil){ 
          //source application is your bundle id in this case 
          [self application:application openURL:myURL sourceApplication:@"com.yourbundle.id" annotation:@{}]; 
         } 
        } 
       }]; 
return handled; 
} 

Und das ist die Methode, die ich als eine Kategorie von NSURL schrieb der Parameter

- (NSString *)queryParameterValueWithName:(NSString*)name{ 
NSURLComponents *urlComponents = [NSURLComponents componentsWithURL:self 
              resolvingAgainstBaseURL:NO]; 
NSArray *queryItems = urlComponents.queryItems; 
NSString *param = [self valueForKey:name 
         fromQueryItems:queryItems]; 
return param; 
} 

- (NSString *)valueForKey:(NSString *)key 
     fromQueryItems:(NSArray *)queryItems 
{ 
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"name=%@", key]; 
NSURLQueryItem *queryItem = [[queryItems 
           filteredArrayUsingPredicate:predicate] 
          firstObject]; 
return queryItem.value; 
} 

Vielleicht diese Antwort ist ein bisschen spät, um Sie zu holen, aber ich ist heute auf dieses Problem gestoßen. Jedenfalls hoffe ich, dass dies jemand anderem da draußen hilft.

Cheers,

Alessio

Verwandte Themen