iOS 5 Twitter Framework: твиттинг без ввода и подтверждения пользователя (контроллер модального представления) - PullRequest
6 голосов
/ 24 февраля 2012

По сути, я хочу, чтобы приложение, как только пользователь разрешил доступ к своей учетной записи в Твиттере, могло твитить все, что пользователь выбрал в UITableView. В идеале я хотел бы использовать платформу Twitter в iOS 5, но главная проблема, с которой я столкнулся, - это модальный контроллер представления для твита. Это необязательно? Можно ли твитнуть без него, а если нет, то что вы предлагаете мне сделать?

Спасибо! * * 1004

Ответы [ 4 ]

11 голосов
/ 24 февраля 2012

Без него, безусловно, можно твитнуть, следующее в готовых приложениях для iOS 5. Он даже переводит пользователя в нужный раздел настроек, если он еще не зарегистрировал учетную запись.

- (void)postToTwitter
{
    // Create an account store object.
    ACAccountStore *accountStore = [[ACAccountStore alloc] init];

    // Create an account type that ensures Twitter accounts are retrieved.
    ACAccountType *accountType = [accountStore accountTypeWithAccountTypeIdentifier:ACAccountTypeIdentifierTwitter];

    // Request access from the user to use their Twitter accounts.
    [accountStore requestAccessToAccountsWithType:accountType withCompletionHandler:^(BOOL granted, NSError *error) {
        if(granted) {
            // Get the list of Twitter accounts.
            NSArray *accountsArray = [accountStore accountsWithAccountType:accountType];


            if ([accountsArray count] > 0) {
                // Grab the initial Twitter account to tweet from.
                ACAccount *twitterAccount = [accountsArray objectAtIndex:0];
                TWRequest *postRequest = nil;

                postRequest = [[TWRequest alloc] initWithURL:[NSURL URLWithString:@"http://api.twitter.com/1/statuses/update.json"] parameters:[NSDictionary dictionaryWithObject:[self stringToPost] forKey:@"status"] requestMethod:TWRequestMethodPOST];



                // Set the account used to post the tweet.
                [postRequest setAccount:twitterAccount];

                dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^(void) {
                    [postRequest performRequestWithHandler:^(NSData *responseData, NSHTTPURLResponse *urlResponse, NSError *error) {
                        dispatch_async(dispatch_get_main_queue(), ^(void) {
                            if ([urlResponse statusCode] == 200) {
                                Alert(0, nil, @"Tweet Successful", @"Ok", nil);
                            }else {

                                Alert(0, nil, @"Tweet failed", @"Ok", nil);
                            }
                        });
                    }];
                });

            }
            else
            {
                [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"prefs:root=TWITTER"]];
            }
        }
    }];
}
6 голосов
/ 21 декабря 2013

Это будет обновленная версия, использующая SLRequest вместо TWRequest, которая устарела в iOS 6. Обратите внимание, что для этого требуется, чтобы в ваш проект была добавлена ​​инфраструктура социальных сетей и учетных записей ...

- (void) postToTwitterInBackground {

    // Create an account store object.
    ACAccountStore *accountStore = [[ACAccountStore alloc] init];

    // Create an account type that ensures Twitter accounts are retrieved.
    ACAccountType *accountType = [accountStore accountTypeWithAccountTypeIdentifier:ACAccountTypeIdentifierTwitter];

    // Request access from the user to use their Twitter accounts.
    [accountStore requestAccessToAccountsWithType:accountType options:nil completion:^(BOOL granted, NSError *error) {
        if(granted) {
            // Get the list of Twitter accounts.
            NSArray *accountsArray = [accountStore accountsWithAccountType:accountType];

            if ([accountsArray count] > 0) {
                // Grab the initial Twitter account to tweet from.
                ACAccount *twitterAccount = [accountsArray objectAtIndex:0];
                SLRequest *postRequest = nil;

                // Post Text
                NSDictionary *message = @{@"status": @"Tweeting from my iOS app!"};

                // URL
                NSURL *requestURL = [NSURL URLWithString:@"https://api.twitter.com/1.1/statuses/update.json"];

                // Request
                postRequest = [SLRequest requestForServiceType:SLServiceTypeTwitter requestMethod:SLRequestMethodPOST URL:requestURL parameters:message];

                // Set Account
                postRequest.account = twitterAccount;

                // Post
                [postRequest performRequestWithHandler:^(NSData *responseData, NSHTTPURLResponse *urlResponse, NSError *error) {
                     NSLog(@"Twitter HTTP response: %i", [urlResponse statusCode]);
                 }];

            }
        }
    }];

}
5 голосов
/ 19 февраля 2015

Обновление: TwitterKit в Fabric от Twitter очень удобен, и если вы хотите публиковать сообщения из своего приложения Twitter, когда пользователь пытается чирикать в вашем приложении, то это может быть хорошим вариантом для рассмотрения.

(ДА, этот метод позволит вам публиковать в твиттере без какого-либо диалогового окна или подтверждения).

TwitterKit будет обрабатывать часть разрешений, и используя TWTRAPIClient, мы выполняем твит через Твиттер.остальные API.

 //Needs to performed once in order to get permissions from the user to post via your twitter app.
[[Twitter sharedInstance]logInWithCompletion:^(TWTRSession *session, NSError *error) {
    //Session details can be obtained here
    //Get an instance of the TWTRAPIClient from the Twitter shared instance. (This is created using the credentials which was used to initialize twitter, the first time) 
    TWTRAPIClient *client = [[Twitter sharedInstance]APIClient];

    //Build the request that you want to launch using the API and the text to be tweeted.
    NSURLRequest *tweetRequest = [client URLRequestWithMethod:@"POST" URL:@"https://api.twitter.com/1.1/statuses/update.json" parameters:[NSDictionary dictionaryWithObjectsAndKeys:@"TEXT TO BE TWEETED", @"status", nil] error:&error];

   //Perform this whenever you need to perform the tweet (REST API call)
   [client sendTwitterRequest:tweetRequest completion:^(NSURLResponse *response, NSData *data, NSError *connectionError) {
   //Check for the response and update UI according if necessary.            
   }];
}];

Надеюсь, это поможет.

2 голосов
/ 03 августа 2016

Принятый ответ больше не действителен из-за нескольких изменений.Этот работает с iOS 10, Swift 3 и версией 1.1 API Twitter.

** ОБНОВЛЕНИЕ **

Этот ответ былобновленный, поскольку предыдущий опирался на устаревшую конечную точку Twitter.

import Social
import Accounts

func postToTwitter() {
    let accountStore = ACAccountStore()
    let accountType = accountStore.accountType(withAccountTypeIdentifier: ACAccountTypeIdentifierTwitter)

    accountStore.requestAccessToAccounts(with: accountType, options: nil) { (granted, error) in
        if granted, let accounts = accountStore.accounts(with: accountType) {
            // This will default to the first account if they have more than one

            if let account = accounts.first as? ACAccount {
                let requestURL = URL(string: "https://api.twitter.com/1.1/statuses/update.json")
                let parameters = ["status" : "Tweet tweet"]
                guard let request = SLRequest(forServiceType: SLServiceTypeTwitter, requestMethod: .POST, url: requestURL, parameters: parameters) else { return }
                request.account = account
                request.perform(handler: { (data, response, error) in
                    // Check to see if tweet was successful
                })
            } else {
                // User does not have an available Twitter account
            }
        }
    }
}

Это используемый API .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...