SlideShare a Scribd company logo
1 of 64
Download to read offline
iOSの
             TwitterFramework
             を使ってみたら・・
                   @i2key



12年8月3日金曜日
Twitter4Jのほうが良かった。




12年8月3日金曜日
用途によってはね。




12年8月3日金曜日
Objective-C書いてる人どれくらいいます??




12年8月3日金曜日
自己紹介




12年8月3日金曜日
12年8月3日金曜日
@i2key
      <言語>
       Java屋
       最近Objective-C

      <仕事>
       ネット企業のR&D部門で
       サービス企画、開発


12年8月3日金曜日
ソーシャル音楽アプリ
                 Attacca
             ミュージック(無料)最高2位
              (ノンプロモーション)




               JASRAC許諾番号
12年8月3日金曜日
              9010672028Y31018
音楽は
             好きですか?




12年8月3日金曜日
普段、どんな音楽を聴いていますか?




12年8月3日金曜日
あなたのプレイリストは懐メロばかりに
                 なっていないですか?




12年8月3日金曜日
学生の頃に比べて
             明らかに新しい音楽に
             出会う機会が減っている



12年8月3日金曜日
毎日が忙しく、
 音楽に出会う場に
 行かなくなった




             h"p://jigokuno.img.jugem.jp/20090624_1292358.gif
12年8月3日金曜日
毎日が忙しく、
             音楽に出会う番組を見なくなった




                          h"p://jigokuno.img.jugem.jp/20090624_1292358.gif
12年8月3日金曜日
時間が無いので、
音楽に触れるのはオンラインばかり。
しかし、オンラインでは能動的に動かないと
好きな音楽にたどり着けない。




12年8月3日金曜日
音楽番組を見ていたときのような
             受動的な音楽の聴き方をしたい
12年8月3日金曜日
どうせ聴くなら、
             電車で隣に座っている知らない人が
             何を聴いてるかよりも




12年8月3日金曜日
知り合いが何を聴いているのかが気になる




12年8月3日金曜日
そんな想いを解決してくれます。
              そう、このAttaccaならね。




12年8月3日金曜日
http://attacca.fm/posts/song/v1/f46aa5f217ced235abfb5073fc74582d




12年8月3日金曜日
12年8月3日金曜日
12年8月3日金曜日
刺激の欲しいあなた。今なら漏れなく、
   スリル感のある開発ができますよ!Play2.0ならね




        http://i2key.hateblo.jp/entry/playstudy3
12年8月3日金曜日
hMps              API!KEY                                 Manager               TwiMer
                                                                                              APNS
                                                          contro              Model
                                                                                              C2DM
                                                            ller
                        Port


                                                                                                !
                SSL!




                                                                      Manager                   !
                                JSON!                                                           !
                        !




                                                                                             Dynamo!   Dyn
                                                                          Model
                                                                                               DB!     amo
                               HTML!
                                                                                             AWS!SDK

                                                             Playframework!2.0
                    Apache!
                                                                   JVM
                                                 Amazon!Linux!(MTL!Amazon!Image)

                                             !                           OS        FW   FW
                        (                )




12年8月3日金曜日
認証
                            ツイート
         TwitterFramework



                            プロフィール取得
                            フレンドリストの取得




12年8月3日金曜日
iOS Twitter framework



12年8月3日金曜日
https://dev.twitter.com/docs/ios
12年8月3日金曜日
iOS Twitter framework




       Using the TweetSheet
       API requests with TWRequest
       Using Reverse Auth
       Migrating tokens to System Accounts




12年8月3日金曜日
iOS Twitter framework
                             Account framework

                             ACAccount
                             ・username
                             ・token
                             ・secret     set
             アカウント設定
                                     OAuth
                             get

              ツイート
                              Tweet       https://api.twitter.com/1/statuses/update



                              Sheet                                                   Twitter

                  ACAcount
                             TWRequest            https://api.twitter.com/1/foo/bar


             API直接コール

                             iOS Twitter
                             framework
12年8月3日金曜日
iOS Twitter framework




     Using the TweetSheet




12年8月3日金曜日
iOS Twitter framework




              TweetSheet


12年8月3日金曜日
iOS Twitter framework
                             Account framework

                             ACAccount
                             ・username
                             ・token
                             ・secret     set
             アカウント設定
                                     OAuth
                             get

              ツイート
                              Tweet       https://api.twitter.com/1/statuses/update



                              Sheet                                                   Twitter

                  ACAcount
                             TWRequest            https://api.twitter.com/1/foo/bar


             API直接コール

                             iOS Twitter
                             framework
12年8月3日金曜日
iOS Twitter framework
                             Account framework

                             ACAccount
                             ・username
                             ・token
                             ・secret     set
             アカウント設定
                                     OAuth
                             get

              ツイート
                              Tweet       https://api.twitter.com/1/statuses/update



                              Sheet                                                   Twitter

                  ACAcount
                             TWRequest            https://api.twitter.com/1/foo/bar


             API直接コール

                             iOS Twitter
                             framework
12年8月3日金曜日
iOS Twitter framework
                               Account framework

                                ACAccount
                                ・username
                                ・token
                                ・secret      set
              アカウント設定
                                          OAuth
                                get

                   ツイート
                                 Tweet         https://api.twitter.com/1/statuses/update



                                 Sheet                                                     Twitter
             self.accountStore = [[ACAccountStore alloc] init];
             ACAccountType *twitterType = [self.accountStore
             accountTypeWithAccountTypeIdentifier:ACAccountTypeIdentifierTwitter];
                       ACAcount
                                TWRequest              https://api.twitter.com/1/foo/bar
             [self.accountStore requestAccessToAccountsWithType:twitterType
               API直接コール         withCompletionHandler:
                                 ^(BOOL granted, NSError *error) {
             ! !
             ! !    !
                                iOS Twitter
                                     if (granted) {
                                         //アクセス権を得た場合にやりたい処理
             !                  ! }
             }];                framework
12年8月3日金曜日
Using the TweetSheet



                 アカウントが設定されていること

                 if ([TWTweetComposeViewController canSendTweet]) {
                      //やりたいこと! !
                 }




12年8月3日金曜日
Using the TweetSheet


                     ツイートの入力画面の表示
                 - (void)showTweetSheet
                 {
                     // Create an instance of the Tweet Sheet
                     TWTweetComposeViewController *tweetSheet
                         = [[TWTweetComposeViewController alloc] init];
                  
                     // Set the initial body of the Tweet
                     [tweetSheet setInitialText:
                          @" RIVER / 10-FEET #attacca #nowplaying #music"];
                  
                     // Presents the Tweet Sheet to the user
                     [self presentViewController:
                         tweetSheet animated:NO completion:^{
                             NSLog(@"Tweet sheet has been presented.");
                     }];
                 }




12年8月3日金曜日
Using the TweetSheet


                   前述のチェック無しでもよい
                   そうするとこんな画面になり
                     設定画面へ遷移出来る




12年8月3日金曜日
Using the TweetSheet

                 このダイアログは
                 TweetSheetでだけ使える
                  設定に飛ばすメソッドを用意して欲しい
                  自前でやるには今まではURLSchemeで設定画面に飛ばす
                  ことは出来ていたが、iOS5.1で使えなくなった。
                  TweetSheetのアルファを0にしてツイートシートを隠せば
                  それっぽく見えたけどやめといた

                 しかたがないので、
                 OAuthの自前のも残しておいた



12年8月3日金曜日
iOS Twitter framework




             API requests
             with TWRequest



12年8月3日金曜日
iOS Twitter framework
                             Account framework

                             ACAccount
                             ・username
                             ・token
                             ・secret     set
             アカウント設定
                                     OAuth
                             get

              ツイート
                              Tweet       https://api.twitter.com/1/statuses/update



                              Sheet                                                   Twitter

                  ACAcount
                             TWRequest            https://api.twitter.com/1/foo/bar


             API直接コール

                             iOS Twitter
                             framework
12年8月3日金曜日
iOS Twitter framework
   NSDictionary *params //引数をkey,value
                                                        APIのURLを直接書く
                                            Account framework
   NSURL *url = [NSURL URLWithString:@"http://api.twitter.com/1/statuses/home_timeline.json"];
   TWRequest *request = [[TWRequest alloc] initWithURL:url parameters:params requestMethod:TWRequestMethodPOST];
                                             ACAccount
   //----認証が必要なAPIを使う場合 START----
                                             ・username
   ACAccountType *twitterType = [self.accountStore
                                             ・token                                 認証済みアカウントを取り出して
   accountTypeWithAccountTypeIdentifier:ACAccountTypeIdentifierTwitter];
                                             ・secret         set
   NSArray *accounts = [self.accountStore accountsWithAccountType:twitterType];       リクエストにセットする
   [request setAccount:[accounts objectAtIndex:_twitterAccountIndex]];
   //----認証が必要なAPIを使う場合 END------
                      アカウント設定
                                                          OAuth
   [request performRequestWithHandler:^(NSData *responseData, NSHTTPURLResponse *urlResponse, NSError *error) {
   ! if (!responseData || ((NSHTTPURLResponse*)response).statusCode >= 400) {
   ! !      //エラー!!
                                             get
   !   } else {
   !   !    NSString *responseStr = [[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding];
   !   !                  ツイート
                                               Tweet
            //JSONの場合は、NSJSONSerializationとかでデシリアライズする          https://api.twitter.com/1/statuses/update


                                                             Twitter
   ! }
   }];
                                                 JSONをデシリアライズする
                                               Sheet

                                 ACAcount
                                             TWRequest                 https://api.twitter.com/1/foo/bar


                      API直接コール

                                             iOS Twitter
                                             framework
12年8月3日金曜日
ややネイティブにTwitterAPIをコールするためのサ
ポートクラス。


OAuth周りをAccountFrameworkと連携することで
認証周りの処理を省くことが出来る。便利!


ややネイティブなので、APIのURLはむき出しで自分
でリクエストを組み立てる感じ


twitterAPIは常に変化してるから、それには非依存に
したかったらしい
12年8月3日金曜日
iOS Twitter framework




             Using Reverse Auth



12年8月3日金曜日
iOS Twitter framework
                        Account framework

                        ACAccount
                        ・username
                        ・token
                        ・secret     set
    アカウント設定
                                OAuth
             ACAcount
                        TWRequest           https://api.twitter.com/1/foo/bar


    API直接コール                                                                    Twitter
                        iOS Twitter
                        framework
                                                        Twitter API
                                                            Call
                                                        (Twitter4J)

                                                    Attacca
                                                   API Server
12年8月3日金曜日
iOS Twitter framework
                        Account framework

                        ACAccount
                        ・username
                        ・token
                        ・secret     set
    アカウント設定
                                OAuth
             ACAcount
                        TWRequest           https://api.twitter.com/1/foo/bar


    API直接コール                                                                    Twitter
                        iOS Twitter
                        framework
                                                        Twitter API
                         API Server側も                       Call
                                                        (Twitter4J)
                         AccessToken
                          TokenSecret  Attacca
                             欲しい      API Server
12年8月3日金曜日
iOS Twitter framework
                        Account framework
                                      tokenやsecretを
                        ACAccount
                        ・username    setは出来るけど、
                        ・token
                        ・secret     set
                                        getは出来ない
    アカウント設定
                                        隠蔽化されてる
                                OAuth
             ACAcount
                        TWRequest           https://api.twitter.com/1/foo/bar


    API直接コール                                                                    Twitter
                        iOS Twitter
                        framework
                                                        Twitter API
                         API Server側も                       Call
                                                        (Twitter4J)
                         AccessToken
                          TokenSecret  Attacca
                             欲しい      API Server
12年8月3日金曜日
iOS Twitter framework
                        Account framework
                                      tokenやsecretを
                        ACAccount
                        ・username    setは出来るけど、


                  \(^o^)/
                        ・token
                        ・secret     set
                                        getは出来ない
    アカウント設定
                                        隠蔽化されてる
                                OAuth
             ACAcount
                        TWRequest           https://api.twitter.com/1/foo/bar




                  オワター
    API直接コール                                                                    Twitter
                        iOS Twitter
                        framework
                                                        Twitter API
                         API Server側も                       Call
                                                        (Twitter4J)
                         AccessToken
                          TokenSecret  Attacca
                             欲しい      API Server
12年8月3日金曜日
12年8月3日金曜日
12年8月3日金曜日
api@twitter.comにメールを送る
             Reverse Auth使いたい!と英語で書く




12年8月3日金曜日
以下のようなテンプレメールが返ってくる
       (Reverse Authというワードで引っ掛けてる?)

  Hello,

  Thank you for your interest in Reverse Auth access.

  This email is an automated response to acknowledge receipt of your email regarding Reverse Auth. A member of our team will review your request as soon
  as possible.

  Our review will proceed much more quickly if you were to reply to this ticket with the following required information:

  • Your App ID number (or consumer key) from https://dev.twitter.com/apps/
  • A link to your application’s website
  • Links to screenshots of your application's user-facing Twitter functionality
  • Links to screenshots of your application in use

  Please note that our ticketing system does not accept attachments, so you will need to upload your screenshots to your server or an image host and link to
  them in this ticket with full URLs (HTML is not supported).

  If you have already provided the required information in your initial request, please respond to this ticket to affirm that the required information is present.

  For your application to qualify for reverse auth access, it must be production-ready and built to work with Apple iOS5. Reverse Auth will not work with
  devices that do not use iOS 5.

  We do not grant Reverse Auth for testing purposes, single-user applications, or for applications that are in the early stages of development.

  If you are not requesting access to reverse auth and have received this response in error, please let us know by responding to this ticket.

  If you have a technical question about the API, please visit our developer site, where you will find extensive documentation about the Twitter API: http://
  dev.twitter.com/doc

  This ticket will be closed automatically if we do not receive a response from you within one week.

  Thanks,
  Twitter API Policy




12年8月3日金曜日
以下の項目に回答する

             >• Your App ID number (or consumer key) from https://dev.twitter.com/apps/
             Consumer Key is following
             For Puroduction use : EH1JqS85hK8cGdRXjao
             For Development use : hynOFqui0aPokaAAAZ6g
             >• A link to your application’s website
             Sorry. This app is not yet launched. Launching is 28th June.
             >• Links to screenshots of your application's user-facing Twitter functionality
             >• Links to screenshots of your application in use
             http://hoge.com/foo/bar/reverseauth.pdf




12年8月3日金曜日
・多分自動返信なので、最初の1通目のメールは適当で良い
 (ReverseAuthという単語だけいれとけば。)
・リリースしてない開発中のiPhoneアプリ
・説明用のPRサイト等が無くてもOK
・簡単な画面イメージとReverseAuthの用途を伝えた
・申請開始から通るまで期間は大体20日くらい
 (知り合いの学生は1週間くらいだったらしい)
・ReverseAuthの許可を得るコンシューマキーは
 別に1つではなくてもよい
  開発用と本番用の二つのコンシューマキーを
  ReverseAuth対応してもらえた


12年8月3日金曜日
iOS Twitter framework
                                   Account framework

                                   ACAccount
                                   ・username
                                   ・token
                                   ・secret     set
                 アカウント設定
                                              OAuth

   aaa
                 Singed                 req

                 Request                       res
                                                       Twitter

                        ACAcount
                                   TWRequest
             API直接コール


                                   iOS Twitter
                                   framework
12年8月3日金曜日
iOS Twitter framework
                URL
                 https://api.twitter.com/oauth/request_token

                             HTTP HEADER : Authorization
                              Account framework
                              OAuth oauth_timestamp="1343127155",
                              oauth_nonce="74514FFF-274D-4AA0-84F5-X0FDDDB0801FA",
                              oauth_version="1.0",
                              oauth_consumer_key="AH1JqAAAAA85hK8cGdR9EPzA",
                               ACAccount
                              oauth_signature_method="HMAC-SHA1",
                               ・username
                               ・token
                              oauth_signature="G0CCHWVTIQn0aZwjYJay%2BjG%3F3FF%3D"
                               ・secret     set
                             HTTP BODY :
             アカウント設定          x_auth_mode=reverse_auth&
                                           OAuth
                             seancook : TWIOS5ReverseAuthExample
                             https://github.com/seancook
   aaa
             Singed                  req      https://api.twitter.com/1/statuses/update



             Request                        res
                                                                                          Twitter
                   HTTP RESPONSE
                    OAuth oauth_token="rc2qU1XTbZ7ehPUAqfvbaAA9PljaOd0keCk8UeImE",
                     ACAcount
                    oauth_signature="rjhWzOAsnw20E8YbVJYDPAcRoASE%3D",
                               TWRequest          https://api.twitter.com/1/foo/bar
                    oauth_consumer_key="AH1JqAAAAA85hK8cGdR9EPzA",
                    oauth_signature_method="HMAC-SHA1",
              API直接コール
                    oauth_timestamp="1343127155",
                               iOS Twitter
                    oauth_version="1.0",
                    oauth_nonce="umqOqVVBBABUACCb5wAoJRfhsNppsEBVHDB76I2jw"


                               framework
12年8月3日金曜日
iOS Twitter framework
                                   Account framework

                                         URL
                                   ACAccount
                                           https://api.twitter.com/oauth/access_token
                                   ・username
                                   ・token
                                   ・secret      set
                                         HTTP HEADER :
                                           TWRequestにて認証するアカウント等は自動設定
                  アカウント設定
                                          HTTP BODY :
                                            OAuth
                                           x_reverse_auth_parameters = "OAuth
                                          oauth_signature="fwBAOrD88DK22qUplAASAARX0Rq0%3D
                                          ", oauth_nonce=
                                          "AkFRlWMIBPYP2ASASASAONAomQlF1XrFr2jsxFzMUFg",
   aaa                                    oauth_version="1.0", oauth_consumer_key=
                  Singed                 req
                                          "EH1JqS85hK8AAdAAAPzA", oauth_token=

                  Request          res    oauth_timestamp="1343129483",
                                                                            Twitter
                                          "KzLZRpY024AAAb4eBPRhB4Bt9i0UFJyW1vGcw",

                                          oauth_signature_method="HMAC-SHA1"";
                                           x_reverse_auth_target = EH1JqS85hK8AAdAAAPzA;


                        ACAcount
                                   TWRequest
             API直接コール
                          res

                                   iOS Twitter
                                         HTTP RESPONSE
                                         oauth_token=60478457-3PK080ABCqHMTGlCBBlidbnGGyEN
                                         w8abgDul9HTiEyI&oauth_token_secret=0M5671AdHTDOle
                                   framework
                                         yVarimoSuAS7CwNwJ1mFFA432SUIM&user_id=60478457&sc
                                         reen_name=i2key

12年8月3日金曜日
iOS Twitter framework
                                   Account framework

                                         URL
                                   ACAccount
                                           https://api.twitter.com/oauth/access_token
                                   ・username
                                   ・token
                                   ・secret      set
                                         HTTP HEADER :
                                           TWRequestにて認証するアカウント等は自動設定
                  アカウント設定
                                          HTTP BODY :
                                            OAuth
                                           x_reverse_auth_parameters = "OAuth
                                          oauth_signature="fwBAOrD88DK22qUplAASAARX0Rq0%3D
                                          ", oauth_nonce=

   aaa
                                                SignedRequestの
                                          "AkFRlWMIBPYP2ASASASAONAomQlF1XrFr2jsxFzMUFg",
                                          oauth_version="1.0", oauth_consumer_key=
                  Singed                 req
                                                responseそのまま
                                          "EH1JqS85hK8AAdAAAPzA", oauth_token=

                  Request          res
                                                            Twitter
                                          "KzLZRpY024AAAb4eBPRhB4Bt9i0UFJyW1vGcw",
                                          oauth_timestamp="1343129483",
                                          oauth_signature_method="HMAC-SHA1"";
                                           x_reverse_auth_target = EH1JqS85hK8AAdAAAPzA;


                        ACAcount
                                                                  consumer_key
                                   TWRequest
             API直接コール
                          res

                                   iOS Twitter
                                         HTTP RESPONSE
                                         oauth_token=60478457-3PK080ImqHMTGlqQlidbnGGyENw8
                                         abgDul9HTiEyI&oauth_token_secret=0M5mudKdHngTDOle
                                   framework
                                         yVarimoSuAS7CwNwJ1mFFNlSUIM&user_id=60478457&scre
                                         en_name=i2key

12年8月3日金曜日
- (void)reverseOauth {
!   // Step 1) Ask Twitter for a special request_token for reverse auth
!   NSURL *url = [NSURL URLWithString:TW_OAUTH_URL_REQUEST_TOKEN];
!
!   // "reverse_auth" is a required parameter
!   NSDictionary *dict = [NSDictionary dictionaryWithObject:TW_X_AUTH_MODE_REVERSE_AUTH forKey:TW_X_AUTH_MODE_KEY];
!   TWSignedRequest *signedRequest = [[TWSignedRequest alloc] initWithURL:url parameters:dict requestMethod:TWSignedRequestMethodPOST];
!
!   [self showProgress];
!   [signedRequest performRequestWithHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
!   !      if (!data) {
!   !      !    [self dismissProgress:@"Error occurred in Step 1."];
!   !      }
!   !      else {
!   !      !    NSString *signedReverseAuthSignature = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
!   !      !
!   !      !    // Step 2) Ask Twitter for the user's auth token and secret
!   !      !    //            include x_reverse_auth_target=CK2 and x_reverse_auth_parameters=signedReverseAuthSignature parameters
!   !      !    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
!   !      !    !     NSDictionary *step2Params = [NSDictionary dictionaryWithObjectsAndKeys:[TWSignedRequest consumerKey], TW_X_AUTH_REVERSE_TARGET,
signedReverseAuthSignature, TW_X_AUTH_REVERSE_PARMS, nil];
!   !      !    !     NSURL *authTokenURL = [NSURL URLWithString:TW_OAUTH_URL_AUTH_TOKEN];
!   !      !    !     TWRequest *step2Request = [[TWRequest alloc] initWithURL:authTokenURL parameters:step2Params requestMethod:TWRequestMethodPOST];
!   !      !    !
!   !      !    !     ACAccountType *twitterType = [self.accountStore accountTypeWithAccountTypeIdentifier:ACAccountTypeIdentifierTwitter];
!   !      !    !     NSArray *accounts = [self.accountStore accountsWithAccountType:twitterType];
!   !      !    !     [step2Request setAccount:[accounts objectAtIndex:_twitterAccountIndex]];
!   !      !    !     [step2Request performRequestWithHandler:^(NSData *responseData, NSHTTPURLResponse *urlResponse, NSError *error) {
!   !      !    !     !    if (!responseData || ((NSHTTPURLResponse*)response).statusCode >= 400) {
!   !      !    !     !    !     [self dismissProgress:@"Error occurred in Step 2."];
!   !      !    !     !    } else {
!   !      !    !     !    !     NSString *responseStr = [[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding];
!   !      !    !     !    !     [[NSUserDefaults standardUserDefaults] setObject:responseStr forKey:@"authData"];
!   !      !    !     !    !     [self sendAuthData:responseStr loginWebView:nil];
!   !      !    !     !    }
!   !      !    !     }];
!   !      !    });
!   !      }
!   }];
}




                Reverse Authでアクセストークンを取得
12年8月3日金曜日
iOS Twitter framework




             Migrating tokens
             to system accounts



12年8月3日金曜日
iOS Twitter framework

                    OAuth
               (TwitterFramework未使用)


                既存の認証済み情報
                ・username
                ・token
                ・secret ...etc



                       set
               ACAccount
               ・username
               ・token
               ・secret
                         Account       Twitter
                         framework
                      get

                Tweet
                Sheet

               iOS Twitter
               framework
12年8月3日金曜日
iOS Twitter framework

                                                   OAuth
                                            (TwitterFramework未使用)


                                             既存の認証済み情報
                                             ・username
                                             ・token
                                             ・secret ...etc



                                                      set
                                             ACAccount
                                             ・username
                                             ・token
                                             ・secret
                                                         Account                                  Twitter
                                                         framework
 self.accountStore = [[ACAccountStore alloc]init];    get
 ACAccountCredential *credential = [[ACAccountCredential alloc]initWithOAuthToken:token tokenSecret:tokenSecret];
 ACAccountType *twitterType = [self.accountStore
                                              Tweet
 accountTypeWithAccountTypeIdentifier:ACAccountTypeIdentifierTwitter];
 ACAccount *account = [[ACAccount alloc]initWithAccountType:twitterType];
 account.credential = credential;
                                              Sheet
 [self.accountStore saveAccount:account withCompletionHandler:^(BOOL success, NSError *error) {
 ! if (success) {
 ! !      NSLog(@"saved account");
 ! }
 }];
                                            iOS Twitter
                                            framework
12年8月3日金曜日
まとめ




12年8月3日金曜日
iOSのTwitterFrameworkでは
 認証が凄く簡単!(設定画面で設定すれば認証完了)
 ツイートが凄く簡単!
 でも、それ以外はややネイティブ風なTWRequest
 (良く言うと柔軟、悪く言うとやることが多い。)


iOSのTwitterFrameworkでAccessTokenを取得した
い場合は、ReverseAuthの申請をすれば出来る。
(大体20日程度、リリース前でも可能)



12年8月3日金曜日
Thank you :-)




12年8月3日金曜日

More Related Content

More from Itsuki Kuroda

結果的に組織がAgileな状態であること #agile #scrum #leanstartup
結果的に組織がAgileな状態であること #agile #scrum #leanstartup結果的に組織がAgileな状態であること #agile #scrum #leanstartup
結果的に組織がAgileな状態であること #agile #scrum #leanstartupItsuki Kuroda
 
フロー効率性とリソース効率性について #xpjug
フロー効率性とリソース効率性について #xpjugフロー効率性とリソース効率性について #xpjug
フロー効率性とリソース効率性について #xpjugItsuki Kuroda
 
事業が対峙する現実からエンジニアリングを俯瞰する #devlove
事業が対峙する現実からエンジニアリングを俯瞰する #devlove事業が対峙する現実からエンジニアリングを俯瞰する #devlove
事業が対峙する現実からエンジニアリングを俯瞰する #devloveItsuki Kuroda
 
リーンスタートアップと顧客開発とアジャイル開発を一気通貫するッ #devlove #devkan
リーンスタートアップと顧客開発とアジャイル開発を一気通貫するッ #devlove #devkanリーンスタートアップと顧客開発とアジャイル開発を一気通貫するッ #devlove #devkan
リーンスタートアップと顧客開発とアジャイル開発を一気通貫するッ #devlove #devkanItsuki Kuroda
 
新規事業が対峙する現実からエンジニアリングを俯瞰する #devsumiB #devsumi
新規事業が対峙する現実からエンジニアリングを俯瞰する #devsumiB #devsumi新規事業が対峙する現実からエンジニアリングを俯瞰する #devsumiB #devsumi
新規事業が対峙する現実からエンジニアリングを俯瞰する #devsumiB #devsumiItsuki Kuroda
 
LEANSTARTUPアンチパターン #devlove #leanstartup
LEANSTARTUPアンチパターン #devlove #leanstartupLEANSTARTUPアンチパターン #devlove #leanstartup
LEANSTARTUPアンチパターン #devlove #leanstartupItsuki Kuroda
 
日経BPリーン式創業塾 #leanstartup #リーンスタートアップ
日経BPリーン式創業塾 #leanstartup #リーンスタートアップ日経BPリーン式創業塾 #leanstartup #リーンスタートアップ
日経BPリーン式創業塾 #leanstartup #リーンスタートアップItsuki Kuroda
 
LEAN STARTUP OVERVIEW
LEAN STARTUP OVERVIEWLEAN STARTUP OVERVIEW
LEAN STARTUP OVERVIEWItsuki Kuroda
 
エンジニアが成長のエンジンになる日 #devsumi #natsumiC7
エンジニアが成長のエンジンになる日 #devsumi  #natsumiC7エンジニアが成長のエンジンになる日 #devsumi  #natsumiC7
エンジニアが成長のエンジンになる日 #devsumi #natsumiC7Itsuki Kuroda
 
社内スタートアップによる組織の成長に伴い発生する痛みとその解決策について45分拡大版 #devsumi #devsumiB
社内スタートアップによる組織の成長に伴い発生する痛みとその解決策について45分拡大版 #devsumi #devsumiB社内スタートアップによる組織の成長に伴い発生する痛みとその解決策について45分拡大版 #devsumi #devsumiB
社内スタートアップによる組織の成長に伴い発生する痛みとその解決策について45分拡大版 #devsumi #devsumiBItsuki Kuroda
 
LEANSTARTUPの現場 #leanstartup
LEANSTARTUPの現場 #leanstartupLEANSTARTUPの現場 #leanstartup
LEANSTARTUPの現場 #leanstartupItsuki Kuroda
 
リーンスタートアップ概論
リーンスタートアップ概論リーンスタートアップ概論
リーンスタートアップ概論Itsuki Kuroda
 
社内スタートアップによる組織の成長に伴い発生する痛みとその解決策について(Rebuild) #devlove
社内スタートアップによる組織の成長に伴い発生する痛みとその解決策について(Rebuild) #devlove 社内スタートアップによる組織の成長に伴い発生する痛みとその解決策について(Rebuild) #devlove
社内スタートアップによる組織の成長に伴い発生する痛みとその解決策について(Rebuild) #devlove Itsuki Kuroda
 
Let's design MVP #devlove #leanstartup
Let's design MVP #devlove #leanstartupLet's design MVP #devlove #leanstartup
Let's design MVP #devlove #leanstartupItsuki Kuroda
 
社内スタートアップによる組織の成長に伴い発生する痛みとその解決策(スクラム&リーンスタートアップ導入)について #devlove #devlove創
社内スタートアップによる組織の成長に伴い発生する痛みとその解決策(スクラム&リーンスタートアップ導入)について #devlove #devlove創社内スタートアップによる組織の成長に伴い発生する痛みとその解決策(スクラム&リーンスタートアップ導入)について #devlove #devlove創
社内スタートアップによる組織の成長に伴い発生する痛みとその解決策(スクラム&リーンスタートアップ導入)について #devlove #devlove創Itsuki Kuroda
 
Play勉強会資料(MTLブログ用)
Play勉強会資料(MTLブログ用)Play勉強会資料(MTLブログ用)
Play勉強会資料(MTLブログ用)Itsuki Kuroda
 
女子中高生とTwitter4J #twtr_hack
女子中高生とTwitter4J #twtr_hack女子中高生とTwitter4J #twtr_hack
女子中高生とTwitter4J #twtr_hackItsuki Kuroda
 
学生向けAndroid勉強会(入門編)
学生向けAndroid勉強会(入門編)学生向けAndroid勉強会(入門編)
学生向けAndroid勉強会(入門編)Itsuki Kuroda
 
Nfcハッカソン発表資料
Nfcハッカソン発表資料Nfcハッカソン発表資料
Nfcハッカソン発表資料Itsuki Kuroda
 

More from Itsuki Kuroda (19)

結果的に組織がAgileな状態であること #agile #scrum #leanstartup
結果的に組織がAgileな状態であること #agile #scrum #leanstartup結果的に組織がAgileな状態であること #agile #scrum #leanstartup
結果的に組織がAgileな状態であること #agile #scrum #leanstartup
 
フロー効率性とリソース効率性について #xpjug
フロー効率性とリソース効率性について #xpjugフロー効率性とリソース効率性について #xpjug
フロー効率性とリソース効率性について #xpjug
 
事業が対峙する現実からエンジニアリングを俯瞰する #devlove
事業が対峙する現実からエンジニアリングを俯瞰する #devlove事業が対峙する現実からエンジニアリングを俯瞰する #devlove
事業が対峙する現実からエンジニアリングを俯瞰する #devlove
 
リーンスタートアップと顧客開発とアジャイル開発を一気通貫するッ #devlove #devkan
リーンスタートアップと顧客開発とアジャイル開発を一気通貫するッ #devlove #devkanリーンスタートアップと顧客開発とアジャイル開発を一気通貫するッ #devlove #devkan
リーンスタートアップと顧客開発とアジャイル開発を一気通貫するッ #devlove #devkan
 
新規事業が対峙する現実からエンジニアリングを俯瞰する #devsumiB #devsumi
新規事業が対峙する現実からエンジニアリングを俯瞰する #devsumiB #devsumi新規事業が対峙する現実からエンジニアリングを俯瞰する #devsumiB #devsumi
新規事業が対峙する現実からエンジニアリングを俯瞰する #devsumiB #devsumi
 
LEANSTARTUPアンチパターン #devlove #leanstartup
LEANSTARTUPアンチパターン #devlove #leanstartupLEANSTARTUPアンチパターン #devlove #leanstartup
LEANSTARTUPアンチパターン #devlove #leanstartup
 
日経BPリーン式創業塾 #leanstartup #リーンスタートアップ
日経BPリーン式創業塾 #leanstartup #リーンスタートアップ日経BPリーン式創業塾 #leanstartup #リーンスタートアップ
日経BPリーン式創業塾 #leanstartup #リーンスタートアップ
 
LEAN STARTUP OVERVIEW
LEAN STARTUP OVERVIEWLEAN STARTUP OVERVIEW
LEAN STARTUP OVERVIEW
 
エンジニアが成長のエンジンになる日 #devsumi #natsumiC7
エンジニアが成長のエンジンになる日 #devsumi  #natsumiC7エンジニアが成長のエンジンになる日 #devsumi  #natsumiC7
エンジニアが成長のエンジンになる日 #devsumi #natsumiC7
 
社内スタートアップによる組織の成長に伴い発生する痛みとその解決策について45分拡大版 #devsumi #devsumiB
社内スタートアップによる組織の成長に伴い発生する痛みとその解決策について45分拡大版 #devsumi #devsumiB社内スタートアップによる組織の成長に伴い発生する痛みとその解決策について45分拡大版 #devsumi #devsumiB
社内スタートアップによる組織の成長に伴い発生する痛みとその解決策について45分拡大版 #devsumi #devsumiB
 
LEANSTARTUPの現場 #leanstartup
LEANSTARTUPの現場 #leanstartupLEANSTARTUPの現場 #leanstartup
LEANSTARTUPの現場 #leanstartup
 
リーンスタートアップ概論
リーンスタートアップ概論リーンスタートアップ概論
リーンスタートアップ概論
 
社内スタートアップによる組織の成長に伴い発生する痛みとその解決策について(Rebuild) #devlove
社内スタートアップによる組織の成長に伴い発生する痛みとその解決策について(Rebuild) #devlove 社内スタートアップによる組織の成長に伴い発生する痛みとその解決策について(Rebuild) #devlove
社内スタートアップによる組織の成長に伴い発生する痛みとその解決策について(Rebuild) #devlove
 
Let's design MVP #devlove #leanstartup
Let's design MVP #devlove #leanstartupLet's design MVP #devlove #leanstartup
Let's design MVP #devlove #leanstartup
 
社内スタートアップによる組織の成長に伴い発生する痛みとその解決策(スクラム&リーンスタートアップ導入)について #devlove #devlove創
社内スタートアップによる組織の成長に伴い発生する痛みとその解決策(スクラム&リーンスタートアップ導入)について #devlove #devlove創社内スタートアップによる組織の成長に伴い発生する痛みとその解決策(スクラム&リーンスタートアップ導入)について #devlove #devlove創
社内スタートアップによる組織の成長に伴い発生する痛みとその解決策(スクラム&リーンスタートアップ導入)について #devlove #devlove創
 
Play勉強会資料(MTLブログ用)
Play勉強会資料(MTLブログ用)Play勉強会資料(MTLブログ用)
Play勉強会資料(MTLブログ用)
 
女子中高生とTwitter4J #twtr_hack
女子中高生とTwitter4J #twtr_hack女子中高生とTwitter4J #twtr_hack
女子中高生とTwitter4J #twtr_hack
 
学生向けAndroid勉強会(入門編)
学生向けAndroid勉強会(入門編)学生向けAndroid勉強会(入門編)
学生向けAndroid勉強会(入門編)
 
Nfcハッカソン発表資料
Nfcハッカソン発表資料Nfcハッカソン発表資料
Nfcハッカソン発表資料
 

Recently uploaded

CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?akihisamiyanaga1
 
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)UEHARA, Tetsutaro
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)Hiroshi Tomioka
 
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...博三 太田
 
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfFumieNakayama
 
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案sugiuralab
 
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineerYuki Kikuchi
 
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfFumieNakayama
 

Recently uploaded (8)

CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
 
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
 
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
 
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
 
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
 
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
 
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
 

iOSのTwitterFrameworkを使ってみたら #twtr_hack

  • 1. iOSの TwitterFramework を使ってみたら・・ @i2key 12年8月3日金曜日
  • 7. @i2key <言語>  Java屋  最近Objective-C <仕事>  ネット企業のR&D部門で  サービス企画、開発 12年8月3日金曜日
  • 8. ソーシャル音楽アプリ Attacca ミュージック(無料)最高2位 (ノンプロモーション) JASRAC許諾番号 12年8月3日金曜日 9010672028Y31018
  • 9. 音楽は 好きですか? 12年8月3日金曜日
  • 11. あなたのプレイリストは懐メロばかりに なっていないですか? 12年8月3日金曜日
  • 12. 学生の頃に比べて 明らかに新しい音楽に 出会う機会が減っている 12年8月3日金曜日
  • 13. 毎日が忙しく、 音楽に出会う場に 行かなくなった h"p://jigokuno.img.jugem.jp/20090624_1292358.gif 12年8月3日金曜日
  • 14. 毎日が忙しく、 音楽に出会う番組を見なくなった h"p://jigokuno.img.jugem.jp/20090624_1292358.gif 12年8月3日金曜日
  • 16. 音楽番組を見ていたときのような 受動的な音楽の聴き方をしたい 12年8月3日金曜日
  • 17. どうせ聴くなら、 電車で隣に座っている知らない人が 何を聴いてるかよりも 12年8月3日金曜日
  • 19. そんな想いを解決してくれます。 そう、このAttaccaならね。 12年8月3日金曜日
  • 23. 刺激の欲しいあなた。今なら漏れなく、 スリル感のある開発ができますよ!Play2.0ならね http://i2key.hateblo.jp/entry/playstudy3 12年8月3日金曜日
  • 24. hMps API!KEY Manager TwiMer APNS contro Model C2DM ller Port ! SSL! Manager ! JSON! ! ! Dynamo! Dyn Model DB! amo HTML! AWS!SDK Playframework!2.0 Apache! JVM Amazon!Linux!(MTL!Amazon!Image) ! OS FW FW ( ) 12年8月3日金曜日
  • 25. 認証 ツイート TwitterFramework プロフィール取得 フレンドリストの取得 12年8月3日金曜日
  • 28. iOS Twitter framework Using the TweetSheet API requests with TWRequest Using Reverse Auth Migrating tokens to System Accounts 12年8月3日金曜日
  • 29. iOS Twitter framework Account framework ACAccount ・username ・token ・secret set アカウント設定 OAuth get ツイート Tweet https://api.twitter.com/1/statuses/update Sheet Twitter ACAcount TWRequest https://api.twitter.com/1/foo/bar API直接コール iOS Twitter framework 12年8月3日金曜日
  • 30. iOS Twitter framework Using the TweetSheet 12年8月3日金曜日
  • 31. iOS Twitter framework TweetSheet 12年8月3日金曜日
  • 32. iOS Twitter framework Account framework ACAccount ・username ・token ・secret set アカウント設定 OAuth get ツイート Tweet https://api.twitter.com/1/statuses/update Sheet Twitter ACAcount TWRequest https://api.twitter.com/1/foo/bar API直接コール iOS Twitter framework 12年8月3日金曜日
  • 33. iOS Twitter framework Account framework ACAccount ・username ・token ・secret set アカウント設定 OAuth get ツイート Tweet https://api.twitter.com/1/statuses/update Sheet Twitter ACAcount TWRequest https://api.twitter.com/1/foo/bar API直接コール iOS Twitter framework 12年8月3日金曜日
  • 34. iOS Twitter framework Account framework ACAccount ・username ・token ・secret set アカウント設定 OAuth get ツイート Tweet https://api.twitter.com/1/statuses/update Sheet Twitter self.accountStore = [[ACAccountStore alloc] init]; ACAccountType *twitterType = [self.accountStore accountTypeWithAccountTypeIdentifier:ACAccountTypeIdentifierTwitter]; ACAcount TWRequest https://api.twitter.com/1/foo/bar [self.accountStore requestAccessToAccountsWithType:twitterType API直接コール withCompletionHandler: ^(BOOL granted, NSError *error) { ! ! ! ! ! iOS Twitter if (granted) { //アクセス権を得た場合にやりたい処理 ! ! } }]; framework 12年8月3日金曜日
  • 35. Using the TweetSheet アカウントが設定されていること if ([TWTweetComposeViewController canSendTweet]) { //やりたいこと! ! } 12年8月3日金曜日
  • 36. Using the TweetSheet ツイートの入力画面の表示 - (void)showTweetSheet { // Create an instance of the Tweet Sheet TWTweetComposeViewController *tweetSheet = [[TWTweetComposeViewController alloc] init];   // Set the initial body of the Tweet [tweetSheet setInitialText: @" RIVER / 10-FEET #attacca #nowplaying #music"];   // Presents the Tweet Sheet to the user [self presentViewController: tweetSheet animated:NO completion:^{ NSLog(@"Tweet sheet has been presented."); }]; } 12年8月3日金曜日
  • 37. Using the TweetSheet 前述のチェック無しでもよい そうするとこんな画面になり 設定画面へ遷移出来る 12年8月3日金曜日
  • 38. Using the TweetSheet このダイアログは TweetSheetでだけ使える 設定に飛ばすメソッドを用意して欲しい 自前でやるには今まではURLSchemeで設定画面に飛ばす ことは出来ていたが、iOS5.1で使えなくなった。 TweetSheetのアルファを0にしてツイートシートを隠せば それっぽく見えたけどやめといた しかたがないので、 OAuthの自前のも残しておいた 12年8月3日金曜日
  • 39. iOS Twitter framework API requests with TWRequest 12年8月3日金曜日
  • 40. iOS Twitter framework Account framework ACAccount ・username ・token ・secret set アカウント設定 OAuth get ツイート Tweet https://api.twitter.com/1/statuses/update Sheet Twitter ACAcount TWRequest https://api.twitter.com/1/foo/bar API直接コール iOS Twitter framework 12年8月3日金曜日
  • 41. iOS Twitter framework NSDictionary *params //引数をkey,value APIのURLを直接書く Account framework NSURL *url = [NSURL URLWithString:@"http://api.twitter.com/1/statuses/home_timeline.json"]; TWRequest *request = [[TWRequest alloc] initWithURL:url parameters:params requestMethod:TWRequestMethodPOST]; ACAccount //----認証が必要なAPIを使う場合 START---- ・username ACAccountType *twitterType = [self.accountStore ・token 認証済みアカウントを取り出して accountTypeWithAccountTypeIdentifier:ACAccountTypeIdentifierTwitter]; ・secret set NSArray *accounts = [self.accountStore accountsWithAccountType:twitterType]; リクエストにセットする [request setAccount:[accounts objectAtIndex:_twitterAccountIndex]]; //----認証が必要なAPIを使う場合 END------ アカウント設定 OAuth [request performRequestWithHandler:^(NSData *responseData, NSHTTPURLResponse *urlResponse, NSError *error) { ! if (!responseData || ((NSHTTPURLResponse*)response).statusCode >= 400) { ! ! //エラー!! get ! } else { ! ! NSString *responseStr = [[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding]; ! ! ツイート Tweet //JSONの場合は、NSJSONSerializationとかでデシリアライズする https://api.twitter.com/1/statuses/update Twitter ! } }]; JSONをデシリアライズする Sheet ACAcount TWRequest https://api.twitter.com/1/foo/bar API直接コール iOS Twitter framework 12年8月3日金曜日
  • 43. iOS Twitter framework Using Reverse Auth 12年8月3日金曜日
  • 44. iOS Twitter framework Account framework ACAccount ・username ・token ・secret set アカウント設定 OAuth ACAcount TWRequest https://api.twitter.com/1/foo/bar API直接コール Twitter iOS Twitter framework Twitter API Call (Twitter4J) Attacca API Server 12年8月3日金曜日
  • 45. iOS Twitter framework Account framework ACAccount ・username ・token ・secret set アカウント設定 OAuth ACAcount TWRequest https://api.twitter.com/1/foo/bar API直接コール Twitter iOS Twitter framework Twitter API API Server側も Call (Twitter4J) AccessToken TokenSecret Attacca 欲しい API Server 12年8月3日金曜日
  • 46. iOS Twitter framework Account framework tokenやsecretを ACAccount ・username setは出来るけど、 ・token ・secret set getは出来ない アカウント設定 隠蔽化されてる OAuth ACAcount TWRequest https://api.twitter.com/1/foo/bar API直接コール Twitter iOS Twitter framework Twitter API API Server側も Call (Twitter4J) AccessToken TokenSecret Attacca 欲しい API Server 12年8月3日金曜日
  • 47. iOS Twitter framework Account framework tokenやsecretを ACAccount ・username setは出来るけど、 \(^o^)/ ・token ・secret set getは出来ない アカウント設定 隠蔽化されてる OAuth ACAcount TWRequest https://api.twitter.com/1/foo/bar オワター API直接コール Twitter iOS Twitter framework Twitter API API Server側も Call (Twitter4J) AccessToken TokenSecret Attacca 欲しい API Server 12年8月3日金曜日
  • 50. api@twitter.comにメールを送る Reverse Auth使いたい!と英語で書く 12年8月3日金曜日
  • 51. 以下のようなテンプレメールが返ってくる (Reverse Authというワードで引っ掛けてる?) Hello, Thank you for your interest in Reverse Auth access. This email is an automated response to acknowledge receipt of your email regarding Reverse Auth. A member of our team will review your request as soon as possible. Our review will proceed much more quickly if you were to reply to this ticket with the following required information: • Your App ID number (or consumer key) from https://dev.twitter.com/apps/ • A link to your application’s website • Links to screenshots of your application's user-facing Twitter functionality • Links to screenshots of your application in use Please note that our ticketing system does not accept attachments, so you will need to upload your screenshots to your server or an image host and link to them in this ticket with full URLs (HTML is not supported). If you have already provided the required information in your initial request, please respond to this ticket to affirm that the required information is present. For your application to qualify for reverse auth access, it must be production-ready and built to work with Apple iOS5. Reverse Auth will not work with devices that do not use iOS 5. We do not grant Reverse Auth for testing purposes, single-user applications, or for applications that are in the early stages of development. If you are not requesting access to reverse auth and have received this response in error, please let us know by responding to this ticket. If you have a technical question about the API, please visit our developer site, where you will find extensive documentation about the Twitter API: http:// dev.twitter.com/doc This ticket will be closed automatically if we do not receive a response from you within one week. Thanks, Twitter API Policy 12年8月3日金曜日
  • 52. 以下の項目に回答する >• Your App ID number (or consumer key) from https://dev.twitter.com/apps/ Consumer Key is following For Puroduction use : EH1JqS85hK8cGdRXjao For Development use : hynOFqui0aPokaAAAZ6g >• A link to your application’s website Sorry. This app is not yet launched. Launching is 28th June. >• Links to screenshots of your application's user-facing Twitter functionality >• Links to screenshots of your application in use http://hoge.com/foo/bar/reverseauth.pdf 12年8月3日金曜日
  • 54. iOS Twitter framework Account framework ACAccount ・username ・token ・secret set アカウント設定 OAuth aaa Singed req Request res Twitter ACAcount TWRequest API直接コール iOS Twitter framework 12年8月3日金曜日
  • 55. iOS Twitter framework URL https://api.twitter.com/oauth/request_token HTTP HEADER : Authorization Account framework OAuth oauth_timestamp="1343127155", oauth_nonce="74514FFF-274D-4AA0-84F5-X0FDDDB0801FA", oauth_version="1.0", oauth_consumer_key="AH1JqAAAAA85hK8cGdR9EPzA", ACAccount oauth_signature_method="HMAC-SHA1", ・username ・token oauth_signature="G0CCHWVTIQn0aZwjYJay%2BjG%3F3FF%3D" ・secret set HTTP BODY : アカウント設定 x_auth_mode=reverse_auth& OAuth seancook : TWIOS5ReverseAuthExample https://github.com/seancook aaa Singed req https://api.twitter.com/1/statuses/update Request res Twitter HTTP RESPONSE OAuth oauth_token="rc2qU1XTbZ7ehPUAqfvbaAA9PljaOd0keCk8UeImE", ACAcount oauth_signature="rjhWzOAsnw20E8YbVJYDPAcRoASE%3D", TWRequest https://api.twitter.com/1/foo/bar oauth_consumer_key="AH1JqAAAAA85hK8cGdR9EPzA", oauth_signature_method="HMAC-SHA1", API直接コール oauth_timestamp="1343127155", iOS Twitter oauth_version="1.0", oauth_nonce="umqOqVVBBABUACCb5wAoJRfhsNppsEBVHDB76I2jw" framework 12年8月3日金曜日
  • 56. iOS Twitter framework Account framework URL ACAccount https://api.twitter.com/oauth/access_token ・username ・token ・secret set HTTP HEADER : TWRequestにて認証するアカウント等は自動設定 アカウント設定 HTTP BODY : OAuth x_reverse_auth_parameters = "OAuth oauth_signature="fwBAOrD88DK22qUplAASAARX0Rq0%3D ", oauth_nonce= "AkFRlWMIBPYP2ASASASAONAomQlF1XrFr2jsxFzMUFg", aaa oauth_version="1.0", oauth_consumer_key= Singed req "EH1JqS85hK8AAdAAAPzA", oauth_token= Request res oauth_timestamp="1343129483", Twitter "KzLZRpY024AAAb4eBPRhB4Bt9i0UFJyW1vGcw", oauth_signature_method="HMAC-SHA1""; x_reverse_auth_target = EH1JqS85hK8AAdAAAPzA; ACAcount TWRequest API直接コール res iOS Twitter HTTP RESPONSE oauth_token=60478457-3PK080ABCqHMTGlCBBlidbnGGyEN w8abgDul9HTiEyI&oauth_token_secret=0M5671AdHTDOle framework yVarimoSuAS7CwNwJ1mFFA432SUIM&user_id=60478457&sc reen_name=i2key 12年8月3日金曜日
  • 57. iOS Twitter framework Account framework URL ACAccount https://api.twitter.com/oauth/access_token ・username ・token ・secret set HTTP HEADER : TWRequestにて認証するアカウント等は自動設定 アカウント設定 HTTP BODY : OAuth x_reverse_auth_parameters = "OAuth oauth_signature="fwBAOrD88DK22qUplAASAARX0Rq0%3D ", oauth_nonce= aaa SignedRequestの "AkFRlWMIBPYP2ASASASAONAomQlF1XrFr2jsxFzMUFg", oauth_version="1.0", oauth_consumer_key= Singed req responseそのまま "EH1JqS85hK8AAdAAAPzA", oauth_token= Request res Twitter "KzLZRpY024AAAb4eBPRhB4Bt9i0UFJyW1vGcw", oauth_timestamp="1343129483", oauth_signature_method="HMAC-SHA1""; x_reverse_auth_target = EH1JqS85hK8AAdAAAPzA; ACAcount consumer_key TWRequest API直接コール res iOS Twitter HTTP RESPONSE oauth_token=60478457-3PK080ImqHMTGlqQlidbnGGyENw8 abgDul9HTiEyI&oauth_token_secret=0M5mudKdHngTDOle framework yVarimoSuAS7CwNwJ1mFFNlSUIM&user_id=60478457&scre en_name=i2key 12年8月3日金曜日
  • 58. - (void)reverseOauth { ! // Step 1) Ask Twitter for a special request_token for reverse auth ! NSURL *url = [NSURL URLWithString:TW_OAUTH_URL_REQUEST_TOKEN]; ! ! // "reverse_auth" is a required parameter ! NSDictionary *dict = [NSDictionary dictionaryWithObject:TW_X_AUTH_MODE_REVERSE_AUTH forKey:TW_X_AUTH_MODE_KEY]; ! TWSignedRequest *signedRequest = [[TWSignedRequest alloc] initWithURL:url parameters:dict requestMethod:TWSignedRequestMethodPOST]; ! ! [self showProgress]; ! [signedRequest performRequestWithHandler:^(NSData *data, NSURLResponse *response, NSError *error) { ! ! if (!data) { ! ! ! [self dismissProgress:@"Error occurred in Step 1."]; ! ! } ! ! else { ! ! ! NSString *signedReverseAuthSignature = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; ! ! ! ! ! ! // Step 2) Ask Twitter for the user's auth token and secret ! ! ! // include x_reverse_auth_target=CK2 and x_reverse_auth_parameters=signedReverseAuthSignature parameters ! ! ! dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ ! ! ! ! NSDictionary *step2Params = [NSDictionary dictionaryWithObjectsAndKeys:[TWSignedRequest consumerKey], TW_X_AUTH_REVERSE_TARGET, signedReverseAuthSignature, TW_X_AUTH_REVERSE_PARMS, nil]; ! ! ! ! NSURL *authTokenURL = [NSURL URLWithString:TW_OAUTH_URL_AUTH_TOKEN]; ! ! ! ! TWRequest *step2Request = [[TWRequest alloc] initWithURL:authTokenURL parameters:step2Params requestMethod:TWRequestMethodPOST]; ! ! ! ! ! ! ! ! ACAccountType *twitterType = [self.accountStore accountTypeWithAccountTypeIdentifier:ACAccountTypeIdentifierTwitter]; ! ! ! ! NSArray *accounts = [self.accountStore accountsWithAccountType:twitterType]; ! ! ! ! [step2Request setAccount:[accounts objectAtIndex:_twitterAccountIndex]]; ! ! ! ! [step2Request performRequestWithHandler:^(NSData *responseData, NSHTTPURLResponse *urlResponse, NSError *error) { ! ! ! ! ! if (!responseData || ((NSHTTPURLResponse*)response).statusCode >= 400) { ! ! ! ! ! ! [self dismissProgress:@"Error occurred in Step 2."]; ! ! ! ! ! } else { ! ! ! ! ! ! NSString *responseStr = [[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding]; ! ! ! ! ! ! [[NSUserDefaults standardUserDefaults] setObject:responseStr forKey:@"authData"]; ! ! ! ! ! ! [self sendAuthData:responseStr loginWebView:nil]; ! ! ! ! ! } ! ! ! ! }]; ! ! ! }); ! ! } ! }]; } Reverse Authでアクセストークンを取得 12年8月3日金曜日
  • 59. iOS Twitter framework Migrating tokens to system accounts 12年8月3日金曜日
  • 60. iOS Twitter framework OAuth (TwitterFramework未使用) 既存の認証済み情報 ・username ・token ・secret ...etc set ACAccount ・username ・token ・secret Account Twitter framework get Tweet Sheet iOS Twitter framework 12年8月3日金曜日
  • 61. iOS Twitter framework OAuth (TwitterFramework未使用) 既存の認証済み情報 ・username ・token ・secret ...etc set ACAccount ・username ・token ・secret Account Twitter framework self.accountStore = [[ACAccountStore alloc]init]; get ACAccountCredential *credential = [[ACAccountCredential alloc]initWithOAuthToken:token tokenSecret:tokenSecret]; ACAccountType *twitterType = [self.accountStore Tweet accountTypeWithAccountTypeIdentifier:ACAccountTypeIdentifierTwitter]; ACAccount *account = [[ACAccount alloc]initWithAccountType:twitterType]; account.credential = credential; Sheet [self.accountStore saveAccount:account withCompletionHandler:^(BOOL success, NSError *error) { ! if (success) { ! ! NSLog(@"saved account"); ! } }]; iOS Twitter framework 12年8月3日金曜日