web-dev-qa-db-ja.com

カスタムURLスキームの最大URL長

タイトルごとに、アプリでカスタムURLスキームを使用する場合、URLの最大長はどれくらいですか?

例えばURLを介して別のアプリを起動し、次のようなものを使用してデータのブロブを渡す場合

myappscheme:// some/path?data = 0123456789ABCDEF

uRLが切断される(またはシステムが他のアプリの起動をまったく拒否する)前に、その文字列を取得できる期間はどれくらいですか?

26
Shaggy Frog

残念ながら、答えは利用できないようです。 max lenは、私が見つけたiOSドキュメントでは特に定義されていません。

MSKのリンクで前述したように、URLの絶対文字列長ではなく、URLベースURLの長さに制限があります。したがって、これはおそらく最大で約2000文字の安全な賭けです。

ただし、テストでは上限がないようでした。 iOSでは365,535文字のURLを問題なく使用できました。ただし、Appleは引き続きサポートする必要はないので、「自己責任で使用」してください。ただし、多くのアプリが使用していることから、これは、アプリ間で大量のデータを含む情報を転送するためのもので、長さを短くする理由がないように思われるため、Appleはおそらく引き続きサポートします。

23
nycynik

上記の答えは誤解を招くものです。ドキュメントには実際には記載されていませんが、パスとファイル名には長さの制限があります。

ここで、ファイルのパスまたは名前が使用できる長さに制限があることがわかります。これらはsyslimits.hで確認できます。

#define NAME_MAX          255   /* max bytes in a file name */
#define PATH_MAX         1024   /* max bytes in pathname */

あなたはそれらを記録し、次のように自分で見ることができます:

NSLog(@"PATH MAX VALUE: %i", PATH_MAX)

パスは、UTF-8では1024バイトまたは1024文字に制限されています。パス内のファイル名は、UTF-8では255バイトまたは255文字に制限されています。

日本語の文字(URL /名前が大幅に長くなる)をエンコードしたファイルを処理しようとすると、この問題が発生しました。私の唯一の解決策は、現時点で名前を切り抜くことです。

このAppleサポートページで、一部の言語(韓国語や日本語など)の文字数が多くなり、問題が発生することについて説明しています(実際にはあまり役に立ちませんしかし、問題に対処する方法):

https://support.Apple.com/en-is/HT202808

4
yvanscher

私が作成した 制限を測定する簡単なプロジェクト 、現時点では、なんとメガバイトでも問題ないようです。明らかに、将来のためにその数に依存することは賢明ではありません。

3
zoul

(以下は 別の質問の回答 からの再投稿ですが、ここでも質問に直接回答します。)

Appleプラットフォーム(iOS/iPadOS/macOS/tvOS/watchOS))では、制限は2 GBの長いURLです Swiftのソースコードのこのコメント で見られるスキーム:

// Make sure the URL string isn't too long.
// We're limiting it to 2GB for backwards compatibility with 32-bit executables using NS/CFURL
if ( (urlStringLength > 0) && (urlStringLength <= INT_MAX) )
{
...

IOSでは、300MB以上の長さのURLでも受け入れられることをテストして確認しました。 Objective-Cでは次のような長いURLを試すことができます。

NSString *path = [@"a:" stringByPaddingToLength:314572800 withString:@"a" startingAtIndex:0];
NSString *js = [NSString stringWithFormat:@"window.location.href = \"%@\";", path];
[self.webView stringByEvaluatingJavaScriptFromString:js];

そして、それが成功した場合はキャッチします:

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
{
    NSLog(@"length: %@", @(request.URL.absoluteString.length));
    return YES;
}
1
Cœur

参照 http://en.wikipedia.org/wiki/URI_scheme

スキーム名は、文字で始まり、その後に文字、数字、プラス( "+")、ピリオド( "。")、またはハイフン( "-")の任意の組み合わせが続く一連の文字で構成されます。スキームでは大文字と小文字は区別されませんが、正規の形式は小文字であり、スキームを指定するドキュメントでは小文字を使用する必要があります。その後にコロン( ":")が続きます。

長さについては何もありません。

0
miaodadao