0

私の要件は、生成されURIた動的リンクからスキームを取得することです。URLサンプル アプリでもfirebase、URI スキームではなくディープ リンク URL が返されます。

例:

電子メール/メモ ( https://my-app-code.app.goo.gl/value )からダイナミック リンク URL をクリックすると、コールバックは continueuseractivity 関数になり、次のブロックを使用します -

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

URL を取得します (dynamicLink.url)。このブロックでは、これであるディープ リンク URL を取得します
-> my-web-url (これは、上記の長いダイナミック リンクのリンク パラメータの一部です)。

私の実際の要件は、URL に関連付けられた URI スキーム myappscheme://some-tag/some-tag-id を取得することです。どうすればこれを入手できますか?

私も以下を試しました-

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

どちらの場合も、URI スキームを取得できません。

助けてください。

4

2 に答える 2

1

あなたがやろうとしていることは、現在、Dynamic Links を使用する iOS では実行できません。URIスキーム( myappscheme://) と URIパス( ) を混同していmyappscheme://some-tag/some-tag-idます。

私の知る限り、iOS の Dynamic Links は (パラメーターを介してius) スキームのみをサポートします。Android は (パラメーターを介して) URI パスをサポートしているため、これは混乱を招きalます。iOS の場合、ディープ リンク URL に基づいてルーティングを行う必要があります。

または、 Branch.ioのようなより堅牢なディープ リンク プラットフォームを調査することもできます(完全な開示: 私は Branch チームに所属しています)。Branch は、カスタム URI パスを含む、任意のデータを含むカスタム リンク パラメーターをサポートしています。

于 2016-10-07T17:50:07.693 に答える
1

アレックスの言ったことは正しい。不可能ですが、これには簡単な回避策があります。

提供した https リンク URL に、クエリ パラメータとして目的のカスタム URL ディープ リンクを追加しました。

したがって、あなたの場合、次のようになります

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

continueuseractivity コールバックがアプリに到達すると、クエリ文字列から myCustomSchemeUri パラメーターを取得して、好きなように使用できます。

このようなもの:

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

そして、これはパラメータを取得するためにNSURLのカテゴリとして書いたメソッドです

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

この答えは少し遅れているかもしれませんが、今日この問題に遭遇しました。とにかく、これが他の誰かに役立つことを願っています。

乾杯、

アレッシオ

于 2017-07-14T03:30:51.283 に答える