https://developer.android.com/training/safetynet/safebrowsing.htmlのセーフ ブラウジング ガイドを使用して Android に単純な URL リクエスト チェックインを実装して、一部の URL に対するマルウェアまたはフィッシングの脅威を取得しようとしています。
API を実装するためにフラグメント (タブ付きアクティビティ用) を使用しています。マルウェア サイト情報を含むリクエストを取得することになっていますが、悪意のあるサイトが真の脅威ではないという応答が常に返されます。
たとえば、このサイト: http://malware.testing.google.test/testing/malware/ 透明性レポート ツールを使用: https://transparencyreport.google.com/safe-browsing/search?url=http:%2F% 2Fmalware.testing.google.test%2Ftesting%2Fmalware%2Fはサイトが悪意のあるサイトであることを示していますが、私のアプリでは信頼できるサイトであることが示されています。
ここに私のコードがあります:
public class ThreatList extends Fragment{
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_threat, container, false);
new LoadThreatData().execute();
return view;
}
@Override
public void onResume(){
super.onResume();
}
@SuppressLint("StaticFieldLeak")
private class LoadThreatData extends AsyncTask<Void, Integer, Void>{
@Override
protected Void doInBackground(Void... voids) {
SafetyNet.getClient(getActivity()).initSafeBrowsing();
Log.d("Threats", "init");
return null;
}
@Override
protected void onPostExecute(Void result){
String url = "http://malware.testing.google.test/testing/malware/"; //"go.trackmyclicks202.com";//"http://ianfette.org/"; //"http://malware.wicar.org/data/eicar.com";
SafetyNet.getClient(getActivity()).lookupUri(
url,
"MY_API_KEY_FROM_GOOGLE_DEVELOPERS_CONSOLE",
SafeBrowsingThreat.TYPE_POTENTIALLY_HARMFUL_APPLICATION,
SafeBrowsingThreat.TYPE_SOCIAL_ENGINEERING)
.addOnSuccessListener(getActivity(), new OnSuccessListener<SafetyNetApi.SafeBrowsingResponse>() {
@Override
public void onSuccess(SafetyNetApi.SafeBrowsingResponse sbResponse) {
// Indicates communication with the service was successful.
// Identify any detected threats.
if (sbResponse.getDetectedThreats().isEmpty()) {
// No threats found.
Log.e("Threats", "no threats found");
Toast.makeText(
getActivity(),
"no threats",
Toast.LENGTH_SHORT)
.show();
//always get in here
} else {
// Threats found!
Log.e("Threats", sbResponse.toString());
Toast.makeText(
getActivity(),
sbResponse.toString(),
Toast.LENGTH_SHORT)
.show();
}
}
})
.addOnFailureListener(getActivity(), new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
// An error occurred while communicating with the service.
if (e instanceof ApiException) {
// An error with the Google Play Services API contains some
// additional details.
ApiException apiException = (ApiException) e;
Log.d(TAG, "Error: " + CommonStatusCodes
.getStatusCodeString(apiException.getStatusCode()));
Toast.makeText(
getActivity(),
"error1",
Toast.LENGTH_SHORT)
.show();
// Note: If the status code, apiException.getStatusCode(),
// is SafetyNetstatusCode.SAFE_BROWSING_API_NOT_INITIALIZED,
// you need to call initSafeBrowsing(). It means either you
// haven't called initSafeBrowsing() before or that it needs
// to be called again due to an internal error.
} else {
// A different, unknown type of error occurred.
Log.d(TAG, "Error: " + e.getMessage());
Toast.makeText(
getActivity(),
"error2",
Toast.LENGTH_SHORT)
.show();
}
}
});
}
}
}
グラドルの使用では:
compile 'com.google.android.gms:play-services-safetynet:11.8.0'
マニフェストに許可を入れます:
<uses-permission android:name="android.permission.INTERNET" />
何が間違っているのかわかりません。最新バージョンの V4 API を使用していますが、どの URL を使用しても、脅威ではないことが常に示されます。V3 API は現在、使用していないため非推奨です。それ。
API は既に有効になっており、API キーと必要なすべての構成を取得していますが、Google 開発者コンソールの API パネルで、特定の API のトラフィックや使用状況がないことが示されています。助けてください!!!