Objective C: iOS 14 如何做网络隐私权限检查
Posted
技术标签:
【中文标题】Objective C: iOS 14 如何做网络隐私权限检查【英文标题】:Objective C: iOS 14 How to do Network privacy permission check 【发布时间】:2021-04-12 12:11:03 【问题描述】:我正在使用通过 ios 应用与路由器连接的 IOT 天气连接显示器(使用本地网络)。显示器和 iOS 应用程序之间的连接是由本地网络完成的。连接时出现弹出窗口以允许本地网络隐私,但我想提前检查用户是否允许本地网络权限。我参考这个iOS 14 How to trigger Local Network dialog and check user answer? 和https://developer.apple.com/forums/thread/663858 但我正在寻找 Objecitve-C 中的代码。请帮我解决这个问题
【问题讨论】:
【参考方案1】:这是我用 Swift 编写的原始答案 - iOS 14 How to trigger Local Network dialog and check user answer?,您也可以毫不费力地从 objc 中使用它。
但是,如果您有一个纯 ObjC 项目并且不想添加 swift 文件,则使用类似的方法可以实现相同的效果:
// LocalNetworkPrivacy.h
@interface LocalNetworkPrivacy : NSObject
- (void)checkAccessState:(void (^)(BOOL))completion;
@end
// LocalNetworkPrivacy.m
#import <UIKit/UIKit.h>
#import "LocalNetworkPrivacy.h"
@interface LocalNetworkPrivacy () <NSNetServiceDelegate>
@property (nonatomic) NSNetService *service;
@property (nonatomic) void (^completion)(BOOL);
@property (nonatomic) NSTimer *timer;
@property (nonatomic) BOOL publishing;
@end
@implementation LocalNetworkPrivacy
- (instancetype)init
if (self = [super init])
self.service = [[NSNetService alloc] initWithDomain:@"local." type:@"_lnp._tcp." name:@"LocalNetworkPrivacy" port:1100];
return self;
- (void)dealloc
[self.service stop];
- (void)checkAccessState:(void (^)(BOOL))completion
self.completion = completion;
self.timer = [NSTimer scheduledTimerWithTimeInterval:2 repeats:YES block:^(NSTimer * _Nonnull timer)
if (UIApplication.sharedApplication.applicationState != UIApplicationStateActive)
return;
if (self.publishing)
[self.timer invalidate];
self.completion(NO);
else
self.publishing = YES;
self.service.delegate = self;
[self.service publish];
];
#pragma mark - NSNetServiceDelegate
- (void)netServiceDidPublish:(NSNetService *)sender
[self.timer invalidate];
self.completion(YES);
@end
使用方法:
LocalNetworkPrivacy* localNetworkPrivacy = [LocalNetworkPrivacy new];
[localNetworkPrivacy checkAccessState:^(BOOL granted)
NSLog(@"Granted: %@", granted ? @"YES" : @"NO");
];
注意:您必须设置
NSLocalNetworkUsageDescription
并添加“_lnp._tcp”。NSBonjourServices
到你的 Info.plist 中。
【讨论】:
以上是关于Objective C: iOS 14 如何做网络隐私权限检查的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Objective C 在 iOS 上本地下载和保存文件? [复制]
如何通过iOS Objective C中的appDelegate从另一个视图控制器重新加载表视图
如何通过NEHotspotHelper获取WiFi列表(IOS,objective-c)