Richiamata dopo l'autenticazione Twitter
Domanda
Sto cercando di integrare twitter per la mia app, ma io non riesco a farlo funzionare.
Questo è il mio codice:
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();
}
}
}
}
Quando sono autenticazione effettuata sul sito di Twitter, dovrebbe reindirizzare mi riporta al app.
Ma invece, ho questa Pagina non trovata:
Ho questo nel mio 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>
Come posso tornare alla mia app con i tasti torno?
Soluzione
Ok, era piuttosto un errore stupido.
Il mio <intent-filter>
non era all'interno di un'applicazione ..
Questo è come è ora:
<activity
android:name=".OAuthForTwitter"
android:label="@string/app_name"
android:configChanges="orientation|keyboardHidden"
android:launchMode="singleInstance">
<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="OAuthForTwitter"></data>
</intent-filter>
</activity>
Questo tipo off opere, semplicemente carica l'intera applicazione dall'inizio.
Non c'è un modo per appena 'tornare indietro' per l'ultima attività senza riavviare l'intero app?
Altri suggerimenti
Ho risolto questo. Non esattamente il modo in cui si è sviluppato, ma un lieve modo diverso. Questi sono i passi descrivendo quello che ho fatto.
-
Usa visualizzazione web invece di aprirlo nel browser Web. Uno dei vantaggi chiave di farlo è, è possibile tenere traccia i reindirizzamenti url
-
classe interna chiamata di metodo
setWebViewClient
del WebView e di override il metodoshouldOverrideUrlLoading
della classe, ho usato. -
Si avrà parametro url nel metodo. Controllare se si parte con il proprio URL Torna chiamata o no,. (Nota: Questo URL contiene utente token e segreto utente che è necessaria per l'autorizzazione)
-
Dopo aver terminato il vostro compito, è possibile nascondere l'attività o rimuovere la WebView o qualsiasi cosa che si desidera.
Modifica : Questo è il modo oAuth di solito usato in applicazioni web, quindi non abbiamo bisogno di modo XAuth. (Nel caso in cui gli altri membri della comunità non sanno)
La speranza che vi aiuterà.
L'URL di callback dovrebbe essere "sosInternational: // HierBenIkNu" (invece di "sosInternational: /// HierBenIkNu"). Nel codice Java
private final String CALLBACKURL = "sosInternational://HierBenIkNu";