我希望能够远程阻止其他设备上安装的应用打开。 这背后的原因是我做远程自由职业工作,当我向客户发送演示应用程序时,我想知道如果他们停止通信或没有付费运行我可以禁用应用程序,以便他们不能再使用它了。
答案 0 :(得分:2)
通过简单地对远程服务器进行API调用并验证应用程序,您可以做一些事情,但说实话,您可以采取其他更好的步骤,以避免陷入这些情况。首先,您应该避免在履行合同义务之前发送代码。您可以使用xcode存档分发应用程序。这将允许他们使用自己的证书进行签名,而无需使用实际代码。第二件事是你可以保留所有的对话记录,以便在法庭上使用(或使用paypal,因为他们在国外)。此外,不要害怕使用自由网站联系人。他们将允许您执行纠纷并与您合作。尝试解决代码中的问题会让您容易受到攻击,因为他们无论如何都可以更改代码。
答案 1 :(得分:0)
我将遵循@ J2theC的建议。如果有人对如何更恶意地做这件事感到好奇,我就让它在发布时运行
NSURL *url = [NSURL URLWithString:@"http://www.website.com/test.txt"];
NSString *string = [NSString stringWithContentsOfURL:url encoding:NSUTF8StringEncoding error:nil];
if ([string isEqualToString:@"1"]) {
exit(1);
}
有效。但这只是一点乐趣。就像我说的,我将使用@ J2TheC的方法。
我已回到此代码并将其完成到可接受的水平。 看一下这个:
所以所有的检查都是异步地在AppDelegate中进行的。希望@Taum会同意这一点。
@interface AppDelegate ()
{
int trialOK;
}
@end
@implementation AppDelegate
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
[self trialCheck:@"http://yourwebsite.com/appID.txt" completionBlock:^(BOOL succeeded, NSString *string){
if (succeeded) {
if ([string isEqualToString:@""]) {
NSLog(@"Trial test connected - all is ok!");
trialOK = 1;
[[NSUserDefaults standardUserDefaults] setInteger:trialOK forKey:@"TRIAL"];
}else{
NSLog(@"Text file found. It is telling me to quit. Remembering this until dev says otherwise.");
// Will now show an alert with the contents of your .txt file before closing. Something like "Your trial has
// expired. Please contact the dev to resume usability of this app. This app will now close" would be appropriate
[self showAlert:string];
trialOK = 2;
[[NSUserDefaults standardUserDefaults] setInteger:trialOK forKey:@"TRIAL"]; //Saves to device that app is not allowed to open
}
}
else{
// If no connection to .txt file, app checks if it is already banned
NSInteger trialInt = [[NSUserDefaults standardUserDefaults] integerForKey:@"TRIAL"];
NSLog(@"failed online check. Trial int is: %d (0 = quit. 1 = ok)",trialInt);
if (trialInt == 2) {
[self showAlert:@"Your trial has expired. Disconnecting from the internet won't help. Please contact the dev to resume usability of this app. This app will now close"];
}
}
}];
return YES;
}
-(void)showAlert:(NSString *)alertString{
UIAlertView * alert = [[UIAlertView alloc]initWithTitle:@"Trial Expired" message:alertString delegate:self cancelButtonTitle:@"OK" otherButtonTitles: nil];
[alert show];
}
-(void)alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger)buttonIndex{
exit(1);
}
- (void)trialCheck:(NSString *)urlString completionBlock:(void (^)(BOOL succeeded, NSString *string))completionBlock
{
NSURL *url = [[NSURL alloc]initWithString:urlString];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[NSURLConnection sendAsynchronousRequest:request
queue:[NSOperationQueue mainQueue]
completionHandler:^(NSURLResponse *response, NSData *data, NSError *error) {
if ( !error )
{
NSString *tString = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
completionBlock(YES,tString);
} else{
completionBlock(NO,nil);
}
}];
}
如您所见,此代码检查服务器上的.txt文件。只要该.txt文件完全为空,一切都会正常运行。 如果互联网连接不可用,那么您的应用程序将不会崩溃并仍然运行。
如果您在文本文件中添加任何内容,则下次启动应用时,它会显示一条警报,其中包含.txt文件的正文,然后在UIAlertView被解除后退出该应用。您已完成此操作的事实现已保存到设备中,因此它会记住您已禁止该应用程序打开。
如果用户随后断开互联网连接并且该应用无法连接到.txt文件,则会检查您之前是否已禁止该应用。如果这是真的,它将再次显示警告然后退出应用程序。
再次清空.txt文件后,它将再次重新启用该应用,恢复功能。
请务必在完成整个工作之前删除此代码,除非您希望保证可以在客户撤销付款时将其关闭,以试图扯掉您。
仅供参考 - 我现在使用网站进行自由职业,可以提出纠纷,但这是一个“只是在案件中”而不是赎金工具。