Reagieren Nativen & okhttp auf die Android - User-Agent
Ich versuche die User-Agent
mit React Native auf Android. Habe etwas nachgeforscht und wie es aussieht sollte ich verwenden, ein okhttp
Interceptor. Ein Beispiel, das ich gefunden habe erklärt, wie dies geschehen soll(Link) aber dann bin ich nicht sicher, wie Sie zum registrieren der Interceptor.
So um die User-Agent
ich bin mit diesem Klasse:
public class CustomInterceptor implements Interceptor {
@Override public Response intercept(Interceptor.Chain chain) throws IOException {
Request originalRequest = chain.request();
Request requestWithUserAgent = originalRequest.newBuilder()
.removeHeader("User-Agent")
.header("User-Agent", "Trevor")
.build();
return chain.proceed(requestWithUserAgent);
}
}
Dann was übrig bleibt, ist die Registrierung der oben genannten interceptor also, wo sollte es getan werden? Vielleicht in MainActivity.java
?
OkHttpClient okHttp = new OkHttpClient();
okHttp.interceptors().add(new CustomInterceptor());
Ich bin nicht immer irgendwelche Fehler bei der Erstellung der app, so dass ich denke, dass die CustomInterceptor
sollte in Ordnung sein - nur brauchen, um die app verwenden.
UPDATE:
Ich bin derzeit versuchen zu registrieren, die Abfangjäger in MainActivity
aber es wird nicht abholen:
public class MainActivity extends ReactActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
OkHttpClient client = new OkHttpClient();
client.networkInterceptors().add(new CustomInterceptor());
};
};
- Hallo @ekonstantinidis , ich Versuch
okhttp
mitreact-native
zu. Jedoch bekomme ich eine Fehlermeldung wenn ich den Befehl ausführen vonreact-native run-android
. Wie hast du erfolgreich überwunden? - Ich denke, wegen der Verwendung
okhttp
lib, die Sie nicht auf einen Fehler stoßen.react-native
verwendetokhttp3
lib und ich versuchen die gleiche lib leider.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Reagieren Native ist die Iteration so schnell, dass die akzeptierte Antwort hat bei mir nicht funktioniert.
Für RN 0.27.2 ich hatte zu importieren okhttp3.OkHttpClient in meinem CustomInterceptor und ändern Sie die attachInterceptor () - Methode in der MainActivity zu ersetzen, die dem client.
Alles aus ekonstantinidis Antwort funktioniert bei mir.
So, ich habe endlich herausgefunden. Hier ist die Lösung für das überschreiben der User-Agent des
okhttp
mit React Native.Erstellen Sie eine Datei namens
CustomInterceptor.java
:Dann in
MainActivity.java
überschreiben dieonCreate
Methode:Beachten Sie, dass ich importieren
com.facebook.react.modules.network.OkHttpClientProvider;
und überschreiben, dass Kunden anstatt einer Vanille -OkHttpClient
denn dies ist die eine, die Reagieren Nativen verwenden.Habe ich implementiert diese Funktionalität mit OkHttp und mein code ist ziemlich das gleiche wie bei dir, und alles funktioniert einwandfrei.
Erwägen Sie die Verwendung
addHeader("User-Agent", "Trevor")
stattheader("User-Agent", "Trevor")
, denn letztere ersetzen alle bereits gesetzten Header.Ich bin mit
okHttp.networkInterceptors().add(new CustomInterceptor());
stattokHttp.interceptors().add(new CustomInterceptor());
, aber ich glaube nicht, dass es ein Anliegen der hier.Update ich Tue es in
onCreate()
Methode zu. Alles funktioniert wie es sollte.MainActivity
überschreibenonCreate
und wie? Ich habe ein Beispiel auf die Frage.Altes Thema, doch wir liefen in das gleiche problem mit React Native 0.59. Dies ist, was wir getan haben, um fix (in Kotlin), denn neuere Versionen von okhttp verhindern (und eine Ausnahme werfen) wenn Sie versuchen, um einen interceptor zu einem bereits initialisierten client:
Dies wurde in einer gemeinsam genutzten Bibliothek zwischen 2 apps, also warum wir übergeben Sie den Namen der app, die version und die build-Nummer.
Nutzung von der app selbst sah aus wie:
Dieser genannt wurde aus der
onCreate
Methode in der main-activity der app.Hoffe, das hilft!