Rückruf nach Twitter-Authentifizierung
Ich versuche zu integrieren twitter, um meine app, aber ich kann nicht scheinen, um es zu arbeiten.
Dies ist mein code:
public class OAuthForTwitter extends Activity {
private CommonsHttpOAuthConsumer httpOauthConsumer;
private OAuthProvider httpOauthprovider;
public final static String consumerKey = "{removed}";
public final static String consumerSecret = "{removed}";
private final String CALLBACKURL = "sosInternational:///HierBenIkNu";
private Twitter twitter;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
doOAuth();
}
/**
* Opens the browser using signpost jar with application specific
* consumerkey and consumerSecret.
*/
private void doOAuth() {
try {
httpOauthConsumer = new CommonsHttpOAuthConsumer(consumerKey, consumerSecret);
httpOauthprovider = new DefaultOAuthProvider(
"http://twitter.com/oauth/request_token",
"http://twitter.com/oauth/access_token",
"http://twitter.com/oauth/authorize");
String authUrl = httpOauthprovider.retrieveRequestToken(httpOauthConsumer, CALLBACKURL);
this.startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(authUrl)));
} catch (Exception e) {
Toast.makeText(this, e.getMessage(), Toast.LENGTH_LONG).show();
}
}
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
Uri uri = intent.getData();
if (uri != null && uri.toString().startsWith(CALLBACKURL)) {
String verifier = uri
.getQueryParameter(oauth.signpost.OAuth.OAUTH_VERIFIER);
try {
//this will populate token and token_secret in consumer
httpOauthprovider.retrieveAccessToken(httpOauthConsumer,
verifier);
//TODO: you might want to store token and token_secret in you
//app settings!!!!!!!!
AccessToken a = new AccessToken(httpOauthConsumer.getToken(),
httpOauthConsumer.getTokenSecret());
//initialize Twitter4J
twitter = new TwitterFactory().getInstance();
twitter.setOAuthConsumer(consumerKey, consumerSecret);
twitter.setOAuthAccessToken(a);
//create a tweet
Date d = new Date(System.currentTimeMillis());
String tweet = "#OAuth working! " + d.toLocaleString();
//send the tweet
twitter.updateStatus(tweet);
} catch (Exception e) {
Toast.makeText(this, e.getMessage(), Toast.LENGTH_LONG).show();
}
}
}
}
Wenn ich fertig bin Authentifizierung auf der Twitter-Website, es sollte eine Weiterleitung mich wieder zurück auf die app.
Aber stattdessen bekomme ich diese Seite nicht gefunden:
Habe ich diese in meinem AndroidManifest:
<intent-filter>
<action android:name="android.intent.action.VIEW"></action>
<category android:name="android.intent.category.DEFAULT"></category>
<category android:name="android.intent.category.BROWSABLE"></category>
<data android:scheme="sosInternational" android:host="HierBenIkNu"></data>
</intent-filter>
Wie kann ich zurück zu meiner app mit dem Schlüssel bekomme ich Sie zurück?
- Das nächste mal, bitte entfernen consumer key und consumer secret. Dies kann genutzt werden, durch böswillige Entwickler da draußen. Ich habe entfernt es für Sie.
- Wow, das war sehr dumm von mir. Danke für die Warnung!
- Naja, zu spät, es ist sichtbar in der Geschichte. Besser ändern Sie Ihre Tasten so schnell wie möglich.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ok, es war eine sehr dumme Fehler.
Meine
<intent-filter>
war nicht in einer Anwendung..Dies ist, wie es jetzt ist:
Dieser Art dran arbeitet, nur es lädt die ganze app aus starten.
Gibt es nicht eine Möglichkeit, nur "zurück", um die Letzte Aktivität ohne Neustart die ganze app?
Habe ich das Problem gelöst. Nicht genau so, wie Sie sich entwickelt haben, aber eine leicht unterschiedliche Weise. Hier sind die Schritte zu beschreiben, was ich Tat.
Verwenden webview statt es zu öffnen im web-browser: Einer der wichtigsten Vorteile, es zu tun ist , Sie können verfolgen, die url-Weiterleitungen.
call
setWebViewClient
Methode der webview und überschreibenshouldOverrideUrlLoading
- Methode Ihrer Klasse, die ich verwendet habe innere Klasse.Haben Sie url-parameter in der Methode. Prüfen Sie, ob es startet mit Ihrem eigenen call-back-url oder nicht, (Anmerkung: Diese url enthält Benutzer -, Token-und user-Geheimnis, das ist notwendig für die Zulassung).
Nachdem Sie Ihre Aufgabe, können Sie verstecken die Aktivität oder das entfernen der webView oder Sache, die Sie wünschen.
BEARBEITEN : Dies ist die oAuth-Weg, in der Regel verwendet in der web-Anwendung, so brauchen wir nicht xAuth Weg. (Falls andere community-Mitglieder nicht kennen)
Hoffe es wird Euch helfen.
Ihre callback-URL sollte "sosInternational://HierBenIkNu" (statt "sosInternational:///HierBenIkNu") im Java-code.