2

iPhone アプリで OAuth 1.0 フローを進めています。

私はrequestTokenを持っています。requestToken のユーザー認証を実行するための適切な URL を持つ UIWebView にセグエします。これは正常に実行されます。ただし、この手順が完了したら、ユーザーはアプリに戻るために手動で「戻る」をタップする必要があります。次に、別のボタンをタップして getAccessToken を実行します。(これは明らかに進行中の作業です)。

requestToken のユーザー認証を実行した後、元に戻すことを自動化するにはどうすればよいですか? UIWebView で、ユーザーが正常にログインすると、アクセス許可を確認するページが表示され、ユーザーが [OK] をクリックすると、アプリが自動的に戻って accessToken の取得に進みます。

私はこれが初めてなので、これをうまく説明できないかもしれません。FWIW、私はsmugmug APIを使用しています。助けてくれてありがとう。

4

2 に答える 2

0

これを解決するには、特定のURLを探し、正しいURLの読み込みが完了したときにnavigationControllerスタックを手動でポップします。私のコードは次のようになります。

- (void)webViewDidFinishLoad:(UIWebView *)webView
{
    NSRange range = [webView.request.URL.absoluteString rangeOfString:@"http://thecallbackurl.com/"];
    if (range.location != NSNotFound) {
        [self.navigationController popViewControllerAnimated:YES];
    }
}

smugmug.comAPIに書き込んでいます。トークン認証が成功すると、ブラウザをコールバックURLにリダイレクトするので、それが私が探していたものです。

于 2012-04-18T08:01:03.883 に答える
0

私は iOS コーダーではありませんが、リクエスト トークンがエンド ユーザーによって承認されると、サービス プロバイダーはあなたのコールバックにリダイレクトする必要があります。UIWebView でこれを「聞く」方法が必要です。次のようなリダイレクト HTTP 応答を取得することにより、次のようになります。

301 Moved Permanently
Location: URI?oauth_token=BLAHBLAH&oauth_verifier=BLAHBLAH

そのリダイレクトをインターセプトできる場合は、おそらく UIWebView が実際にそれを完了するのを妨げ、代わりに Location ヘッダーをスクレイピングすることができます。

または、少なくともリダイレクトが完了し、実際にコールバック ページにいることを確認できるはずです。次に、非表示のアドレスバーからトークンとベリファイアを含む URL をスクレイピングする単純なケースになります。他のすべてが失敗した場合は、コールバックを実際にページにトークンとシークレットを出力させ、それをスクレイピングすることができます。

ベリファイアを取得したら、エンド ユーザーをまったく関与させずにアクセス トークンを取得できるはずです。

于 2012-04-11T11:05:26.577 に答える