当我的应用在iTunes商店中有新版本时,是否可以强制用户进行升级?
我目前正在开发一个应用程序。但是每次我上传一个新版本时,我希望能够强制用户进行升级,因为新版本拥有更多功能,而我想丢弃旧版本。 iPhone 默认是否支持此操作,还是我需要编写自己的实现来检查当前版本并将其与商店进行比较?
当我的应用在iTunes商店中有新版本时,是否可以强制用户进行升级?
我目前正在开发一个应用程序。但是每次我上传一个新版本时,我希望能够强制用户进行升级,因为新版本拥有更多功能,而我想丢弃旧版本。 iPhone 默认是否支持此操作,还是我需要编写自己的实现来检查当前版本并将其与商店进行比较?
大家好,如果你们需要帮助,我发现了这个教程,应该能对大家有所帮助,它也帮助了我。
编辑(你的代码应该类似于以下内容):
// Try to get version
NSString *versionNumber = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleVersion"];
NSURL *updateUrl = [NSURL URLWithString:@"http://yourdomain.com/yourupdatefile.xml"];
NSURLRequest *urlRequest = [NSURLRequest requestWithURL:updateUrl
cachePolicy:NSURLCacheStorageNotAllowed
timeoutInterval:20.0];
NSURLResponse *response = nil;
NSError *error = nil;
NSData *data = [NSURLConnection sendSynchronousRequest:urlRequest
returningResponse:&response
error:&error];
// Check no error, then parse data
if (error == nil)
{
// Parse response into a dictionary
NSPropertyListFormat format;
NSString *errorStr = nil;
NSDictionary *dictionary = [NSPropertyListSerialization propertyListFromData:data
mutabilityOption:NSPropertyListImmutable
format:&format
errorDescription:&errorStr];
if (errorStr == nil)
{
@try {
// Try to see if the current app version exists in the update xml
NSString *itunesUrl = [dictionary objectForKey:versionNumber];
if (itunesUrl)
{
// Show dialog to ask user to update!
}
else {
// Version not in XML
}
} @catch (NSException *e) {
// Error with retrieving the key
}
}
else {
// Error with parsing data into dictionary
}
}
-(BOOL) needsUpdate{
NSDictionary* infoDictionary = [[NSBundle mainBundle] infoDictionary];
NSString* appID = infoDictionary[@"CFBundleIdentifier"];
NSURL* url = [NSURL URLWithString:[NSString stringWithFormat:@"http://itunes.apple.com/lookup?bundleId=%@", appID]];
NSData* data = [NSData dataWithContentsOfURL:url];
NSDictionary* lookup = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil];
if ([lookup[@"resultCount"] integerValue] == 1){
NSString* appStoreVersion = lookup[@"results"][0][@"version"];
NSString* currentVersion = infoDictionary[@"CFBundleShortVersionString"];
if (![appStoreVersion isEqualToString:currentVersion]){
NSLog(@"Need to update [%@ != %@]", appStoreVersion, currentVersion);
return YES;
}
}
return NO;
}
在以下内容中:
if (![appStoreVersion isEqualToString:currentVersion]){
NSLog(@"Need to update [%@ != %@]", appStoreVersion, currentVersion);
return YES;
}
代码的一部分是当版本不相等时确定你想要达到的目标,这是你将用户发送到应用商店下载最新版本的位置。
func appUpdateAvailable() -> (Bool,String?) {
guard let info = Bundle.main.infoDictionary,
let identifier = info["CFBundleIdentifier"] as? String else {
return (false,nil)
}
// let storeInfoURL: String = "http://itunes.apple.com/lookup?bundleId=\(identifier)&country=IN"
let storeInfoURL:String = "https://itunes.apple.com/in/lookup?bundleId=\(identifier)"
var upgradeAvailable = false
var versionAvailable = ""
// Get the main bundle of the app so that we can determine the app's version number
let bundle = Bundle.main
if let infoDictionary = bundle.infoDictionary {
// The URL for this app on the iTunes store uses the Apple ID for the This never changes, so it is a constant
let urlOnAppStore = NSURL(string: storeInfoURL)
if let dataInJSON = NSData(contentsOf: urlOnAppStore! as URL) {
// Try to deserialize the JSON that we got
if let dict: NSDictionary = try? JSONSerialization.jsonObject(with: dataInJSON as Data, options: JSONSerialization.ReadingOptions.allowFragments) as! [String: AnyObject] as NSDictionary? {
if let results:NSArray = dict["results"] as? NSArray {
if let version = (results[0] as! [String:Any])["version"] as? String {
// Get the version number of the current version installed on device
if let currentVersion = infoDictionary["CFBundleShortVersionString"] as? String {
// Check if they are the same. If not, an upgrade is available.
print("\(version)")
if version != currentVersion {
upgradeAvailable = true
versionAvailable = version
}
}
}
}
}
}
}
return (upgradeAvailable,versionAvailable)
}
if let url = URL(string: "https://apps.apple.com/tr/app/--id--") {
UIApplication.shared.open(url)
}
苹果不提供任何自动化的方式来完成这个任务,你需要手动编写。
选项1:可以使用iTunes API检查特定应用程序ID的最新版本,并显示弹出窗口以更新应用程序。 选项2:您可以使用自己的服务器来检查最新版本。但是,每当任何更新发布到苹果应用商店时,您都必须更新您的服务器。
您可以使用以下网址获取任何应用程序的信息,只需知道您的应用程序的Apple ID。
您可以在itunesconnect.com
>您的应用程序>应用程序信息页面中获取此Apple ID。