Closed paopao517 closed 2 years ago
時間久了忘了。你自己看看代碼。可以在App裏加一個額外的標記一同傳進後臺進程,但設置裏不存儲這個額外標記,於是後臺進程判斷這個標記決定是否繼續執行。實現很簡單的。
時間久了忘了。你自己看看代碼。可以在App裏加一個額外的標記一同傳進後臺進程,但設置裏不存儲這個額外標記,於是後臺進程判斷這個標記決定是否繼續執行。實現很簡單的。
感谢提供思路! 但是我看过后没什么头绪,这个标记是在 NETunnelProviderManager类中添加的吗?进入后台时,我把protocolConfiguration. serverAddress随便设置了之后并不起作用,是我的方法不对吗,还请大佬再指点一二。(好像没领悟大佬说的方法)
var manager: NETunnelProviderManager?
NETunnelProviderManager.loadAllFromPreferences { (managers, error) -> Void in
if let managers = managers {
if managers.count > 0 {
manager = managers[0]
}else{
// manager = self.createProviderManager()
}
manager?.isEnabled = true
manager?.protocolConfiguration?.serverAddress = "1234"
manager?.protocolConfiguration?.username = "1234"
manager?.saveToPreferences(completionHandler: { (error) -> Void in
if let error = error {
}else{
manager?.loadFromPreferences(completionHandler: { (error) -> Void in
})
}
})
}else{
}
}
protocolConfiguration
傳進來的數據是會全局保存的,不能使用 protocolConfiguration
, 後臺進程和 前臺 app 可以共享 組, group,你可以創建一個組,然在這個組下用 app 寫一個標記 flag=true ,後臺進程執行時讀取這個 flag,如果是true就允許繼續執行並將flag設置為 false,如果flag是false就直接退出執行,VPN就啓動失敗了。
或者在 protocolConfiguration
加一個時間戳,前臺app啓動傳參時寫入當前時間,後臺進程讀取這個時間戳,與當前時間比較,如果相差在一秒以内,則為 app 啓動的,繼續執行,否則直接報錯退出。這個方法只解決了只允許從app啓動的問題,要解決其它需求還是使用第一種最好。
请问 在系统设置的 VPN 选项中--- 如何让用户只能在APP中才能正确开启VPN,在系统设置里无法开启?