如何在Facebook应用程序中以编程方式打开设置?

And*_*kha 75 objective-c ios

我需要在我的应用程序中以编程方式打开设置.我搜遍了SO,但到处都有人说这是不可能的.但今天我看到它在Facebook应用程序中实现.有一个按钮UIAlertView,当你点击它时,你打开设置.所以确实可以打开设置,我亲眼目睹了这一点.但是怎么做呢?有谁知道Facebook如何做到这一点?

Vit*_*Ziv 138

在iOS 8上,您可以以编程方式打开设置!

这是代码:

- (void)openSettings
{
    BOOL canOpenSettings = (&UIApplicationOpenSettingsURLString != NULL);
    if (canOpenSettings) {
        NSURL *url = [NSURL URLWithString:UIApplicationOpenSettingsURLString];
        [[UIApplication sharedApplication] openURL:url];
    }
}
Run Code Online (Sandbox Code Playgroud)

如果您的应用拥有自己的设置套装,则会打开设置,显示您应用的设置.如果您的应用没有设置包,则会显示主设置页面.

  • 注意:如果您尚未设置设置包,则此代码仍会打开应用程序设置(带有"通知"和"使用蜂窝数据"),而不是通用设置. (7认同)
  • 有谁知道如何打开设置应用程序而不是个人设置页面?Facebook打开"设置"应用,无需指向个人设置页面. (3认同)
  • 你能告诉我如何在xcode上删除app设置包吗?我总是去应用设置而不是一般设置 (2认同)

rck*_*nes 54

你不能,没有API调用来做到这一点.

只有系统对话框,来自Apple Frameworks的对话框才能打开设置应用程序.在iOS 5中有一个应用程序URL方案来打开系统对话框,但Apple稍后将其删除.


随着iOS 8的推出,您可以在应用页面上打开设置对话框.

if (&UIApplicationOpenSettingsURLString != NULL) {
   NSURL *url = [NSURL URLWithString:UIApplicationOpenSettingsURLString];
    [[UIApplication sharedApplication] openURL:url];
}
else {
  // Present some dialog telling the user to open the settings app.
}
Run Code Online (Sandbox Code Playgroud)

  • 嘿伙计们,在iOS 8上以编程方式打开设置是可能的,请参阅我的回答 (9认同)
  • 好吧,但Facebook DID IT (5认同)
  • 我很确定这只是应用程序的正常部分,这就像设置页面一样.你懂? (3认同)
  • 这是因为他们与Apple和Apple在iOS中集成了服务非常接近.这并不意味着你可以做到!他们甚至可能会被允许调用一些私有API来打开设置应用程序. (2认同)
  • @VitoZiv这是真的,但当问到这个问题我的回答是正确的. (2认同)
  • @FelipeBaytelman是的你是对的,但当我回答这个问题时,这是正确的. (2认同)

Sta*_*raj 32

在iOS 8上,您可以以编程方式打开设置!

以下是"设置"应用中当前已知网址的列表:

- (void) openSettings
{
if (&UIApplicationOpenSettingsURLString != nil)
    [[UIApplication sharedApplication] openURL:[NSURL URLWithString:UIApplicationOpenSettingsURLString]];
else
    NSLog(@"UIApplicationOpenSettingsURLString is not available in current iOS version");
}    
Run Code Online (Sandbox Code Playgroud)
  • 首选项:根=通用及路径=关于
  • 首选项:根=通用及路径= ACCESSIBILITY
  • 首选项:根= AIRPLANE_MODE
  • 首选项:根=通用及路径= AUTOLOCK
  • 首选项:根=通用及路径= USAGE/CELLULAR_USAGE
  • 首选项:根=亮度
  • 首选项:根=通用及路径=蓝牙
  • 首选项:根=通用及路径= DATE_AND_TIME
  • 首选项:根= FACETIME
  • 首选项:根=通用
  • 首选项:根=通用及路径=键盘
  • 首选项:根= CASTLE
  • 首选项:根=城堡&路径= STORAGE_AND_BACKUP
  • 首选项:根=通用及路径= INTERNATIONAL
  • 首选项:根= LOCATION_SERVICES
  • 首选项:根= ACCOUNT_SETTINGS
  • 首选项:根= MUSIC
  • 首选项:根=音乐与路径= EQ
  • 首选项:根=音乐与路径= VolumeLimit
  • 首选项:根=通用及路径=网络
  • 首选项:根= NIKE_PLUS_IPOD
  • 首选项:根= NOTES
  • 首选项:根= NOTIFICATIONS_ID
  • 首选项:根=电话
  • 首选项:根=照片
  • 首选项:根=通用及路径= ManagedConfigurationList
  • 首选项:根=通用及路径=复位
  • 首选项:根=声音和路径=铃声
  • 首选项:根= Safari浏览器
  • 首选项:根=通用及路径=助理
  • 首选项:根=声音
  • 首选项:根=通用及路径= SOFTWARE_UPDATE_LINK
  • 首选项:根= STORE
  • 首选项:根= TWITTER
  • 首选项:根=通用及路径= USAGE
  • 首选项:根= VIDEO
  • 首选项:根=通用及路径=网络/ VPN
  • 首选项:根=壁纸
  • 首选项:根= WIFI
  • 首选项:根= INTERNET_TETHERING

  • 只需将prefs替换为iOS 10的App-Prefs.上面的代码适用于iOS 8,9,10. (6认同)
  • 你可以链接到任何官方的Apple源代码,还是通过某种方式探测它? (2认同)
  • 你的应用会因为使用 prefs:root 被苹果拒绝 (2认同)

Ano*_*oah 19

Vito Ziv在Swift中的回答.

func openSettings() {
    UIApplication.shared.open(URL(string: UIApplicationOpenSettingsURLString)!, completionHandler: nil)

}
Run Code Online (Sandbox Code Playgroud)


Ric*_*ble 13

此问题所引用的Facebook应用中的警报是一个标准警报,当您在Info.plist文件中将UIRequiresPersistentWiFi设置为YES并且用户在没有网络连接的情况下启动您的应用时,iOS会自动显示警报.

总结一下这里的讨论:

  • 您无法使用URL来访问"设置"应用的根级别.
  • 可以使用iOS 8中的UIApplicationOpenSettingsURLString将用户发送到"设置"应用的应用部分.
  • 您的应用可以显示与Facebook相同的提醒,通过将UIRequiresPersistentWiFi设置为YES,可以打开"设置"应用的根级别.


Aec*_*Liu 10

关于prefs:root=和的备忘录Prefs:root.

是的,我们的应用程序今天因Appleprefs:root=App-Prefs:rootURL计划而被Apple拒绝(2018-06-29).它们是私有API.

苹果拒绝了


对于Swift 4,

只有UIApplication.openSettingsURLString是用于打开"设置"的公共API.


Joa*_*nes 7

 if (&UIApplicationOpenSettingsURLString != NULL)
Run Code Online (Sandbox Code Playgroud)

在iOS 8+中始终为TRUE.所以你可以像这样编辑

NSURL *url = [NSURL URLWithString:UIApplicationOpenSettingsURLString];

if ([[UIApplication sharedApplication] canOpenURL:url]) {
    [[UIApplication sharedApplication] openURL:url options:@{} completionHandler:nil];
}
Run Code Online (Sandbox Code Playgroud)

(适用于iOS 10的新openURL)


小智 5

如果您想打开应用程序设置,您需要使用 UIApplicationOpenSettingsURLString 编写方法。

fileprivate func openSettings() {
  UIApplication.shared.open(URL(string: UIApplicationOpenSettingsURLString)!)      
}
Run Code Online (Sandbox Code Playgroud)

如果您需要将打开许多设置之一,则需要使用此功能

fileprivate func openSettings() {
  UIApplication.shared.open(URL(string:"App-Prefs:root=General")!)
}
Run Code Online (Sandbox Code Playgroud)