OAuth + Twitter auf Android: der Rückruf fehlschlägt
Meinem Android-Anwendung verwendet Java OAuth-Bibliothek, gefunden hier für die Autorisierung auf Twitter. Ich bin in der Lage, eine Anfrage-token, autorisieren Sie den token erhalten und bekommen ein acknowlegement aber, wenn der browser versucht die call-back url, um wieder mit meiner Anwendung, ist es nicht die URL, die ich im code verwendet wird, sondern der, den ich geliefert, während die Registrierung bei Twitter.
Beachten:
1. Bei der Registrierung meine Anwendung mit twitter, habe ich eine hypothetische call-back-url:http://abz.xyc.com und legen Sie den Typ der Anwendung, die als browser.
2. Habe ich eine callback-url in meinem code "myapp" und haben einen zusätzlichen Vorsatz-filter für meine Tätigkeit mit Browsable Kategorie und Daten-Schema als "myapp".
3. URL die aufgerufen wird, wenn der Autorisierung enthält te callback-url, die ich angegeben im code.
Irgendeine Idee was mache ich hier falsch?
Relevante Code:
public class FirstActivity extends Activity
{
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
OAuthAccessor client = defaultClient();
Intent i = new Intent(Intent.ACTION_VIEW);
i.setData(Uri.parse(client.consumer.serviceProvider.userAuthorizationURL + "?oauth_token="
+ client.requestToken + "&oauth_callback=" + client.consumer.callbackURL));
startActivity(i);
}
OAuthServiceProvider defaultProvider()
{
return new OAuthServiceProvider(GeneralRuntimeConstants.request_token_URL,
GeneralRuntimeConstants.authorize_url, GeneralRuntimeConstants.access_token_url);
}
OAuthAccessor defaultClient()
{
String callbackUrl = "myapp:///";
OAuthServiceProvider provider = defaultProvider();
OAuthConsumer consumer = new OAuthConsumer(callbackUrl,
GeneralRuntimeConstants.consumer_key, GeneralRuntimeConstants.consumer_secret,
provider);
OAuthAccessor accessor = new OAuthAccessor(consumer);
OAuthClient client = new OAuthClient(new HttpClient4());
try
{
client.getRequestToken(accessor);
} catch (Exception e)
{
e.printStackTrace();
}
return accessor;
}
@Override
protected void onResume()
{
//TODO Auto-generated method stub
super.onResume();
Uri uri = this.getIntent().getData();
if (uri != null)
{
String access_token = uri.getQueryParameter("oauth_token");
}
}
}
//Manifest file
<application android:icon="@drawable/icon" android:label="@string/app_name">
<activity android:name=".FirstActivity"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="myapp"/>
</intent-filter>
</activity>
</application>
Du musst angemeldet sein, um einen Kommentar abzugeben.
Twitter nicht Ehren Rückrufe angefordert OAuth-Anfragen (Twitter-API Ankündigen) und wird nur umgeleitet, um die callback-URL angegeben, in der Anwendung Einstellungen vornehmen (beachten Sie, dass "localhost" ist nicht erlaubt).
Ich nehme an, Sie überprüft Oauth-callback-auf-android Frage.
Android Rätselraten--
Nach ein wenig Lesen, sehe ich Android browser Umleitungen MyApp:///Ihrer Anwendung und ich vermute, dass Twitter nicht wie diese maßgeschneiderten URI-Präfix. Ich bin kein android-Entwickler, aber einen Vorschlag könnte ich machen, ist to get "www.myapp.com" auf dem web und haben eine re-redirect gibt.
So haben Sie Ihre OAuth zurück zu
http://www.myapp.com/redirect.aspx?oauth_token=abc
und diese Seite umleiten, ummyapp:///oauth_token=...
(das gewünschte Ergebnis)In meinem Fall, habe ich diese arbeiten:
Und im Manifest:
In diesem Fall wird die callback-url: myapp://tweet
Sieht es für mich so, du machst das richtige und Twitter Schrauben immer durch die Annahme der registrierte callback-URL. Gibt es eine Möglichkeit, ändern Sie die eingetragene URL? Vielleicht könnte man sich erneut anmelden und versuchen, ein Android-callback nächste mal, sehen, was passiert.
Mein problem war, dass ich versuchte, um sich mit demselben Konto, das ich aus der Twitter-app. Nachdem ich mich eingeloggt habe mit meinem persönlichen Profil den Anruf wieder funktioniert (bisher).