[ios] iPhone에서 최초 앱 실행을 감지하는 방법
최초 출시를 어떻게 감지 할 수 있습니까?
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
// if very first launch than perform actionA
// else perform actionB
}
방법?
답변
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
if (![[NSUserDefaults standardUserDefaults] boolForKey:@"HasLaunchedOnce"])
{
[[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"HasLaunchedOnce"];
[[NSUserDefaults standardUserDefaults] synchronize];
}
return YES;
}
답변
에서 스위프트 3, 4는 이 시도 :
func isAppAlreadyLaunchedOnce()->Bool{
let defaults = UserDefaults.standard
if let isAppAlreadyLaunchedOnce = defaults.string(forKey: "isAppAlreadyLaunchedOnce"){
print("App already launched : \(isAppAlreadyLaunchedOnce)")
return true
}else{
defaults.set(true, forKey: "isAppAlreadyLaunchedOnce")
print("App launched first time")
return false
}
}
에서 스위프트 2 , 이것을 시도
func isAppAlreadyLaunchedOnce()->Bool{
let defaults = NSUserDefaults.standardUserDefaults()
if let isAppAlreadyLaunchedOnce = defaults.stringForKey("isAppAlreadyLaunchedOnce"){
print("App already launched : \(isAppAlreadyLaunchedOnce)")
return true
}else{
defaults.setBool(true, forKey: "isAppAlreadyLaunchedOnce")
print("App launched first time")
return false
}
}
UPDATE : – 들어 OBJ-C I이를 사용,
+ (BOOL)isAppAlreadyLaunchedOnce {
if ([[NSUserDefaults standardUserDefaults] boolForKey:@"isAppAlreadyLaunchedOnce"])
{
return true;
}
else
{
[[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"isAppAlreadyLaunchedOnce"];
[[NSUserDefaults standardUserDefaults] synchronize];
return false;
}
}
OBJ-C에 대한 참조 : https://stackoverflow.com/a/9964400/3411787
답변
이 목적을 위해 작은 라이브러리를 작성했습니다. 최초 출시인지 아니면이 버전인지, 사용자가 설치 한 이전 버전인지 알려줍니다. github에서 Apache 2 라이센스에 따라 cocoapod로 제공됩니다 : GBVersionTracking
당신은 단지 이것을 호출 application:didFinishLaunching:withOptions:
[GBVersionTracking track];
그리고 이것이 첫 번째 발사인지 확인하려면 어디서나 이것을 호출하십시오.
[GBVersionTracking isFirstLaunchEver];
그리고 비슷하게 :
[GBVersionTracking isFirstLaunchForVersion];
[GBVersionTracking currentVersion];
[GBVersionTracking previousVersion];
[GBVersionTracking versionHistory];
답변
스위프트 3.0-스위프트 5
확장 기능 추가
extension UIApplication {
class func isFirstLaunch() -> Bool {
if !UserDefaults.standard.bool(forKey: "hasBeenLaunchedBeforeFlag") {
UserDefaults.standard.set(true, forKey: "hasBeenLaunchedBeforeFlag")
UserDefaults.standard.synchronize()
return true
}
return false
}
}
그런 다음 코드에서
UIApplication.isFirstLaunch()
답변
Xcode 7 및 Swift 2.0의 또 다른 아이디어는 확장을 사용하는 것입니다.
extension NSUserDefaults {
func isFirstLaunch() -> Bool {
if !NSUserDefaults.standardUserDefaults().boolForKey("HasAtLeastLaunchedOnce") {
NSUserDefaults.standardUserDefaults().setBool(true, forKey: "HasAtLeastLaunchedOnce")
NSUserDefaults.standardUserDefaults().synchronize()
return true
}
return false
}
}
이제 앱 어디에서나 쓸 수 있습니다
if NSUserDefaults.standardUserDefaults().isFirstLaunch() {
// do something on first launch
}
개인적으로 다음과 같이 UIApplication 확장을 선호합니다.
extension UIApplication {
class func isFirstLaunch() -> Bool {
if !NSUserDefaults.standardUserDefaults().boolForKey("HasAtLeastLaunchedOnce") {
NSUserDefaults.standardUserDefaults().setBool(true, forKey: "HasAtLeastLaunchedOnce")
NSUserDefaults.standardUserDefaults().synchronize()
return true
}
return false
}
}
함수 호출이 더 설명하기 때문에 :
if UIApplication.isFirstLaunch() {
// do something on first launch
}
답변
아래 정적 메소드로 구현할 수 있습니다.
+ (BOOL)isFirstTime{
static BOOL flag=NO;
static BOOL result;
if(!flag){
if ([[NSUserDefaults standardUserDefaults] boolForKey:@"hasLaunchedOnce"]){
result=NO;
}else{
[[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"hasLaunchedOnce"];
[[NSUserDefaults standardUserDefaults] synchronize];
result=YES;
}
flag=YES;
}
return result;
}
답변
시작할 때 무언가를 저장 한 다음 존재하는지 확인해야합니다. 그렇지 않다면 처음입니다. “뭔가”는 파일, 데이터베이스 항목, 사용자 기본값 설정 …이 될 수 있습니다.