お?いけるくさい?

iPhoneアプリエンジニアのたまごです。いっちょまえエンジニア目指してちいさな発見や学んだことを覚え書きしていきます!Objective-C/iOS/開発

iOS5とiOS6の違い〜Twitter Accoutの挙動で注意すべき点!〜

iOS6になって新機能が追加されて、

設定画面からの制御事項みたいなものがより高度になっているようです。

かしこいのか不便なんだかってとこみたいです。

場合によっては実装を書き分けたほうがベター!

ということでご紹介。

 

TwitterFrameworkとAccountFrameworkを使ったアプリを

作ったので、参考になれば!

不確実&予測の情報多数なのであまり信用はしないでね←

あくまでも、参考になれば!(2回目)

 

Twitterまわりの実装コードについては

実装方法たくさん落ちてると思うので一旦はしょるとして、)

 ------------------------------------------

①アカウント許可認証

 -(void)twitterAuth

サンプルなどでは上記のような名前でよくあるメソッド。

「このアプリでTwitter利用許可していい?」というメソッドを実行すると、

iOS5:「利用を許可しますか?」というアラートが毎回出現\( ^ヮ゜)>

iOS6:シンプル&スマートに...毎回確認なんて行わないゼ?ヽ(´c_,`)ノ

どうやらiOS6では一回拒否を選択すると、

その後何回利用許可を求めるメソッドを実行したとしても

スルーされる?っぽい。

(多分もうハンドラの中すら通らないぽい)

 

※極端な【例】

画面1〜5まであって順番に遷移するとして、

毎画面のviewDidLoadでこのAuthをよぶとすると、

iOS5:画面1「いいすか?」-(拒否)→画面2「いいすか?」-(拒否) と毎回出現

iOS6:画面1「いいすか?」-(拒否)→画面2以降はスルー

 

ということですね。

つまりこのステータスを変えるには、

iOS6の場合、設定画面へいって対象アプリへのTwitter利用を

「オン」に変更してもらう必要があります。

 ----------------------------------------------

②警告アラートの表示

そんなこんなで、

アカウントの利用許可を(しつこく)求めたいのであれば、

何かしらの判定を行って、

アカウント認証が拒否られた情報をもたせて、

NOだったらアラートを表示するとかしなきゃですね。

 

でもiOS5の人にとっては

別にAuth書いとくだけで毎回認証を行ってくれるので、

拒否ったうえに「設定画面いけよ!」とかいうアラートはうざいわけです。

しかもいかなくてもその認証アラートで許可しちゃえばよいわけで。

 

ということは、このアラートに書き分けが必要です。

私の場合判定を行ってアカウント利用が許可ではなかった場合、

以下のように書いてます。

(判別のところははしょっています)

※iOS5の人向けの // ->設定画面へいかす てのはアプリ内の画面のことです

 

-(void)showAuthDeniedAlert{

    if ([[[UIDevicecurrentDevice] systemVersion] floatValue] < 6.0f){

    //iOS6以下の場合アカウントが未設定かアクセス拒否

    UIAlertView *alert = [[UIAlertViewalloc] initWithTitle:@"エラー"

                                                    message:@"Twitterアカウントが\n設定されていないか、\nアプリケーションへ\nTwitterの利用が\n許可されていません。"

                                                   delegate:self

                                          cancelButtonTitle:nil

                                          otherButtonTitles:@"OK", nil];

    alert.tag = TWITTER_AUTH_DENIED_ALERT;

    [alert show];

    [alert release];//設定画面へいかす ->

    

    } elseif ([[[UIDevicecurrentDevice] systemVersion] floatValue] >= 6.0f){

    //iOS6以上の場合端末の設定へいってください。

        UIAlertView *twAlert = [[UIAlertView alloc]initWithTitle:@"エラー"

                                                         message:@"iPhoneの設定画面から\nTwitterを設定してください。"

                                                        delegate:nil

                                               cancelButtonTitle:nil

                                               otherButtonTitles:@"OK",nil];

        [twAlert show];

        [twAlert release];

     }

}

 

ここで凡ミスったのは、OSの判定文。(笑)←

iOS5、iOS6と普段くちで言うせいで 頭の中では

>= 6.0f( iOS6以上の人)

>= 5.0f( iOS5以上の人)

とかいうアホな判定式をはじめ書いて、

毎回OS5の人向けのアラートしか出ない...!なんでだ!

ってはじめなったw今考えるとすごいアホw

 

あとは

>= 6.0f

=< 6.0f

てのもうまくいかんから気をつけてくださいw(←一回やった人)

 

そんな感じでうまく判定できれば

書き分けが思った挙動になりますよん。

説明がまぜまぜなので

このまま使うとへんなことにもなると思いますが

参考になれば!