Sto tentando di far funzionare la mia API di Google Translate ma al momento non riesco a trovare la via. Ecco come ho impostato le cose in Google Developer Console:
Ho impostato la mia impronta digitale SHA1 con i certificati di debug. E il nome del pacchetto - "bg.webmap.wordy" (che è il nome effettivo). Quando provo a effettuare una chiamata, viene restituito un errore "ipRefererBlocked" in JSON. Ma quando rimuovo l'impronta digitale e il nome del pacchetto, funziona perfettamente, ma poi tutti possono usare questa chiave, quindi è molto insicuro. Quindi il mio problema è con l'autenticazione.
La mia app invierà automaticamente questa impronta quando viene chiamata l'API? Dovrei inviarlo da solo e come? Il problema potrebbe essere nei certificati di debug?In che modo Google verifica le impronte e i pacchetti Android SHA1?
5
A
risposta
1
La mia app invierà automaticamente questa impronta digitale quando l'API è chiamata?
NO!
Devo inviarlo da solo e come?
SÌ!
Quando si imposta la restrizione della chiave API per l'app Android, è stato specificato il nome del pacchetto e l'impronta digitale del certificato SHA-1. Pertanto, quando invii una richiesta a Google, devi aggiungere queste informazioni nell'intestazione di ciascuna richiesta.
COME?
As answered here, è necessario ottenere il nome del pacchetto e il certificato SHA dal codice e quindi aggiungere all'intestazione della richiesta.
ottenere il certificato SHA:
/**
* Gets the SHA1 signature, hex encoded for inclusion with Google Cloud Platform API requests
*
* @param packageName Identifies the APK whose signature should be extracted.
* @return a lowercase, hex-encoded
*/
public static String getSignature(@NonNull PackageManager pm, @NonNull String packageName) {
try {
PackageInfo packageInfo = pm.getPackageInfo(packageName, PackageManager.GET_SIGNATURES);
if (packageInfo == null
|| packageInfo.signatures == null
|| packageInfo.signatures.length == 0
|| packageInfo.signatures[0] == null) {
return null;
}
return signatureDigest(packageInfo.signatures[0]);
} catch (PackageManager.NameNotFoundException e) {
return null;
}
}
private static String signatureDigest(Signature sig) {
byte[] signature = sig.toByteArray();
try {
MessageDigest md = MessageDigest.getInstance("SHA1");
byte[] digest = md.digest(signature);
return BaseEncoding.base16().lowerCase().encode(digest);
} catch (NoSuchAlgorithmException e) {
return null;
}
}
aggiunta alla richiesta di intestazione:
java.net.URL url = new URL(REQUEST_URL);
HttpURLConnection connection = (HttpURLConnection)url.openConnection();
try {
connection.setDoInput(true);
connection.setDoOutput(true);
connection.setRequestProperty("Content-Type", "application/json; charset=UTF-8");
connection.setRequestProperty("Accept", "application/json");
// add package name to request header
String packageName = mActivity.getPackageName();
connection.setRequestProperty("X-Android-Package", packageName);
// add SHA certificate to request header
String sig = getSignature(mActivity.getPackageManager(), packageName);
connection.setRequestProperty("X-Android-Cert", sig);
connection.setRequestMethod("POST");
// ADD YOUR REQUEST BODY HERE
// ....................
} catch (Exception e) {
e.printStackTrace();
} finally {
connection.disconnect();
}
Si può vedere piena risposta here.
Godetevi codifica :)
Problemi correlati
- 1. Come ottenere impronte SHA1 dal certificato p12?
- 2. Ottieni il certificato di impronte digitali SHA1 in Android Studio per Google Maps
- 3. Impronte digitali facili da ricordare per i dati?
- 4. In che modo Go aggiorna i pacchetti di terze parti?
- 5. Perché TemplateHaskell fa in modo che GHC carichi i pacchetti?
- 6. Codifica SHA1 in Haskell
- 7. impossibile risolvere i pacchetti Android
- 8. Libreria di verifica licenze Android e più account Google
- 9. Verifica nome utente e password in Android
- 10. In che modo Google Chrome suggerisce i completamenti di URL?
- 11. In che modo Google fornisce i risultati così velocemente?
- 12. In che modo Google riconosce un "dispositivo attendibile" con la verifica in due passaggi
- 13. API di impronte digitali per telefono Android
- 14. Come verificare che i dati POST vengano inviati dall'app Android con la firma SHA1 corretta?
- 15. I nomi dei pacchetti per domini che terminano con .do
- 16. Errore in Google Maps android "android Impossibile caricare la mappa. Impossibile contattare i server di Google."
- 17. Come caricare i pacchetti in Octave in modo permanente?
- 18. In che modo i programmi Android utilizzano NEON SIMD?
- 19. In che modo le chiusure differiscono tra foreach e list.ForEach()?
- 20. Verifica API e dominio API Google
- 21. Differenza in SHA1 in .NET e MySQL
- 22. In che modo YouTube e Google accedono reciprocamente ai cookie?
- 23. Come sincronizzare i pacchetti e le impostazioni di Emacs?
- 24. modo corretto di analizzare i pacchetti di rete in C
- 25. come trovare i pacchetti che siamo lasciati
- 26. Android: Verifica se le cuffie sono collegate
- 27. In che modo "index f2e4113..d4b9bfc 100644" in git diff corrisponde all'ID SHA1 in gitk?
- 28. Che cos'è Google Web Driver in Android SDK Manager?
- 29. Samsung supporterà l'API di impronte digitali di Google da Marshmallow?
- 30. in che modo Android memorizza ed esegue programmi
Avete trovato la risposta alla tua domanda, @BabbevDan? – marcv
No, l'ho chiuso in modo non protetto – BabbevDan