[iOS] Twitterの公式SDK TwitterKit の利用

iOS 11から、Social.Frameworkが使えるような使えないような状態に。
いや、使えなくなる前提で動かないといけなそう。

Migrating from iOS Social Framework
https://dev.twitter.com/twitterkit/ios/migrate-social-framework

試したところ、iOS 10では動作しますが、肝心のiOS 11では動きません。
→ 翌日、そのままのソースで動きました。

現在はこの状態なので、なんとも言えません。
2017.9.22 [iOS] 画像投稿できない問題は、Twitter 7.7.2 にてほぼ改善されました!!!
UIActivityViewController(下からメニューが出てきて選択するタイプ)を利用した投稿ではうまくいきますが、TwitterをSLComposeViewControllerで単体で呼び出す場合は、画像が見えないけど投稿はされます。

2017.9.20 iOS 11では、OSにTwitter機能が含まれないため、Social.Frameworkを利用した画像投稿は今現在どうやってもできません。

2017.9.15 [iOS] 最新版のTwitter(バージョン7.7)には、アプリからの画像投稿ができなくなる不具合が含まれているようで、現在Social.Frameworkを利用するどのアプリからも画像投稿ができません。

Twitter本体をアンインストールすることで、アプリからの投稿はできますが。。。(iOS 10)

Twitterの自分のアカウントにアプリを登録

まずはアプリの登録。これは、Web(CGIとか)や通常のアプリなどから、OAuth認証で利用する場合に以前からあるものです。
iOSにSocial機能が付く前は、ここで登録して利用してました。

Twitterアプリの追加
Application Management
https://apps.twitter.com

以前は、ささっと登録できましたが、現在はアカウントに電話番号を登録してあることが必須条件となっていました。
登録時に電話番号がないと、以下のページ参照を誘導されます。

アカウントへの携帯電話番号の登録
https://support.twitter.com/articles/20172611

レッツ登録。

最初のMigratingのページ内「Register an app in the Twitter apps dashboard」にも説明があります。

  • read-writeのパーミッション選択。
  • callback URLを埋めておく
  • 「Allow this application to be used to sign in with Twitter」のチェックを付ける。

TwitterKit導入!!

ダウンロードは、CocoaPodsを利用するか、直接ダウンロードして入れるか。

https://dev.twitter.com/twitterkit/ios/installation

Podの場合–> Install Twitter Kit Using CocoaPods
直DLの場合–> Install Twitter Kit Manually
上記ページを参照。

設定で利用するのは、Twitterに登録したアプリConsumer KeyConsumer Secretの2つの文字列。

URLSchemeの設定

twitterアプリ、認証ページとのやりとりに利用されるアプリ固有のURL。
info.plistのURL types、URLSchemesに追加します。

追加する文字列は、
twitterkit-アプリのConsumer Key

このスキームで呼ばれた場合に、アプリ側で受け取れる記述をします。

TwitterKitのヘッダ

#import <TwitterKit/TwitterKit.h>

AppDelegateのopenURLへの追記。openURLが無ければ追加です。

- (BOOL)application:(UIApplication *)app
            openURL:(NSURL *)url
            options:(NSDictionary<UIApplicationOpenURLOptionsKey, id> *)options{

    if([[Twitter sharedInstance] application:app openURL:url options:options]){
        return true;
    }
...
}

TwitterKitのインスタンス初期化用に、didFinishLaunchingWithOptionsへの追記。

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    [[Twitter sharedInstance] startWithConsumerKey:@"アプリのConsumer Key" consumerSecret:@"アプリのConsumer Secret"];
...

これで利用準備は完了です。

投稿する!!!

Compose Tweets
https://dev.twitter.com/twitterkit/ios/compose-tweets

    TWTRComposer *composer = [[TWTRComposer alloc] init];
    [composer setText:@"投稿するメッセージ"];
    [composer setImage:投稿するUIImage*];
    
    // Called from a UIViewController
    [composer showFromViewController:self completion:^(TWTRComposerResult result) {
        if (result == TWTRComposerResultCancelled) {
            NSLog(@"Tweet composition cancelled");
        }
        else {
            NSLog(@"Sending Tweet!");
        }
    }];

Twitterアプリがインストールされていると、そちらへ遷移し、アカウント利用許可が促されます。
一度許可すると、その後再度聞かれることはないです。
アプリ再インストールしても、聞かれません。
シミュレーターだとリセットでいいですが、実機の場合はログアウト処理でも別途用意しないとデバッグできなくなりそう。

ログアウト処理
Log In with Twitter
https://dev.twitter.com/twitterkit/ios/log-in-with-twitter

TWTRSessionStore *store = [[Twitter sharedInstance] sessionStore];
NSString *userID = store.session.userID;

[store logOutUserID:userID];

TWTRComposerではなく、TWTRComposerViewControllerを利用すると、呼び元のViewControllerを指定できました。
こちらを利用する場合は、事前にログイン有無を確認してほしいとの記載。

上記のCompose Tweetsのヘルプページのソースほぼそのままで利用できます。
サンプルではTWTRComposerViewControllerのemptyComposerを利用しているので、その部分を以下のように変更して使えますね。

        TWTRComposerViewController *composer = [[TWTRComposerViewController alloc] initWithInitialText:@"メッセージ" image:画像UIImage videoURL:nil];
        //composer.delegate = self;

TWTRComposerViewController部分、公式ドキュメントに不具合があります。
UIAlertControllerにボタン設定がないので、表示後に閉じれません。

UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"No Twitter Accounts Available" message:@"You must log in before presenting a composer." preferredStyle:UIAlertControllerStyleAlert];
[self presentViewController:alert animated:YES completion:nil];

↓ 変更

UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"No Twitter Accounts Available" message:@"You must log in before presenting a composer." preferredStyle:UIAlertControllerStyleAlert];

// ボタン追加
[alert addAction:[UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleDefault handler:nil]];

[self presentViewController:alert animated:YES completion:nil];

と、2パターンくらいありますが、最初のTWTRComposerだけの実装で事足りそうです(?)と、ちょっと思いましたが、そうでもなく。

ログインは最初のツイート時にできますが、ログアウトとアカウント変更ができません。
そのあたりは各自実装が必要となりますね。

複数アカウント対応した、投稿前の変更なども、アプリごとの実装に。
TwitterがOSに含まれない、初期の頃の実装方法に戻りました。

結構とても大変に面倒かもしれない。

Twitter本体がインストールされていれば、Social.Frameworkはとりあえず動作しそう(現在の不具合が解消されれば)なので、今後のために早めにやっておくか否かというところでしょうか。

FacebookもSDK対応ですかね。。
[FacebookSDK] 画像やリンクの投稿

シェアする

  • このエントリーをはてなブックマークに追加

フォロミー

コメントをどうぞ

メールアドレスが公開されることはありません。