dimanche 1 mars 2015

OAuth2 to Authenticate Trakt API - Cannot Redirect Back to my App

I'm trying to use the Trakt API to get a list of TV shows and other data. However, I'm stuck on authenticating my app with Trakt. I have my API key, secret, and redirect URI, but am struggling on how to authorise my app. I've tried the following:


Method 1, using the sample code from Trakt:



-(void)authorisation{

NSString *redirectURI = @"http://myappredirect://";
NSString *clientID = @"MY_CLIENT_ID";
NSString *clientSecret = @"MY_CLIENT_SECRET";
NSString *username = @"USERNAME";
NSString *authURL = [NSString stringWithFormat:@"http://ift.tt/1Dq7nkU", clientID, redirectURI, username];

NSURL *URL = [NSURL URLWithString:authURL];

NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:URL];
[request setHTTPMethod:@"GET"];

[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];

[[UIApplication sharedApplication] openURL:URL];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
completionHandler:
^(NSData *data, NSURLResponse *response, NSError *error) {

if (error) {
// Handle error...
return;
}

if ([response isKindOfClass:[NSHTTPURLResponse class]]) {
NSLog(@"Response HTTP Status code: %ld\n", (long)[(NSHTTPURLResponse *)response statusCode]);
NSLog(@"Response HTTP Headers:\n%@\n", [(NSHTTPURLResponse *)response allHeaderFields]);
}

NSString* body = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
NSLog(@"Response Body:\n%@\n", body);
}];
[task resume];
}


This opens Safari on my iPhone, loads the web page successfully with Trakt asking to authorise my account for my app. I tap 'Authorize' and then Safari loads a URL 'myappredirect//?code=a_really_long_string_of_characters", but with an error



Safari cannot open the page because the server cannot be found.



When I enter myappredirect:// in Safari, my app opens, so I'm wondering if the URL that Safari loads is incorrect as it's missing a semi-colon before the double //?


So I tried adding a UIWebView to my app and load the URL in there. It loads the URL but this time after I tap 'Authorize', it doesn't change the webpage. The UIWebView delegate webViewDidStartLoad does tell me that it loads a page after I tap 'Authorize', but nothing changes on-screen.


Method 2, using OAuth2Client:



-(void)setupWebview{

webView = [[UIWebView alloc] initWithFrame:CGRectMake(0, 0, 300, 300)];
webView.backgroundColor = [UIColor greenColor];
webView.delegate = self;
[self.view addSubview:webView];

}

-(void)webViewDidStartLoad:(UIWebView *)webView{
NSLog(@"webViewDidStartLoad");
}

-(void)secondMethod{
NSString *redirectURI = @"http://myappredirect://";
NSString *clientID = @"MY_CLIENT_ID";
NSString *clientSecret = @"MY_CLIENT_SECRET";
NSString *username = @"USERNAME";
NSString *authURL = [NSString stringWithFormat:@"http://ift.tt/1Dq7kph", clientID, redirectURI, username];
NSString *tokenURL = @"http://ift.tt/1vObedT";

[[NXOAuth2AccountStore sharedStore] setClientID:clientID
secret:clientSecret
authorizationURL:[NSURL URLWithString:authURL]
tokenURL:[NSURL URLWithString:tokenURL]
redirectURL:[NSURL URLWithString:redirectURI]
forAccountType:@"Trakt"];

[[NXOAuth2AccountStore sharedStore] requestAccessToAccountWithType:@"Trakt"
withPreparedAuthorizationURLHandler:^(NSURL *preparedURL){
// Open a web view or similar
[webView loadRequest:[NSURLRequest requestWithURL:preparedURL]];
}];
}

-(void)viewWillAppear:(BOOL)animated{
[super viewWillAppear:YES];

[[NSNotificationCenter defaultCenter] addObserverForName:NXOAuth2AccountStoreAccountsDidChangeNotification
object:[NXOAuth2AccountStore sharedStore]
queue:nil
usingBlock:^(NSNotification *aNotification){
// Update your UI
NSLog(@"Success");
}];

[[NSNotificationCenter defaultCenter] addObserverForName:NXOAuth2AccountStoreDidFailToRequestAccessNotification
object:[NXOAuth2AccountStore sharedStore]
queue:nil
usingBlock:^(NSNotification *aNotification){
NSError *error = [aNotification.userInfo objectForKey:NXOAuth2AccountStoreErrorKey];
// Do something with the error
NSLog(@"Error");
}];
}


Here, I'm not sure what the token URL is. Again, my UIWebView loads the URL perfectly but after I press 'Authorize', it doesn't change its webpage. The delegate method webViewDidStartLoad does tell me that it loads another page, but nothing changes on-screen. Also, neither of the NXOAuth2 notifications are sent.


I'm new to OAuth2 and would really appreciate any help anybody may have to offer. I apologise if this is a silly question, I'm really struggling on what to do, and confused as to why Safari won't open my app after I've authorised Trakt.


Thanks.




1 commentaire:

  1. trakt TV streaming password password is a free blog website is 👇 and get a chance to utilize my phone died and I have done in time for the month of October I

    RépondreSupprimer