Ich habe den letzten Tag gekämpft, um OAuth für meine Android-App implementiert zu bekommen. Ich habe ein Problem nach dem anderen bekommen. Ich möchte nur eine Anfrage unterschreiben, sie an einen Webservice senden und eine Antwort zurück erhalten (ich glaube, das ist der Ansatz mit zwei Beinen).Warum dieser Fehler: o'th.signpost.http.HttpParameters der Klasse konnte nicht gefunden werden
Ich habe Download Wegweiser:
-signpost-Core-1.2.1.2
-signpost-commonshttp4-1.2.1.2
Ich habe die Gläser zu meiner Bibliothek Build-Pfad hinzugefügt.
Gibt es irgendwo bestimmte ich muss diese JAR-Dateien in Reihenfolge für sie arbeiten?
Der Teil, mit dem ich am meisten Schwierigkeiten hatte, erzeugt eine Signatur und signiert die Anfrage schließlich. Es werden immer wieder Fehler für die HttpParemeters geworfen.
Gibt es eine Möglichkeit für mich, einen BaseString programmatisch zu generieren?
Kann jemand mich zu einem zweibeinigen Oauth android spezifisches Beispiel verweisen, das funktioniert?
Mein Code unten:
public void excecuteSigning(String targetURL){
String SOAP_ACTION = "http://amebatv.com/api/authDevice";
System.setProperty("http.keepAlive", "false");
HttpURLConnection _request = null;
DefaultHttpClient httpclient = null;
try{
CONSUMER_SECRET = app_pref.getString("consumerSecret", "");
CONSUMER_KEY = app_pref.getString("consumerKey", "");
String oaut_token = app_pref.getString("accessToken", "");
String tokenSecret = app_pref.getString("tokenSecret", "");
String deviceId = deviceInfo.getSerial();
CommonsHttpOAuthConsumer consumer = new CommonsHttpOAuthConsumer (CONSUMER_KEY,CONSUMER_SECRET);
consumer.setTokenWithSecret(oaut_token, tokenSecret);
//HttpRequest request;
HttpParameters requestParameters = new HttpParameters();
requestParameters.put("file", "vacation.jpg");
requestParameters.put(OAuth.OAUTH_CONSUMER_KEY, "dpf43f3p2l4k3l03");
requestParameters.put(OAuth.OAUTH_NONCE, "kllo9940pd9333jh");
requestParameters.put(OAuth.OAUTH_SIGNATURE_METHOD, "HMAC-SHA1");
requestParameters.put(OAuth.OAUTH_TIMESTAMP, "1191242096");
requestParameters.put(OAuth.OAUTH_TOKEN, "nnch734d00sl2jdk");
requestParameters.put(OAuth.OAUTH_VERSION, "1.0");
requestParameters.put("size", "original");
HttpPost request = new HttpPost(targetURL);
SignatureBaseString baseString = new SignatureBaseString((HttpRequest) request, requestParameters);
String base = baseString.generate();
System.out.println(":"+base);
System.out.println(computeHmac(base,"kd94hf93k423kf44&pfkkdhi9sl3r4s00"));
httpclient = new DefaultHttpClient();
ContentProducer cp = new ContentProducer() {
public void writeTo(OutputStream outstream) throws IOException {
Writer writer = new OutputStreamWriter(outstream, "UTF-8");
writeXml(writer);
}
};
HttpParameters params = new HttpParameters();
HttpEntity entity = new EntityTemplate(cp);
HttpPost request = new HttpPost(targetURL);
request.addHeader("Authorization",AUTH_HEADER);
request.addHeader("Content-Type", "text/xml; charset=utf-8");
//request.addHeader("Content-Length",""+soapXML.getBytes().length);
request.addHeader("SOAPAction",SOAP_ACTION);
request.setEntity(entity);
// sign the request
consumer.sign(request);
// send the request
//request.connect();
HttpResponse response = httpclient.execute(request);
//get response
//StringBuffer response = new StringBuffer();
InputStream instream = null;
BufferedReader br = null;
try{
int respcode = response.getStatusLine().getStatusCode();
Log.i("Server Response", ""+respcode);
//get XML from InputStream
if(respcode>= 200){
instream = response.getEntity().getContent();
client.buildDoc(instream);
}
else{
Log.i("Server Response", ""+respcode);
//instream = request.getErrorStream();
}
}catch(Exception e){
Log.i("SPLASH","Unable to create connection stream");
e.printStackTrace();
}
finally {
if(instream != null) {
Log.i("SPLASH","Disconnecting stream");
instream.close();
}
}
*/
}
catch(Exception e){
Log.i("SPLASH","Unable to create connection");
e.printStackTrace();
}finally {
if(httpclient != null) {
Log.i("SPLASH","Disconnecting");
httpclient.getConnectionManager().shutdown();
}
}
}
/*
* Method:computeHmac()
* @params: String, String
* return: String
*/
public String computeHmac(String baseString, String key)
throws NoSuchAlgorithmException,
InvalidKeyException,
IllegalStateException,
UnsupportedEncodingException
{
Mac mac = Mac.getInstance("HmacSHA1");
SecretKeySpec secret = new SecretKeySpec(key.getBytes(), mac.getAlgorithm());
mac.init(secret);
byte[] digest = mac.doFinal(baseString.getBytes());
return Base64.encodeToString(digest,Base64.URL_SAFE);
}
Entschuldigung, was meinst du (mit einem s!)? – Fabii
Erstelle ich einen libs-Ordner, ich sehe keinen in meiner Paket-Explorer-Hierarchie. – Fabii
Ja, erstelle einen libs-Ordner in deinem Android-Projekt (stelle sicher, dass die neueste Version des ADT-Plugins in Eclipse installiert ist) –