さて、私はそれについて多くの質問があることを知っていますが、それらはすべて昔からのものです。
そう。 Mapアプリがそれを行うので、それが可能であることを知っています。
マップアプリでこのアプリのローカライズをオフにすると、メッセージが送信され、[OK]を押すと[設定アプリ]が開きます。そして私の質問は、これはどのように可能ですか?自分のアプリから「設定アプリ」を開くにはどうすればよいですか?
基本的に同じことをする必要があります。ユーザーがアプリの場所をオフにすると、「設定アプリ」を開くことを知らせるメッセージが表示されます。
Karan Dua で述べたように、これは iOS8で可能になりましたUIApplicationOpenSettingsURLString
を使用して Appleのドキュメント を参照してください。
例:
Swift 4.2
UIApplication.shared.open(URL(string: UIApplication.openSettingsURLString)!)
In Swift 3:
UIApplication.shared.open(URL(string:UIApplicationOpenSettingsURLString)!)
In Swift 2:
UIApplication.sharedApplication().openURL(NSURL(string:UIApplicationOpenSettingsURLString)!)
Objective-Cでは
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:UIApplicationOpenSettingsURLString]];
iOS 8以前:
それはいけません。あなたが言ったように、これは何度も取り上げられており、位置情報サービスをオンにするように求めるポップアップは、アプリ自体ではなくAppleによって提供されます。そのため、設定アプリケーションを開くことができます。
関連する質問と記事は次のとおりです。
ユーザーがボタンを押したときに設定アプリを開くにはどうすればよいですか?
@ Yatheeshaless の answer から:
IOS8では設定アプリをプログラムで開くことができますが、以前のバージョンのiOSではできません。
スイフト:
UIApplication.sharedApplication().openURL(NSURL(string:UIApplicationOpenSettingsURLString)!)
スイフト4:
if let url = NSURL(string: UIApplicationOpenSettingsURLString) as URL? {
UIApplication.shared.openURL(url)
}
Swift 4.2(ベータ):
if let url = NSURL(string: UIApplication.openSettingsURLString) as URL? {
UIApplication.shared.open(url, options: [:], completionHandler: nil)
}
Objective-C:
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:UIApplicationOpenSettingsURLString]];
YES !!デバイス設定画面を起動できます。iOS 9.2でテスト済み
ステップ1. URLスキームを追加する必要があります
[プロジェクト設定]-> [情報]-> [URLタイプ]-> [新しいURLスキームの追加]に移動します
ステップ2.@davidcann によるプログラムによる設定の起動
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"prefs://"]];
また、適切な名前を使用するだけで、音楽、場所などのサブ画面を起動することもできます
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"prefs:root=MUSIC"]];
この完全な名前のリストを見る here Henri Normakが共有
更新:
コメントによると、誰もが私の申請提出ステータスのこの変更後に何が起こるか知りたいですか?
だからYES!! I got successful update submission and application is available on store without any complain.
確認のため、今朝ダウンロードして位置情報サービスを無効にしてからアプリを起動し、位置情報の許可を求められた後、アラートポップアップが表示され、設定->位置情報サービスページ->有効化->それでおしまい!!
![注意:アプリが拒否される可能性があります...承認されていても、この方法を使用すると将来のバージョンで拒否される可能性があります...]4
IOS 5.0以降でこれを使用できます。 これはもう機能しません。
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"prefs://"]];
iOS 10アップデート
Appleは、メインスレッドで非同期を開くようにメソッドを変更しました。ただし、今後はネイティブ設定でのみアプリ設定を開くことができます。
[[UIApplication sharedApplication] openURL:url options:@{} completionHandler:nil];
iOS 9アップデート
サブ設定メニューに直接移動できるようになりました。ただし、URLスキームを作成する必要があります。次の2つの方法で実行できます。
<key>CFBundleURLTypes</key> <array> <dict> <key>CFBundleTypeRole</key> <string>Editor</string> <key>CFBundleURLSchemes</key> <array> <string>prefs</string> </array> </dict> </array>
次に、コード:
Swift
UIApplication.sharedApplication().openURL(NSURL(string:"prefs:root=General&path=Keyboard")!)
Objective-c
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"prefs:root=General&path=Keyboard"]];
Swift 3/iOS 10+では、これは次のようになります
if let url = URL(string: "App-Prefs:root=LOCATION_SERVICES") {
UIApplication.shared.open(url, completionHandler: .none)
}
スウィフト3:
guard let url = URL(string: UIApplicationOpenSettingsURLString) else {return}
if #available(iOS 10.0, *) {
UIApplication.shared.open(url, options: [:], completionHandler: nil)
} else {
// Fallback on earlier versions
UIApplication.shared.openURL(url)
}
Swift 3で必要なのはこれだけです(ここでは、たとえば、アプリの通知にリダイレクトします):
if let url = URL(string: "App-Prefs:root=NOTIFICATIONS_ID&path=your app bundleID") {
if #available(iOS 10.0, *) {
UIApplication.shared.open(url, completionHandler: .none)
} else {
// Fallback on earlier versions
}
}
ソース: phynet Gist 。
これは、設定がバックグラウンドにある場合にのみ機能しました。アプリの通知設定にリダイレクトされますが、設定がバックグラウンドで実行されていない場合は、一般的な通知設定にリダイレクトされます。
UIApplicationOpenSettingsURLString
これは、以前に許可を許可した場合にのみ機能します。たとえば、場所、写真、連絡先、プッシュ通知アクセス。そのため、ユーザーからそのような許可がない場合:
iOS 10以降、
設定は開きますが、クラッシュします。その理由は、アプリの設定には何もありません。
以下のコードは、iOS設定内のアプリケーション設定を開きます。
NSURL *url = [NSURL URLWithString:UIApplicationOpenSettingsURLString];
if ([[UIApplication sharedApplication] canOpenURL:url]) {
[[UIApplication sharedApplication] openURL:url];
}
デバイスが利用できないため、iOS <10ではこれを確認できませんでした。
また、いくつかのGistから以下のコードを見つけることができ、iOS 10でも正常に動作します。しかし、これがAppleレビューチームによって承認されるかどうかはわかりません。
https://Gist.github.com/johnny77221/bcaa5384a242b64bfd0b8a715f48e69f
Swift 4.
「openURL」はiOS 10.0で非推奨になりました:代わりにopenURL:options:completionHandler:を使用してください
UIApplication.shared.open(URL.init(string: UIApplicationOpenSettingsURLString)! , options: [:], completionHandler: nil)
以下のコードを使用できます。
[[UIApplication sharedApplication]openURL:[NSURL URLWithString:UIApplicationOpenSettingsURLString]];
Swift 4
より安全な方法で設定を開くことを好みますが、
if let settingUrl = URL(string:UIApplicationOpenSettingsURLString) {
UIApplication.shared.open(settingUrl)
}
else {
print("Setting URL invalid")
}
Swift次の機能を使用して、Bluetoothページで設定アプリを開くことができます
func openSettingsApp(){
if let settings = NSURL(string: "prefs:root=Bluetooth") {
UIApplication.sharedApplication().openURL(settings)
}
}
繰り返しますが、これはアプリの設定を開きません。これは、Bluetoothへのディープリンクであるため、Bluetoothで設定アプリを開きます。
IOS 10でテスト済み。
NSArray* urlStrings = @[@"prefs:root=WIFI", @"App-Prefs:root=WIFI"];
for(NSString* urlString in urlStrings){
NSURL* url = [NSURL URLWithString:urlString];
if([[UIApplication sharedApplication] canOpenURL:url]){
[[UIApplication sharedApplication] openURL:url];
break;
}
}
ハッピーコーディング:)