web-dev-qa-db-ja.com

ユーザーがキャンセルした後、iOSSafariはURLスキームを認識しません

最近、Safariの奇妙な動作に気づきました。

アプリのURLスキームを登録し、Safariにmyapp://と入力します。これにより、アプリがすぐに起動します。

次に、Safariに戻り、Safariにもう一度myapp://と入力すると、今度はプロンプトが表示されます"このページを" myapp "で開きますか?"キャンセルまたは開く。

[開く]をタップするとアプリが起動し、その後同じアラートが表示されます。キャンセルをタップしようとすると、アプリが起動しません。これは予想されます。

ただし、URLバーにもう一度myapp://を入力すると、プロンプトが表示されます"ページを開くことができません" "アドレスが無効なため、Safariはページを開くことができません。"

これは、Safariを強制終了して再起動するか、別のタブを開くまで、以降のすべての試行で同じように失敗します。

これは、YoutubeとEvernoteの場合と同じ動作です。私の推測では、ユーザーがキャンセルをタップすると、SafariはそのURLを無効なURLとしてキャッシュしました。この動作に関する公式ドキュメントはありますか?

IOS8.1.2およびiOS6.1.3でBbserved

24
tzl

9.1では、問題はまだ存在します。私にとっての解決策は、サファリを再起動することです(バックグラウンドからクリアするには上にスワイプします)。

12
Jinghan Wang

私も同じ問題を抱えていました。キャンセルすると、そのエラーが発生します。

私がしたことは、タイムスタンプ付きの追加のパラメーターを送信することでした。そのため、Safariはそれをキャッシュしませんでした。したがって、最後のパラメーターの後に、1970年1月1日の午前0時からのミリ秒数でfooパラメーターを追加しました。as3を使用しますが、これはすべての開発者が読み取れるはずです。

var foo:Number = new Date().time; //The number of milliseconds since midnight January 1, 1970
var urlRequest:URLRequest = new URLRequest(url+"&foo="+foo);
4
APvG

サファリアプリを再起動するか、新しいタブを開くと、この問題が解決しました

1
tzl

URLを呼び出すときは、タイムスタンプなどの一意の値をURL呼び出しに追加します

double currentt = [[NSDate new] timeIntervalSince1970];
NSTimeInterval differ= [[NSDate dateWithTimeIntervalSince1970:currentt] timeIntervalSinceDate:[NSDate dateWithTimeIntervalSince1970:1296748524]];
NSLog(@"differ: %f", differ);
NSString *url =[NSString stringWithFormat: @"https://thisisawebsite&timestamp=%f", differ];

[OK]をクリックするまで、常にポップアップが表示されます

0
HannahCarney

AppDelegateに次のコードを追加すると、私の問題が解決しました。それがあなたにも役立つことを願っています。

func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool {
    let notification = Notification(name: Notification.Name(rawValue: "AppNotificationLaunchString"), object: nil, userInfo: [UIApplicationLaunchOptionsKey.url:url])
    NotificationCenter.default.post(notification)
    return true
}
0
Himani C.