最近、Safariの奇妙な動作に気づきました。
アプリのURLスキームを登録し、Safariにmyapp://
と入力します。これにより、アプリがすぐに起動します。
次に、Safariに戻り、Safariにもう一度myapp://
と入力すると、今度はプロンプトが表示されます"このページを" myapp "で開きますか?"キャンセルまたは開く。
[開く]をタップするとアプリが起動し、その後同じアラートが表示されます。キャンセルをタップしようとすると、アプリが起動しません。これは予想されます。
ただし、URLバーにもう一度myapp://
を入力すると、プロンプトが表示されます"ページを開くことができません" "アドレスが無効なため、Safariはページを開くことができません。"
これは、Safariを強制終了して再起動するか、別のタブを開くまで、以降のすべての試行で同じように失敗します。
これは、YoutubeとEvernoteの場合と同じ動作です。私の推測では、ユーザーがキャンセルをタップすると、SafariはそのURLを無効なURLとしてキャッシュしました。この動作に関する公式ドキュメントはありますか?
IOS8.1.2およびiOS6.1.3でBbserved
9.1では、問題はまだ存在します。私にとっての解決策は、サファリを再起動することです(バックグラウンドからクリアするには上にスワイプします)。
私も同じ問題を抱えていました。キャンセルすると、そのエラーが発生します。
私がしたことは、タイムスタンプ付きの追加のパラメーターを送信することでした。そのため、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);
サファリアプリを再起動するか、新しいタブを開くと、この問題が解決しました
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×tamp=%f", differ];
[OK]をクリックするまで、常にポップアップが表示されます
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
}