iOS เปิดตัวการตั้งค่า -> โครงการ URL ข้อ จำกัด


86

ฉันเพิ่งค้นพบโครงร่างURL การตั้งค่าที่กำหนดเองของ iOS5ซึ่งสามารถอธิบายรายละเอียดได้ที่เว็บไซต์ที่ยอดเยี่ยมนี้

ฉันพบว่าสิ่งนี้ใช้งานได้โดยนำผู้ใช้ไปที่แอปการตั้งค่าจากแอปพลิเคชันของฉัน:

[[UIApplication sharedApplication] openURL:
       [NSURL URLWithString:@"prefs:root=General"]];

แต่ดูเหมือนจะไม่สามารถกำหนดเส้นทางไปยังเส้นทางข้อ จำกัดโดยตรงผ่านpathพารามิเตอร์:

[[UIApplication sharedApplication] openURL:
   [NSURL URLWithString:@"prefs:root=General&path=Restrictions"]];

มีใครพบเอกสารเกี่ยวกับเรื่องนี้หรือสามารถทำงานนี้ได้บ้าง

ข้อมูลเชิงลึกใด ๆ จะได้รับการชื่นชมอย่างมาก ฉันกำลังพยายามให้ผู้ใช้เปิดใช้งานการซื้อในแอปและไม่อยากให้ผู้ใช้คลิกข้อ จำกัด ด้วยตนเอง (ไม่ชัดเจนมาก)


2
มีใครทราบ url สำหรับ Touch ID & Passcode บ้าง
Fabian Köbel

1
ใช้สิ่งนี้สำหรับ touch id: prefs: root = TOUCHID_PASSCODE ( stackoverflow.com/questions/35410746/… )
Fabian Köbel

คำตอบ:


144

AS @Nix Wangคำตอบนี้ไม่ทำงานในiOS 10


คำเตือน: วิธีนี้ใช้ไม่ได้กับอุปกรณ์ที่ใช้ iOS 5.1 ขึ้นไป - ดูความคิดเห็นของ Hlung ด้านล่าง

เป็นไปได้ว่าpathคอมโพเนนต์จะมีชื่อแตกต่างจากส่วนจริง แต่ก็เป็นไปได้เช่นกันว่าคุณไม่สามารถเข้าถึงส่วนนั้นได้โดยตรงจาก URL ฉันพบรายการ URL ที่เป็นไปได้และไม่มีข้อ จำกัด อยู่อาจจะยังไม่พบ

รายการ URL ที่รู้จักในปัจจุบันในแอปการตั้งค่า:

  • prefs: root = General & path = About
  • prefs: root = General & path = ACCESSIBILITY
  • prefs: root = AIRPLANE_MODE
  • prefs: root = General & path = AUTOLOCK
  • prefs: root = General & path = USAGE / CELLULAR_USAGE
  • prefs: root = ความสว่าง
  • prefs: root = General & path = Bluetooth
  • prefs: root = General & path = DATE_AND_TIME
  • prefs: root = FACETIME
  • prefs: root = ทั่วไป
  • prefs: root = General & path = Keyboard
  • prefs: root = CASTLE
  • prefs: root = CASTLE & path = STORAGE_AND_BACKUP
  • prefs: root = General & path = INTERNATIONAL
  • prefs: root = LOCATION_SERVICES
  • prefs: root = ACCOUNT_SETTINGS
  • prefs: root = MUSIC
  • prefs: root = MUSIC & path = EQ
  • prefs: root = MUSIC & path = VolumeLimit
  • prefs: root = General & path = Network
  • prefs: root = NIKE_PLUS_IPOD
  • prefs: root = NOTES
  • prefs: root = NOTIFICATIONS_ID
  • prefs: root = โทรศัพท์
  • prefs: root = รูปภาพ
  • prefs: root = General & path = ManagedConfigurationList
  • prefs: root = General & path = รีเซ็ต
  • prefs: root = Sounds & path = Ringtone
  • prefs: root = Safari
  • prefs: root = General & path = Assistant
  • prefs: root = เสียง
  • prefs: root = General & path = SOFTWARE_UPDATE_LINK
  • prefs: root = STORE
  • prefs: root = TWITTER
  • prefs: root = General & path = USAGE
  • prefs: root = VIDEO
  • prefs: root = General & path = Network / VPN
  • prefs: root = วอลล์เปเปอร์
  • prefs: root = WIFI
  • prefs: root = INTERNET_TETHERING

54
เพียงคำเตือนที่ดีidownloadblog.com/2011/11/29/iphone-5-1-disables-shortcutsกล่าวว่ารูปแบบ URL ทั้งหมดในการตั้งค่า iOS จะถูกลบออกใน iOS5.1 (ดังนั้น url เช่น prefs: root = General & path = Network จะไม่ทำงานอีกต่อไป) ดังนั้นโปรดทราบ
Hlung

3
พวกเขาไม่ได้ถูกลบออกอย่างสมบูรณ์คุณเพียงแค่ใส่ลิงค์ URL เหล่านี้ในปุ่มใน UIAlertView ดังนั้นเพียงแค่ใส่คำเตือนใน UIAlertView ว่าแอปจะไปที่พื้นหลังและการตั้งค่าจะเปิดขึ้นจากนั้นตกลงและยกเลิกเป็นต้น
zambono

4
มันใช้งานไม่ได้อีกต่อไปมันใช้งานได้กับหนึ่งในแอพของฉันในขณะที่กลับมา แต่ไม่ทำงานอีกต่อไป
zambono

5
ใน iOS8 คุณสามารถเปิดแอปการตั้งค่าในตัวด้วย url:[NSURL URLWithString:UIApplicationOpenSettingsURLString]
Jason Moore

2
โปรดแก้ไข / ทางเลือกอื่น ๆ สำหรับ ios10
ranjit.x.singh

48

ใน iOS8 คุณสามารถเปิดแอปการตั้งค่าในตัวด้วย:

NSURL *url = [NSURL URLWithString:UIApplicationOpenSettingsURLString];
if ([[UIApplication sharedApplication] canOpenURL:url]) {
   [[UIApplication sharedApplication] openURL:url];
}

สตริง URL @"app-settings:"ที่แท้จริงคือ ฉันพยายามต่อท้ายส่วนต่างๆเข้ากับสตริง ("Bluetooth", "GENERAL" ฯลฯ ) แต่ดูเหมือนว่าการเชื่อมโยงกับหน้าจอการตั้งค่าหลักเท่านั้น โพสต์คำตอบหากคุณพบว่าเป็นอย่างอื่น


10
นั่นเป็นเพราะการโทรนั้นเป็น URL การเปิดการตั้งค่า จะเปิดการตั้งค่าที่กำหนดเองของแอปหากมีอยู่ หากไม่เป็นเช่นนั้นเพียงแค่เปิดแอปการตั้งค่าที่หน้าจอหลัก developer.apple.com/library/ios/documentation/UIKit/Reference/…
JAL

1
คำตอบที่ยอดเยี่ยมหากแอปของคุณมีการตั้งค่าเฉพาะที่คุณต้องการเปิด / ปิด ทั้งหมดในที่เดียวและไม่ต้องนำทางผู้ใช้ผ่านการตั้งค่าเพื่อไปยังการกำหนดค่าที่ต้องการ ขอบคุณ!
kyleturner

1
@ FabianKöbelคุณสามารถหา TouchID & Passcode ได้หรือไม่?
ShayanK

1
@AspersionCast: คุณสามารถใช้สิ่งนี้: prefs: root = TOUCHID_PASSCODE ( stackoverflow.com/questions/35410746/… )
Fabian Köbel

ดูเหมือนจะเป็นวิธีเดียวที่ Apple อนุมัติในปัจจุบันในการเปิดแอปการตั้งค่า
u2Fan

42

หากคุณเพิ่มรูปแบบ URL คำนำหน้าลงในแอป iOS ของคุณจะทำให้คุณสามารถใช้รูปแบบทั้งหมดที่เราทำได้ใน iOS 5 ที่ฉันได้ทดสอบบน iOS 9 แต่ฉันคิดว่ามันจะใช้ได้กับเวอร์ชันเก่าด้วย


เคล็ดลับนี้ใช้ได้เฉพาะกับการเริ่ม iOS 8 โดยที่ไม่จำเป็นต้องใช้
Valeriy Van

1
แต่เช่นเดียวกันใน iOS 8 คุณไม่ได้รับอนุญาตให้เปิดการตั้งค่า WiFi เช่นหากคุณไม่เพิ่ม URL นี้ให้กับแอปพลิเคชันของคุณ
Pedro Tôrres

ใช่คุณถูก. ไม่ได้คิดเกี่ยวกับกรณีการใช้งานนี้
Valeriy Van

9
@conorgriffin สำหรับคุณและใครก็ตามที่สงสัยว่าการตั้งค่าอยู่ภายใต้: เป้าหมาย | (ใบสมัคร) | ข้อมูล | ประเภท URL | +
Kevin Sylvestre

มีคนบอกว่าเขาถูกปฏิเสธเนื่องจากใช้ url "prefs: root" stackoverflow.com/questions/8246070/…
Hlung

33

อัปเดต:

prefs: จะไม่ทำงานตั้งแต่ iOS 10


4
ทางเลือกคืออะไร?
OXXY

1
มันบ้ามากเนื่องจาก Apple Doc อย่างเป็นทางการนี้ ( developer.apple.com/library/ios/qa/qa1924/_index.html ) จงใจใส่ปัญหาที่ต้องการและลงวันที่ 8/2/2016
daspianist

1
เอกสารดังกล่าวบอกว่าให้ใช้สำหรับการตั้งค่าแป้นพิมพ์เท่านั้น (สิ่งอื่นนอกเหนือจากการใช้งานเฉพาะนั้นถือเป็นการละเมิด)
ปีเตอร์จอห์นสัน

น่าเสียดายที่ดูเหมือนจะใช้งานไม่ได้แม้แต่กับการตั้งค่าแป้นพิมพ์ใน iOS 10
Intrications

4
แม้ว่าจะprefs:ไม่ได้ผลอีกต่อไป แต่สิ่งต่อไปนี้ (อย่างน้อยก็ในการเปิดทั่วไป):App-Prefs::root=Settings&path=General
daspianist

22

ใช่เห็นสิ่งนี้ (และอื่น ๆ อีกมากมาย) แม้กระทั่งนำไปใช้ในแอปพลิเคชันทดสอบ จำเป็นต้องได้รับคำสรุปจาก Apple จริงๆ แต่ความเห็นที่เป็นเอกฉันท์ของชุมชนคือ Apple ไม่อนุญาตใน 5.1 หลังจากที่มีการ "ค้นพบ / เผยแพร่" ต่อสาธารณะดังนั้นแอปพลิเคชันที่มีคำอธิบายนั้นจะไม่ได้รับการยอมรับ

อัปเดต 08/01/12:ถาม Apple ผ่านบัญชีนักพัฒนาของฉันว่ามีวิธีเปิดกล่องโต้ตอบการตั้งค่า WiFi โดยทางโปรแกรมหรือไม่ นี่คือคำตอบ:

"วิศวกรของเราได้ตรวจสอบคำขอของคุณแล้วและได้ข้อสรุปว่าไม่มีวิธีที่รองรับเพื่อให้บรรลุฟังก์ชันที่ต้องการเนื่องจากการกำหนดค่าระบบการจัดส่งในปัจจุบัน"


9
ฉันขอแนะนำให้ทุกคนที่ต้องการคุณสมบัตินี้บันทึกรายงานข้อบกพร่องอย่างเป็นทางการ ยิ่งมีการรายงานมากเท่าไหร่ก็จะยิ่งมองเห็นได้มากขึ้นและเป็นโอกาสที่ดีขึ้นที่โซลูชันที่รองรับอาจถูกนำเสนอในอนาคต bugreport.apple.com
Matt Connolly

18

ในiOS 9ใช้งานได้อีกครั้ง!

ในการเปิดการตั้งค่า> ทั่วไป> คีย์บอร์ดฉันใช้:

prefs:root=General&path=Keyboard

ยิ่งไปกว่านั้นคุณสามารถไปที่คีย์บอร์ดได้ไกลขึ้น:

prefs:root=General&path=Keyboard/KEYBOARDS

ฉันเพิ่งสังเกตเห็นสิ่งนี้ในแอป PopKey ฉันลองใช้ url สำหรับการตั้งค่า> การตั้งค่า Wi-Fi แล้วก็ใช้ได้เช่นกัน หวังว่าสิ่งนี้จะยังคงอยู่
Jamie McDaniel

จำเป็นต้องเพิ่มรูปแบบเหล่านี้LSApplicationQueriesSchemesในinfo.plist?
Warpling

2
ไม่พวกเขาไม่ทำ เพียงแค่ใช้กับ openURL: method
Mikhail

1
ฉันพยายามใช้สิ่งนี้เพื่อเชื่อมโยงไปยังการตั้งค่าจากหน้าเว็บและดูเหมือนว่าจะใช้งานได้ใน Safari บน iPhone แต่ไม่ใช่ iPad ทั้งคู่อยู่บน 9.0.2 อย่างจริงจัง Apple?
Randy H.

3
ยังคงต้องเพิ่มรูปแบบ URL prefs เพื่อกำหนดเป้าหมาย
shim

7

ฉันต้องการเปิดเมนูบลูทู ธ ในแอปพลิเคชันการตั้งค่าและเส้นทางด้านบน (prefs: root = General & path = Bluetooth) ไม่ได้ผลสำหรับฉัน สิ่งที่ได้ผลสำหรับฉันคือ

UIApplication.sharedApplication().openURL(NSURL(string:"prefs:root=Bluetooth")!)

ตรวจสอบให้แน่ใจว่าคุณได้กำหนดโครงร่างprefsURL ไว้ก่อน


เนื่องจากเมนูบลูทู ธ ถูกย้ายไปมาใน iOS เวอร์ชันล่าสุด ก็ตอนนี้การตั้งค่าระดับบนสุดไม่อยู่ภายใต้ทั่วไป
เนท

@ Imran: คุณลืมprefs-stuff
Michael Dorner

5

โซลูชันสำหรับ iOS10.0 ใช้งานได้ดี

NSURL *URL = [NSURL URLWithString:@"App-prefs:root=TWITTER"];
[[UIApplication sharedApplication] openURL:URL options:@{} completionHandler:nil];

นี่คือ Legit? การส่งแอปที่ประสบความสำเร็จไม่ได้หมายความว่านี่เป็นสิ่งที่ถูกต้อง มันอาจจะล้มเหลวในที่สุดในอนาคต ..
Stas

@Stas: ไม่ไม่ใช่เพราะเป็น API ส่วนตัว
Tejas K

4

ใน iOS10 คุณสามารถใช้ได้

UIApplication.sharedApplication().openURL(NSURL(string:"App-Prefs:root")!) 

เพื่อเปิดการตั้งค่าทั่วไป

นอกจากนี้คุณยังสามารถเพิ่ม URL ที่รู้จัก (คุณสามารถดูได้ในคำตอบที่ได้รับการโหวตมากที่สุด) เพื่อเปิดการตั้งค่าเฉพาะ ตัวอย่างเช่นด้านล่างนี้จะเปิด touchID และ passcode

UIApplication.sharedApplication().openURL(NSURL(string:"App-Prefs:root=TOUCHID_PASSCODE")!)

1
"App-Prefs: root = TOUCHID_PASSCODE" ไม่ทำงานบน iOS 11 มีวิธีแก้ปัญหาอื่นหรือไม่?
myaug

App-Prefsเป็น API ส่วนตัวซึ่งจะนำไปสู่การปฏิเสธแอประหว่างการตรวจสอบ
Tejas K

2

นี่คือสิ่งอื่นที่ฉันพบ:

  1. หลังจากที่ผมมี "การตั้งค่า" โครงการ URL ที่กำหนด"การตั้งค่า: ราก = Safari และเส้นทาง = ContentBlockers"เป็นคนที่ทำงาน Simulator (iOS 9.1 ภาษาอังกฤษ ) แต่ไม่ได้ทำงานกับ Simulator (จีนแผ่นดินใหญ่) เพียงข้ามไปที่ Safari แต่ไม่ใช่ตัวบล็อกเนื้อหา หากแอปของคุณเป็นสากลโปรดใช้ความระมัดระวัง
    อัปเดต: ไม่รู้ทำไมตอนนี้ฉันไม่สามารถเข้าสู่ ContentBlockers ได้อีกต่อไปรหัสเดียวกันเวอร์ชันเดียวกันใช้ไม่ได้แล้ว :(

  2. เกี่ยวกับการเบี่ยงเบนจริง (ของฉันคือ iPhone 6S และ iPad mini 2) "Safari" ควรเป็น "SAFARI" , "Safari" ไม่ทำงานบนอุปกรณ์จริง "SAFARI" กำลังทำงานกับโปรแกรมจำลอง:

    #if arch(i386) || arch(x86_64)
        // Simulator
        let url = NSURL(string: "prefs:root=Safari")!
    #else
        // Device
        let url = NSURL(string: "prefs:root=SAFARI")!
    #endif
    
    if UIApplication.sharedApplication().canOpenURL(url) {
        UIApplication.sharedApplication().openURL(url)
    }
    
  3. จนถึงขณะนี้ไม่พบความแตกต่างระหว่าง iPhone และ iPad


คุณเคยทำงานนี้อีกครั้งหรือไม่? น่าเสียดายถ้าไม่!
Ryan Brodie

@RyanBrodie คำว่า "น่าเสียดาย" หมายความว่าอย่างไร?
Kaiyuan Xu

ว่าโชคร้ายมากจะเป็นการดีที่จะเชื่อมโยงโดยตรงกับการตั้งค่า Content Blocker ของ Safari
Ryan Brodie

6
@RyanBrodie แม้ว่าจะใช้งานได้ แต่ฉันขอแนะนำว่าอย่าใช้กับ App Store Apps ตอนนี้ฉันเพิ่งได้รับ "ปฏิเสธ" จาก iTunes Connect เมื่อเช้านี้สำหรับ "prefs: root" เป็น API ส่วนตัว (มีแอป ใช้ prefs: root ใน App Store ... พระเจ้ารู้ว่าทำไม)
Kaiyuan Xu

ฉันไม่รู้เลยว่าขอบคุณมากสำหรับการแจ้งเตือน!
Ryan Brodie

2

ใช้งานได้ดีสำหรับการตั้งค่าการแจ้งเตือนแอปบน IOS 10 (ทดสอบแล้ว)

if(&UIApplicationOpenSettingsURLString != nil){
    [[UIApplication sharedApplication] openURL:[NSURL URLWithString:UIApplicationOpenSettingsURLString]];
}


0

ฉันกำลังอัปเดตข่าวหนึ่งที่นี่ การใช้ 'prefs:' เท่านั้นไม่ได้ถูกปฏิเสธโดย Apple ฉันทดสอบและตรวจสอบว่าได้รับการอนุมัติไปยัง App Store แล้ว (ในเดือนสิงหาคม 2016) ขอบคุณ.


ฉันใช้สิ่งนี้[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"prefs:root=DO_NOT_DISTURB"]];เพื่อเปิดการตั้งค่า DND ของอุปกรณ์ Apple จะปฏิเสธสิ่งนี้หรือไม่?
Shreyank

ผ่านการตรวจสอบแล้วเท่านั้นหรือยังใช้งานได้หรือไม่ ฉันหมายถึง openURL นำคุณไปสู่การตั้งค่าหรือไม่? มันไม่ได้ผลในด้านของฉัน
Ahmet Akkök
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.