如何在iOS5中处理内部重定向



我正在用Titanium Mobile开发一款iPhone应用程序。现在,我想通过联盟链接从我的应用程序链接到应用商店。当然,这会先打开Safari,然后打开App Store,这很烦人。我从苹果公司找到了这个如何在内部处理重定向的指南(https://developer.apple.com/library/ios/qa/qa2008/qa1629.html)。当我使用Titanium时,我想我只需要实现一个本地模块,然后从Titanium中使用它。

到目前为止还不错,但我不能让它发挥作用。以下是我到目前为止所拥有的(我不知道Objective-C,所以其中一些可能很愚蠢(:

DeCompendiiReferralDelegate.h

#import <UIKit/UIKit.h>
@interface DeCompendiiReferralDelegate : NSObject <NSURLConnectionDataDelegate>
@property (retain) NSURL* iTunesURL;
-(void)openReferralUrl:(NSURL *)referralURL;
@end

DeCompendiiReferralDelegate.m

#import "DeCompendiiReferralDelegate.h"
@implementation DeCompendiiReferralDelegate
@synthesize iTunesURL;
- (void)openReferralUrl:(NSURL *)referralURL {
    NSURLConnection *con = [[NSURLConnection alloc] initWithRequest:[NSURLRequest requestWithURL:referralURL] delegate:self startImmediately:YES];
    [con release];
}
- (NSURLRequest *)connection:(NSURLConnection *)connection willSendRequest:(NSURLRequest *)request redirectResponse:(NSURLResponse *)response {
    self.iTunesURL = [response URL];
    if( [self.iTunesURL.host hasSuffix:@"itunes.apple.com"])
    {
        [connection cancel];
        [self connectionDidFinishLoading:connection];
        return nil;
    }
    else
    {
        return request;
    }
}
- (void)connectionDidFinishLoading:(NSURLConnection *)connection {    
    [[UIApplication sharedApplication] openURL:self.iTunesURL];
}
@end

我从DeCompendiiReferralModule.m调用此代码。调试显示调用了openReferralUrl,但从未打开该URL。你知道我做错了什么吗?

编辑

为了确保我在设置这个代码时没有做一些愚蠢的事情,以下是我对这个代码的称呼:

DeCompendiiReferralDelegate *referralDelegate = [[DeCompendiiReferralDelegate alloc] init];
[referralDelegate openReferralUrl:[NSURL URLWithString:urlString]];

您立即release您的连接。只有在连接完成后才能执行此操作。

最新更新