2015-03-27 12 views
8

Hành vi hiện tại của ứng dụng là, người dùng đã đăng nhập một lần sẽ không bị đăng xuất trừ khi người dùng nhấp vào đăng xuất một cách rõ ràng.Tìm hiểu lần đầu tiên mở ứng dụng khi được cập nhật lên phiên bản mới hơn

Tôi giữ người dùng đăng nhập, ngay cả khi người dùng đóng ứng dụng và mở lại ứng dụng.

Khi phiên bản mới hơn của ứng dụng của tôi được phát hành trong appstore, tôi muốn tìm hiểu xem người dùng đã cập nhật ứng dụng của tôi và mở ứng dụng lần đầu tiên chưa.

Lúc đó tôi muốn đăng nhập lại.

Có cách nào để tìm hiểu tại lần khởi chạy ứng dụng đầu tiên sau khi được cập nhật lên phiên bản mới nhất không?

Trả lời

3

Bạn có thể lưu CurrentVersion của bạn để NSUserDefaults và sử dụng phương pháp này để kiểm tra phiên bản của bạn mỗi khi ứng dụng tỉnh dậy:

#pragma mark - NSBundle Strings 
- (NSString *)currentVersion 
{ 
    return [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleShortVersionString"]; 
} 

nếu CurrentVersion khác với lưu trữ ... thời gian của mình để hiển thị tên đăng nhập! Hy vọng nó sẽ giúp bạn.

5

Tạo một số loại lược đồ của phiên bản. Lưu ý: Bạn có thể bật Xcode để tạo bản sao lưu và phiên bản bất cứ khi nào bạn thực hiện các thay đổi đáng kể cho mã.

Có một số cách có thể tạo ra một hằng số phiên bản, lưu nó và đọc lại.

Khi bạn cập nhật ứng dụng từ cửa hàng, có dữ liệu ứng dụng vẫn còn từ phiên bản ứng dụng đã cài đặt trước đó, bạn có thể đọc lại để xác định phiên bản và sau đó cập nhật dữ liệu liên tục đó chu kỳ cập nhật.

This answer là giải pháp rất phổ biến trong một câu hỏi tương tự khác.

Hoặc, hãy thử một cái gì đó như @ ObjC câu trả lời JitendraGandhi của dưới đây, hoặc nếu bạn sử dụng Swift, hãy thử một cái gì đó giống như cổng của tôi @ JitendraGandhi của ObjC ví dụ để Swift:

func hasAppBeenUpdatedSinceLastRun() -> Bool { 
    var bundleInfo = Bundle.main.infoDictionary! 
    if let currentVersion = bundleInfo["CFBundleShortVersionString"] as? String { 
     let userDefaults = UserDefaults.standard 

     if userDefaults.string(forKey: "currentVersion") == (currentVersion) { 
      return false 
     } 
     userDefaults.set(currentVersion, forKey: "currentVersion") 
     userDefaults.synchronize() 
     return true 
    } 
    return false; 
} 
+0

Bạn đang sử dụng biến 'currentVersion' trong phạm vi của nó !! –

+1

Ah, phải. Cảm ơn. Chỉ cần chỉnh sửa câu trả lời – clearlight

2

Nếu bạn muốn giải pháp đơn giản và dễ dàng, Sử dụng chức năng này:

-(BOOL)isAppUpdated 
{ 
NSDictionary *bundleInfo = [[NSBundle mainBundle] infoDictionary]; 
NSString *currentVersion = [bundleInfo objectForKey:@"CFBundleShortVersionString"]; 

if ([[[NSUserDefaults standardUserDefaults] objectForKey:@"currentVersion"] isEqualToString:currentVersion]) 
{ 
    return NO ; 
} 
else 
{ 
    [[NSUserDefaults standardUserDefaults] setObject:currentVersion forKey:@"currentVersion"]; 
    return YES ; 
} 
} 
+0

@JintendraGandhi - cảm ơn ví dụ này. Tôi đã chuyển nó sang Swift và đưa nó vào câu trả lời của tôi để phân bổ bản gốc cho bạn. – clearlight

+0

Nếu nó làm việc cho u, sau đó xin vui lòng chấp nhận câu trả lời của tôi :) – itsji10dra

+0

@ JintendraGandhi Tôi đã không đặt câu hỏi, vì vậy tôi không thể (không được kích hoạt để) chấp nhận nó. Tôi chỉ có thể bình chọn câu trả lời của bạn (mà tôi sẽ làm bây giờ). Tôi không cần giải pháp, tôi chỉ cảm thấy nó sẽ mang lại lợi ích cho người dùng Swift khi thấy nó chuyển sang Swift, mà tôi biết đủ để chuyển nó khỏi xem mã của bạn, vì nó là một hàm đơn giản.Câu trả lời của tôi đã được bình chọn, vì vậy tôi chỉ làm điều này như một dịch vụ cho người xem trong tương lai của chủ đề. – clearlight

3

Sử dụng NSUserDeafaults để lưu trữ CFBundleVersion. Sau đó kiểm tra nó mỗi khi ứng dụng được khởi chạy.

// Check if new version 
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
NSString *currentAppVersion = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleVersion"]; 
if ([defaults objectForKey:@"savedAppVersionKey"] != nil) { 
    // Key exists 
    NSString *savedAppVersion = [[NSUserDefaults standardUserDefaults] objectForKey:@"savedAppVersionKey"]; 
    if ([currentAppVersion isEqualToString:savedAppVersion]) { 
     // Still running the same app version 
     // Do nothing 
     NSLog(@"App version: SAME"); 
    } 
    else { 
     // The app version changed from the last launch 
     // Do something here 
     NSLog(@"App version: UPDATED"); 
    } 
} 
// Set the key & synchronize 
[[NSUserDefaults standardUserDefaults] setObject:currentAppVersion forKey:@"savedAppVersionKey"]; 
[[NSUserDefaults standardUserDefaults] synchronize]; 
1

Mã sau sẽ trả về NO/YES. Bạn có thể gọi phương thức này nhiều lần để biết liệu ứng dụng đã được cập nhật trước khi ra mắt hay chưa.

- (BOOL)launchedFirstTimeAfterUpdate 
{ 
    static NSString *lastVersion; 
    NSString *currentVersion = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleShortVersionString"]; 
    static dispatch_once_t onceToken; 
    dispatch_once(&onceToken, ^{ 
     NSString *versionKeyName = @"lastLaunchedVersion"; 
     lastVersion = [[NSUserDefaults standardUserDefaults] stringForKey:versionKeyName]; 
     [[NSUserDefaults standardUserDefaults] setObject:currentVersion forKey:versionKeyName]; 
     [[NSUserDefaults standardUserDefaults] synchronize]; 
    }); 

    if (!lastVersion.length) 
    { 
     // No last version means, launched first time 
     return NO; 
    } 

    if ([lastVersion compare:currentVersion options:NSNumericSearch] == NSOrderedAscending) 
    { 
     // Last version is less than current version 
     return YES; 
    } 

    return NO; 
} 
Các vấn đề liên quan