2012-01-07 20 views
1

我正在創建一個應用程序,該應用程序將在特定的時間限制後過期。意味着用戶無法訪問它的方法,用戶應該購買或註冊下載的應用程序。用戶可以打開應用程序,但一段時間後用戶不能使用應用程序功能。 這可能嗎?如何製作一個在iphone特定時間到期的應用程序?

+0

我不認爲蘋果會喜歡這個 – Dani 2012-01-07 06:58:18

+0

這是不允許的。它會被拒絕。 – 2012-01-07 07:20:47

+0

這不會被允許用於應用商店,但如果您正在測試使用臨時分發的應用或在企業內部應用中測試應用,這是一個合理的問題。 – progrmr 2014-06-19 00:03:11

回答

-1

首先:如果您使用未在其私有API中列出的功能的任何

蘋果不會拒絕你的申請。

所以如果你想在特定時間後阻止你的應用程序,你可以在邏輯上實現它。

對於這種一旦你的應用程序在設備下載,存儲當前時間&日期在你的應用程序首選項(用戶缺省值)。儘管在此選項中如果用戶將刪除應用程序&重新安裝應用程序,首選項將重置。

所以有直到iOS設備沒有被重置(像鑰匙扣),這是不會被刪除的各個地方。 Apple提供了將數據存儲在鑰匙串中的方法。

下一個是你必須做的是,當用戶打開應用程序,你需要在應用存儲的時間來檢查當前時間每次。

如果驗證你的極限,可以讓用戶使用該應用程序或把你想要的任何行動警報&做的。

我希望這可能對您有所幫助。

+0

第一行顯然是錯誤的。蘋果有許多規則來指導他們接受或拒絕申請;私有API的使用只是其中之一。 – duskwuff 2012-01-07 08:28:25

+1

@Duskwuff:我寫的一樣!!!!!!請仔細閱讀該行。 – iCreative 2012-01-07 08:33:10

+1

iOS審覈準則第2.9節禁止使用過期的應用程序:「測試版」,「演示版」,「試用版」或「測試版」的應用程序將被拒絕。「 – duskwuff 2012-01-07 18:09:48

1

我已經通過使用構建腳本完成此任務,每次編譯時都會創建一個帶有時間戳的文件。該文件是構建目標的一部分,並與應用程序一起部署。當應用程序運行時,代碼會檢查文件的時間戳,並且如果過了很多時間,應用程序將拋出一個警告頁面,而不會執行其他任何操作。

現在免責聲明。我將這個系統用於企業應用程序的開發版本。這可以防止舊的開發版本混亂,並阻止人們獲得舊的開發版本,並認爲他們是最近的版本。我永遠不會想到在生產部署的應用程序中使用此係統。

編輯:每請求我加我使用的代碼和腳本。這不是很好,但它的工作原理。如果有人想改善它,我會很高興看到更好的版本。我「編譯源」任務

builddate=`date` 

# if BuildDateString doesn't exist, add it 
/usr/libexec/PlistBuddy -c "Add :BuildDateString string $builddate" "$TARGET_BUILD_DIR/$INFOPLIST_PATH" 
# and if BuildDateString already existed, update it 
/usr/libexec/PlistBuddy -c "Set :BuildDateString $builddate" "$TARGET_BUILD_DIR/$INFOPLIST_PATH" 

我使用的Objective-C代碼的代碼靜態庫,我傾向於越過了相當多的項目中使用存在前右側有腳本設置爲運行。它還包括一個簡單的UIViewController,稱爲TSExpiredViewController,以根據需要顯示過期的消息。

+ (void)expireAppAfterOneWeek { 
    [self expireAppAfter:604800]; 
} 

+ (void)expireAppAfter:(NSTimeInterval)secondsAfterBuilds { 
    id<UIApplicationDelegate> appDelegate = [UIApplication sharedApplication].delegate; 

    NSString *buildDateString = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"BuildDateString"]; 
    NSDateFormatter *df = [[NSDateFormatter alloc] init]; 
    df.dateFormat = @"EEE MMM dd kk:mm:ss zz yyyy"; 
    NSDate *buildDate = [df dateFromString:buildDateString]; 

    if (-[buildDate timeIntervalSinceNow] > secondsAfterBuilds) { 
     appDelegate.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; 
     TSExpiredViewController *viewController = [[TSExpiredViewController alloc] init]; 
     appDelegate.window.rootViewController = viewController; 
     [appDelegate.window makeKeyAndVisible]; 
    } 
} 
相關問題