0

我正在关注 此链接以获取访问令牌,但在下面的代码中有些泄漏,特别是在 url 和内容中。

 -(void)connectionDidFinishLoading:(NSURLConnection *)connection

 {

  if(_data)
  {
    NSString* content = [[NSString alloc] initWithData:_data
                                              encoding:NSUTF8StringEncoding];

    [_data release];
    _data = nil;

    NSString *jsString = @"<script type='text/javascript'>\
    window.external =\
    {\
    'Notify': function(s) { document.location = 'acs://settoken?token=' + s; },\
    'notify': function(s) { document.location = 'acs://settoken?token=' + s; }\
    }\
    </script>";

   //Here appending the above javascript with content

    content = [jsString stringByAppendingString:content];

    NSURL *url = [[NSURL alloc] initWithString:@"https://converse.accesscontrol"];

    [webView loadHTMLString:content baseURL:url];
   }
   }

登录到 Gmail 或 Yahoo 时,将触发以下代码然后检查 url,但在这里(如果条件失败)。如果您无法理解,我想问什么。请参阅上面给出的链接。

 - (BOOL)webView:(UIWebView *)webView
  shouldStartLoadWithRequest:(NSURLRequest *)request
 navigationType:(UIWebViewNavigationType)navigationType

{

_url = [[NSURL alloc] initWithString:@"https://converse.accesscontrol.windows"];

  if(_url)
  {

    if([_url isEqual:[request URL]])
    {
        return YES;
    }

    [_url release];
  }

  _url = [[request URL] retain];
   NSString* scheme = [_url scheme];

  if([scheme isEqualToString:@"acs"])
   {
    // parse the JSON URL parameter into a dictionary
    NSDictionary* pairs = [self parsePairs:[_url absoluteString]];
    if(pairs)
    {
        WACloudAccessToken* accessToken;
        accessToken = [[WACloudAccessToken alloc] initWithDictionary:pairs];
        [WACloudAccessControlClient setToken:accessToken];

        [self dismissModalViewControllerAnimated:YES];
    }

    return NO;
   }

   [NSURLConnection connectionWithRequest:request delegate:self];

   return NO;

  }

有任何想法吗?提前致谢。

4

1 回答 1

0

您获得了成功的设备令牌.....

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    
    
  
    [[UIApplication sharedApplication] registerForRemoteNotificationTypes:(UIRemoteNotificationTypeAlert | UIRemoteNotificationTypeSound | UIRemoteNotificationTypeBadge)];
   [[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];

}

- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {
    
    self.strToken = [[[[deviceToken description]
                       stringByReplacingOccurrencesOfString: @"<" withString: @""]
                      stringByReplacingOccurrencesOfString: @">" withString: @""]
                     stringByReplacingOccurrencesOfString: @" " withString: @""];
    
    NSLog(@"%@",deviceToken);
}


- (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error {
    NSString *str = [NSString stringWithFormat: @"Error: %@", error];
   
}

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo {
    
    NSLog(@"user info  %@",userInfo);
    UIApplicationState state = [application applicationState];
    if (state == UIApplicationStateActive) {
        NSString *cancelTitle = @"OK";
        //NSString *showTitle = @"Show";
        NSString *message = [[userInfo valueForKey:@"aps"] valueForKey:@"alert"];
        UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:nil
                                                            message:message
                                                           delegate:self
                                                  cancelButtonTitle:cancelTitle
                                                  otherButtonTitles: nil];
        [alertView show];
        [alertView release];
        
        
    } 
   else {
        //Do stuff that you would do if the application was not active
    }
}
于 2013-05-02T07:20:24.040 回答