5

Kiedy próbuję użyć YouTube API dla wyszukiwania, otrzymuję ten błąd:Youtube API Key

There was a service error: 403 : The request did not specify any Android package name or signing-certificate fingerprint. Please ensure that the client is sending them or use the API Console to update your key restrictions.

W główną działalność Mam ten kod:

youtube = new YouTube.Builder(new NetHttpTransport(), JSON_FACTORY, new HttpRequestInitializer() { 
        @Override 
        public void initialize(HttpRequest httpRequest) throws IOException { 

        } 
       }).setYouTubeRequestInitializer(new YouTubeRequestInitializer(apiKey)).setApplicationName("Some Name").build(); 

W konsoli cloud mam ApiKey dla systemu Android, z ustawioną nazwą pakietu i numerem SHA-1 uzyskanym za pomocą polecenia keytool.

+0

Czy znalazłeś jakieś rozwiązanie swojego pytania? – Exception

Odpowiedz

10

Po wielu prób i błędów, rzeczą, która ostatecznie pracował dla mnie zmieniał Klucz API restrykcyjnego do Żaden zamiast Android z konsoli API Manager i zapisz. enter image description here

Po wykonaniu powyższego kroku jestem w stanie wykonać wywołanie API wyszukiwania z mojego urządzenia z systemem Android za pomocą mojego klucza API.

+1

To jedyne rozwiązanie, które zadziałało dla mnie w tym czasie. –

+3

można to uznać za obejście, działa, ale główny problem z kluczem zastrzeżonym pozostaje nierozwiązany – Choletski

+0

@Wyjątek, że to rozwiązanie nie działa w wersji release, działa tylko w fazie debugowania. Jak rozwiązać problem w wersji release? – sasuke

1

Spróbuj dokładnie sprawdzić, czy postępujesz zgodnie z konfiguracją podczas tworzenia poświadczeń OAuth. Pamiętaj, aby włączyć interfejs API danych YouTube w Konsoli programisty.

Tutaj trzeba wykonać steps.

  1. In the Package name field, enter your Android app's package name

  2. In a terminal, run the Keytool utility to get the SHA1 fingerprint for your digitally signed .apk file's public certificate.

keytool -exportcert -alias androiddebugkey -keystore ścieżka-do-debug-or-produkcyjno-kluczy -list -v

  1. Paste the SHA1 fingerprint into the form where requested.

Ja również znaleźć tutaj, w tym SO question Odpowiedział Googler że użytkownik musi przejść przez OAuth2. Ponieważ konta usług nie są obsługiwane w Data API v3.

8

W końcu znalazłem rozwiązanie tego problemu :)

Po utworzeniu API_KEY w Konsoli programisty Google i ograniczyć ją nazwą „pakiet” i „SHA-1 certyfikatu odcisk palca”, trzeba dostarczyć te dane w każda prośba o apikcję na youtube. Poniżej etapach:

1- dostać Nazwa pakietu:

String packageName = context.getPackageName(); 

2- dostać SHA-1:

private String getSHA1(String packageName){ 
    try { 
     Signature[] signatures = context.getPackageManager().getPackageInfo(packageName, PackageManager.GET_SIGNATURES).signatures; 
     for (Signature signature: signatures) { 
      MessageDigest md; 
      md = MessageDigest.getInstance("SHA-1"); 
      md.update(signature.toByteArray()); 
      return BaseEncoding.base16().encode(md.digest()); 
     } 
    } catch (PackageManager.NameNotFoundException e) { 
     e.printStackTrace(); 
    } catch (NoSuchAlgorithmException e) { 
     e.printStackTrace(); 
    } 
    return null; 
} 

3- Przygotuj youtube api nagłówek http:

youTube = new YouTube.Builder(new NetHttpTransport(), JacksonFactory.getDefaultInstance(), new HttpRequestInitializer() { 
    @Override 
    public void initialize(HttpRequest request) throws IOException { 
     String packageName = context.getPackageName(); 
     String SHA1 = getSHA1(packageName); 

     request.getHeaders().set("X-Android-Package", packageName); 
     request.getHeaders().set("X-Android-Cert",SHA1); 
    } 
}).setApplicationName(appName).build(); 

4- Zbuduj zapytanie api youtube jak chcesz: Na przykład, aby szukać wideo:

YouTube.Search.List query; 
query = youTube.search().list("id, snippet"); 
query.setKey(YOUR_API_KEY); 
query.setType("video"); 
query.setFields("items(id/videoId,snippet/title,snippet/description,snippet/thumbnails/default/url)"); 
query.setQ(search keywords); 
SearchListResponse response = query.execute(); 
List<SearchResult> results = response.getItems(); 

następnie proces zwrócone wyniki wyszukiwania.

+0

Gdzie znalazłeś informacje na temat umieszczenia w nim paczki i odcisku palca Sha1? – PrisonMike

+0

podczas tworzenia klucza klienta Android dla projektu, wymagana jest nazwa pakietu i SHA-1. –

+0

OK, to rozwiązało mój problem, dzięki, – PrisonMike

Powiązane problemy