目标C:iOS 14如何进行网络隐私权限检查
我正在使用IOT天气连接显示器(使用本地网络),该显示器使用iOS应用程序与路由器连接。显示器和iOS应用程序之间的连接由本地网络完成。连接时弹出允许本地网络隐私,但我想提前检查用户是否允许本地网络权限。我指的是这个 但是我正在寻找Objective-C中的代码。请帮助我目标C:iOS 14如何进行网络隐私权限检查,ios,objective-c,xcode,Ios,Objective C,Xcode,我正在使用IOT天气连接显示器(使用本地网络),该显示器使用iOS应用程序与路由器连接。显示器和iOS应用程序之间的连接由本地网络完成。连接时弹出允许本地网络隐私,但我想提前检查用户是否允许本地网络权限。我指的是这个 但是我正在寻找Objective-C中的代码。请帮助我 这是我用Swift编写的原始答案,您也可以从objc使用它,无需任何努力 但是,如果您有一个纯ObjC项目,并且不想添加swift文件,那么这是一种类似的方法,其工作原理相同: // LocalNetworkPrivacy.
这是我用Swift编写的原始答案,您也可以从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
注意:您必须设置NSLocalNetworkUsageDescription
,并将“\u lnp.\u tcp.”添加到NSBonjourServices
到您的Info.plist中