11

TWTweetComposeViewController を使用して、ユーザーが [設定] -> [Twitter] に追加したユーザーの Twitter アカウントにアクセスしています。アプリが Twitter アカウントにアクセスしようとすると、次のようなメッセージを含むアラートが表示されます。

"[AppName] Would Like Access to Twitter Accounts"

「許可しない」または「OK」をタップできます。「OK」をタップすると実際にtwitterにアクセスできるようになるので、これはOS自体が表示するアラートだと思います。

上記のアラートは、iOS 5.x デバイスでテストすると表示されますが、iOS 6 デバイスでテストすると表示されません。次のメッセージを送信するとアラートが表示されると思いますが、設定で Twitter へのアプリ アクセスをまだ取得していません。

[TWTweetComposeViewController canSendTweet]

説明されているように、それは起こりません。これが iOS 6 の既知のバグかどうか知っている人はいますか? SOに関する投稿を見つけることができませんでした。別の動作の理由が他に見つからないため、バグだと思います。

参考までに、次の 2 つのデバイスでこれをテストしています。

  • iOS 5.1 を搭載した iPhone 4
  • iOS 6.0 搭載の iPhone 4

アップデート

次の方法で iOS 5 をチェックするDETweetComposeViewControllerを使用します。

+ (BOOL)de_isIOS5
{
    return (NSClassFromString(@"NSJSONSerialization") != nil);
}

しかし、NSJSONSerialization クラスは iOS 6 にも含まれているため、これが理由になることはありません。

4

1 に答える 1

30

私はこれと同じことを iOS 5.1 と iOS 6.0 で一日中整理してきました。

[設定] で Twitter アカウントが構成されている限り、私のアプリは iOS 6.0 でTWTweetComposeViewController. でアプリの Twitter アクセスを手動でオフにして、これを確認しましたSettings > Privacy > Twitter。アクセスをオフにすると、TWRequest を使用してフレンドシップを作成する機能が適切に拒否されますが、TWTweetComposeViewController. アクセスを許可するまで、毎回 iOS 5.1 でプロンプトが表示されます。

これは私には理にかなっています。ツイートTWTweetComposeViewControllerを開始するだけなので、ユーザーがデバイス全体の Twitter アカウントを既に構成している場合は、どこからでもツイートを送信するのに十分な権限が必要です。アプリごとにアクセス権を付与する必要があるのは、本当に不要な追加の手順です。

Twitter アカウントがまだ構成TWTweetComposeViewControllerされていない場合は、次のメッセージが表示されます。

No Twitter Accounts
There are no Twitter accounts
configured. You can add or create
a Twitter account in Settings.

便利なボタン「設定」と「キャンセル」付き。

これに対する補足: iOS 6 では"[AppName] Would Like Access to Twitter Accounts"、アプリが最初にアクセスを要求したときにのみメッセージが表示されます。

その後Settings > General > Reset > Reset Location & Privacy、ask プロンプトを元に戻すにはリセットする必要があります。アプリを削除して再インストール/再構築しても、「1 回確認済み」の設定は維持されます。で手動でアクセスを有効にできますがSettings > Privacy、プロンプトを再表示する唯一の方法はそのリセットです (テストにとって重要な場合)。

私が見つけた2つの追加のこと。の完了ブロックで[ACAccountStore requestAccessToAccountsWithType:options:completion:]、 if granted == NO:

  1. の場合[error code] == 6、ユーザーにはアカウントが定義されていません。
  2. の場合error == nil、ユーザーはアプリへのアクセスを今、または以前に拒否しました。以前に発生した場合、要求は警告なしで無視され、画面に警告は表示されず、[許可しない] ボタンをタップする必要もありません。
于 2012-10-01T19:35:15.473 に答える