我有一个VoIP应用程序,使用TCP服务唤醒来电.使用此代码片段创建TCP套接字:
CFReadStreamRef read = NULL;
CFWriteStreamRef write = NULL;
...
CFStreamCreatePairWithSocketToHost(NULL,(__bridge CFStringRef)shost, port, &read, &write);
self.read = (__bridge NSInputStream*)read;
self.write = (__bridge NSOutputStream*)write;
if (![self.read setProperty:NSStreamNetworkServiceTypeVoIP
forKey:NSStreamNetworkServiceType]){
[Log log:@"Could not set VoIP mode to read stream"];
}
if (![self.write setProperty:NSStreamNetworkServiceTypeVoIP
forKey:NSStreamNetworkServiceType]){
[Log log:@"Could not set VoIP mode to write stream"];
}
self.read.delegate = self;
self.write.delegate = self;
CFRelease(read);
CFRelease(write);
[self.read scheduleInRunLoop:[NSRunLoop mainRunLoop] forMode:NSDefaultRunLoopMode];
[self.write scheduleInRunLoop:[NSRunLoop mainRunLoop] forMode:NSDefaultRunLoopMode];
[self.read open];
[self.write open];
Run Code Online (Sandbox Code Playgroud)
我还设置了以下内容:
这应用程序处于前台时效果很好,甚至在后台运行良好几分钟,但几分钟后 …
每当我启动我的应用程序时,我都想确保苹果登录仍然有效,但我也希望能够向我的服务器证明这一点。
成功登录后,我可以ASAuthorizationAppleIDProvider.getCredentialState用来确定我的凭据对于后续登录是否仍然有效。
这工作正常,但无法向我的服务器证明此过程已成功执行,任何使用我的服务器 API 的人都可以告诉服务器不要担心,服务器将无法判断它是否是真正的客户端或不。
服务器还可以使用刷新令牌来验证用户是否仍然有效,方法是发出一个新的访问令牌(Apple 说每天不超过一次,但现在可以),但这也无济于事,因为我不希望密钥出现在客户端应用程序中,此外,即使我从客户端获得了一个新的访问令牌 - 服务器暂时无法使用它,因为当前不存在 API任何带有访问令牌的东西。
我需要的是一个新的身份验证令牌,但是 - 当ASAuthorizationController.performRequests()使用 Apple ID 请求调用时 - 用户界面再次显示,而不仅仅是ASAuthorizationControllerDelegate使用新的授权令牌调用。
我还尝试refresh在第二次登录尝试中将请求操作设置为:
let request = appleIDProvider.createRequest()
request.requestedOperation = .operationRefresh
Run Code Online (Sandbox Code Playgroud)
同样的结果,UI 仍然显示。
有没有办法在不显示 UI 的情况下使用 Apple ID 重新进行身份验证,并获得某种令牌,服务器可以使用该令牌来验证登录的真实性?
请不要建议超出范围的方法,例如在向服务器初始证明后涉及我自己的登录机制并让服务器从那时起使用刷新令牌的方法 - 我可以自己提出这些解决方案- 我正在寻找苹果登录方法解决方案。
我mediaSources在Mac OS X中加载属性时遇到错误.
我正在尝试使用MLMediaLibrary该类获取Apple Photos源代码.
我的应用程序是沙盒,并具有图片文件夹的只读权限.
我收到错误:
MLMediaLibrary错误获取远程对象代理:错误域= NSCocoaErrorDomain代码= 4097"连接到名为com.apple.MediaLibraryService的服务"UserInfo = {NSDebugDescription =连接到名为com.apple.MediaLibraryService的服务}
根据我的收集,错误4097是连接中断.
我对Swift不是很熟悉,但我确实使用目标C进行了完全相同的测试并获得了相同的结果.
我的猜测是我错过了某种权利.
这是我的(非常简化的)代码:
import Foundation
import MediaLibrary
public class MediaLibrary : NSObject{
var library : MLMediaLibrary!
private func loadSources(){
if let mediaSources = library.mediaSources {
for (ident, source) in mediaSources{
print("Identifier: \(ident)");
}
}
}
public override func observeValueForKeyPath(keyPath: String?, ofObject object: AnyObject?, change: [String : AnyObject]?, context: UnsafeMutablePointer<Void>) {
loadSources()
}
public override init(){
super.init()
let options : [String : AnyObject] …Run Code Online (Sandbox Code Playgroud) 我有一个应用程序已在AppStore中提供了一段时间了.
我可以从iTunes报告中看到它是使用Apple的批量购买程序购买的,但这很棒 - 我想知道某个设备是运行批量购买的应用程序还是标准的AppStore应用程序.
我试图在收据([[NSBundle mainBundle] appStoreReceiptURL])内窥探,但我找不到任何信息.
为此目的创建不同的捆绑ID不是一种选择,有点遗漏了VPP的想法,请 - 请不要提供它.
是否有编程方式来判断应用程序是否是使用VPP购买的?