API для iPhone и Twitter OAuth: потребительские ключи и секреты - PullRequest
3 голосов
/ 05 июня 2011

У меня проблема с загрузкой моих данных из Twitter. Метод, который я опубликовал ниже, работает в течение 5-10 минут, затем он замораживает мои потребительские ключи ....

Я знаю, что это ключи, потому что у меня уже установлено приложение, работающее на устройстве, тогда я внесу изменения и запустлю на симуляторе, и это также повлияет на устройство. Это длится около 30 минут, после чего ключи, похоже, обновляются и работают без каких-либо изменений в реальном коде. Иногда я просто захожу в Twitter Dev, где мое приложение, и сбрасываю ключи и заменяю ключи в моем коде, и это работает около 10 минут, после чего происходит то же самое!

Вот код, который я использую для вызова OAuth в твиттере и получения объектов для моего UITableView.

- (void)viewDidAppear:(BOOL)animated
{
    if(_engine) return;

    _engine = [[SA_OAuthTwitterEngine alloc] initOAuthWithDelegate:self];
    _engine.consumerKey = @"key";
    _engine.consumerSecret = @"key";

    UIViewController *controller = [SA_OAuthTwitterController controllerToEnterCredentialsWithTwitterEngine: _engine delegate: self];

    if (controller) 
        [self presentModalViewController: controller animated: YES];
    else
    {
        userAvatar.image = [UIImage imageWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:@"http://a2.twimg.com/profile_images/1361674958/Wintboard_200px.png" ]]];

        tweets = [[NSMutableArray alloc] init];
        authors = [[NSMutableArray alloc] init];
        avatarsURL =[[NSMutableArray alloc] init];
        friendsCount = [[NSMutableArray alloc] init];
        followerCount = [[NSMutableArray alloc] init];
        retweetCount = [[NSMutableArray alloc] init];

        //retweetCount = [[NSMutableArray alloc] init];

        [self updateStream:nil];
        [progressView.view removeFromSuperview];
    }
}

#pragma mark IBActions 

-(IBAction)updateStream:(id)sender
{
    // [_engine sendUpdate:[textfield text]];
    [_engine getFollowedTimelineSinceID:0 startingAtPage:0 count:100];

    //[_twitter getFollowedTimelineSinceID:0 startingAtPage:0 count:0];

    NSString *path = [[NSBundle mainBundle] pathForResource:@"unlock" ofType:@"caf"];
    AVAudioPlayer* theAudio = [[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:path] error:NULL];
    theAudio.delegate = self;
    [theAudio play];
}

-(IBAction)tweet:(id)sender
{   
    [_engine sendUpdate:[textfield text]];
    [self updateStream:nil];
    if (textfield isFirstResponder])
    {
        textfield.text = @"";
        [textfield resignFirstResponder];
    }
}

-(BOOL)textFieldShouldClear:(UITextField*)textfield
{
    return  YES;
}

- (BOOL)textFieldShouldReturn:(UITextField *)textField
{
    // the user pressed the "Done" button, so dismiss the keyboard
    [textField resignFirstResponder];
    return YES;
}

// Return YES for supported orientations

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation) interfaceOrientation
{
    return YES;
}

#pragma mark UITableViewDataSource Methods 

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section    
{    
    // [_engine sendUpdate:[textfield text]];
    [_engine getFollowedTimelineSinceID:0 startingAtPage:0 count:100];

    int count = [tweets count];
    int count2 = [authors count];
    int count3 = [avatarsURL count];

    //Return just enough cells to fill the screen during loading ....
    if (count == 0)
        count = MyCustomRowCount;

    return count = 100;
    return count2 = 100;
    return count3 = 100;

    // return  count;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    NSString *identifier = @"cell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:identifier];
    if (cell == nil)
    { 
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:identifier] autorelease];
    }

/*
    //Here it adds a nice shadow to the table view but will crash on rotation and send a wird dump 
    tableView.layer.shadowColor = [[UIColor blackColor] CGColor];
    tableView.layer.shadowOffset = CGSizeMake(1.0f, 1.0f);
    tableView.layer.shadowRadius = 8.0f;
    tableView.layer.shadowOpacity = 1.0f;     
*/

    [cell.textLabel setNumberOfLines:1];
    [cell.textLabel setText:[(Tweet*)[authors objectAtIndex:indexPath.row] author]];  

    [cell.detailTextLabel setText:[(Tweet*)[tweets objectAtIndex:indexPath.row] tweet]];
    [cell.detailTextLabel setNumberOfLines:10];
    [cell.textLabel setTextColor:[UIColor darkGrayColor]];
    [cell.textLabel setShadowColor:[UIColor whiteColor]];
    [cell.textLabel setShadowOffset:CGSizeMake(0.5, 0.5)];
    [cell.detailTextLabel setTextColor:[UIColor blackColor]];
    //[cell.detailTextLabel setText:[(Tweet*)[retweetCount objectAtIndex:indexPath.row] reTweetCount]];
    [cell.textLabel setUserInteractionEnabled:YES];
    [cell.contentView setMultipleTouchEnabled:YES];

    // Here we use the new provided setImageWithURL: method to load the web image with SDWebImageManager
    [cell.imageView setImageWithURL:[NSURL URLWithString:[(Tweet*)[avatarsURL objectAtIndex:indexPath.row]avatarURL]]
    placeholderImage:[UIImage imageNamed:@"avatar.png"]];

    //add gradient to cell 
    UIImage *gradient = [UIImage imageNamed:@"gradientcell2.png"];
    UIImageView *cellimage = [[UIImageView alloc] initWithImage:gradient];
    cellimage.contentMode = UIViewContentModeScaleToFill;
    cell.backgroundView = cellimage;

    [cellimage release];      

    UIImage *selectedGradient = [UIImage imageNamed:@"selectedcell.png"];
    UIImageView *selectedCell = [[UIImageView alloc] initWithImage:selectedGradient];
    selectedCell.contentMode = UIViewContentModeScaleToFill;
    cell.selectedBackgroundView = selectedCell;    

    [tableView setBackgroundColor:[UIColor clearColor]];

    return cell;
}

1 Ответ

1 голос
/ 22 июня 2011

Да, извините, я должен был вернуться и ответить на это!

Сначала убедитесь, что ваши запросы не превышают лимит запросов Twitters API, я просто перезагружал свое табличное представление.

После исправления этой ошибки я приступил к сбросу своих ключей и написал в Twitter API запрос на использование xAuth «для принятия потребуется всего несколько дней», после чего у меня не возникло проблем.

Я не использовал свои ключи, пока не получил письмо из Твиттера, в котором говорилось, что меня приняли, и с тех пор у меня не было никаких проблем.

Надеюсь, это поможет, потому что я знаю, как это может расстраивать!

Удачи!

...