检测应用程序是否正在运行iOS测试版?

5

我在iOS应用商店上有一些支持iAd/AdMob的应用程序。我注意到每次发布iOS测试版时,广告请求量会骤降。我猜测这是由于许多人运行测试版操作系统,因此几乎总是会得到iAd测试广告。是否有办法让我的代码检测出应用程序是否在测试版操作系统版本上?这样我就可以默认使用AdMob来获取一些收入。


1
你的应用程序是否以iOS开发者为中心?如果不是,我怀疑你的用户群中有很大一部分正在运行oS的beta版本。 - ceejayoz
这并不是面向开发人员的,只是在beta版iOS发布后的第二天广告请求量下降了近50%,并且一直保持低位,这很奇怪。 - jamone
想一想这意味着什么 - iOS测试版要么需要支付每年99美元的费用,要么就是盗版。你没有运行面向开发人员的应用程序,因此为了证明你的理论是正确的,正常iOS用户中有一半必须购买/盗版并安装iOS5 - 更何况是在发布当天。我开发iOS应用程序,但我甚至还没有安装5。我认为必须有一个不同的解释。 - ceejayoz
2个回答

7

这并不是一种特别美观的方法,但您可以读取设备版本并将其与当前已知最高版本进行比较,如果设备版本较高,则返回 AdMob。

以下代码将获取设备版本号作为字符串:

[[UIDevice currentDevice] systemVersion]

您可以将此转换为浮点值并与硬编码版本进行比较,但这意味着一旦发布新的iOS版本就需要部署新版本:
if ([[[UIDevice currentDevice] systemVersion] floatValue] > 4.3) 
{
    // revert to AdMob...
}

作为一个稍微好一点的解决方案,你可以从网站请求当前最高的iOS版本号...只需要在你的网站上放置一个名为iosversion.txt的文件,并将其内容设置为“4.3”,然后使用它来控制开关。
不幸的是,似乎没有[[UIDevice currentDevice] isBeta]这样的方法。

将版本号转换为浮点数是危险的:首先,浮点数不精确,因此根据数字的不同,您可能会得到不同的数字。此外,版本号有两个点,而浮点数只有一个点,因此许多版本字符串无法正确转换。最后,即使您删除了第二个点,您也必须选择一定数量的数字,因为对于版本号而言,1.10.0 > 1.1.0,但对于浮点数而言,1.10 == 1.1。 - uliwitness
1
如果你必须比较版本号,请使用componentsSeparatedByString(".")获取版本号的各个部分,然后分别乘以1'000'000/1'000/1来获得一个无符号长整型,例如10001001(对应10.1.1)或10010005(对应10.10.5),再进行比较。 - uliwitness

-4
据传言,iOS 8版本将于九月份发布。因此,您可以使用:
NSDate *today = [NSDate date];

NSString *releaseDateString = @"2014-09-15 00:00:00";
NSDateFormatter *dateFormater = [[NSDateFormatter alloc] init];
[dateFormater setDateFormat:@"yyyy-MM-DD HH:mm:ss"];
NSDate *release = [dateFormater dateFromString:releaseDateString ];
NSComparisonResult comp = [today compare:release];

if([[[UIDevice currentDevice] systemVersion] floatValue] >= 8.0 && result == NSOrderedAscending) return @"Beta";
else return @"Release Version";

或者获取链接标题:https://www.apple.com/ios/ 并检查是否为 iOS?

- (void)webViewDidFinishLoad:(UIWebView *)webView {
    NSString *title = [webView stringByEvaluatingJavaScriptFromString:@"document.title"];
    title = [title stringByReplacingOccurrencesOfString:@"Apple - iOS " withString:@""];
    int version = [title intValue]; // 6, 7, 8...
}

1
这非常危险。在那个日期可能仍有人安装了 Beta 版本,或者某些人设置了错误的日期,或者 Apple 的发布被延迟,你的应用程序将尝试执行仅适用于 beta 或最终发布版的操作。不要这样做,会出现太多问题。 - uliwitness
更加灵活。时间与版本无关。 - Startry

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接