2017-08-18 7 views
1

私はチェックアウトプロセスのためにWebViewに入るネイティブアンドロイドアプリを持っています。私はアプリを通じて収益を追跡するためにappsflyerを実装しています。どのボタンがページ上でクリックされたのか、どのアイテム価格が収益になるのかを検出するにはどうすればよいですか?WebViewのボタンをクリックすると値を取得できますか?

import android.app.Activity; 
import android.app.ProgressDialog; 
import android.content.Intent; 
import android.graphics.Bitmap; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.MotionEvent; 
import android.view.View; 
import android.webkit.WebChromeClient; 
import android.webkit.WebView; 
import android.webkit.WebViewClient; 
import android.widget.TextView; 

import com.appsflyer.AFInAppEventParameterName; 
import com.appsflyer.AFInAppEventType; 
import com.appsflyer.AppsFlyerLib; 

import org.json.JSONException; 
import org.json.JSONObject; 

import java.text.SimpleDateFormat; 
import java.util.Date; 
import java.util.HashMap; 
import java.util.Map; 

public class EventActivity extends AppCompatActivity { 

    ProgressDialog pDialog; 
    Boolean redirecting = false; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_event); 

     String appsFlyerUID = AppCore.getInstance(getApplicationContext()).getAppsFlyerUID(); 
     String idfa = AppCore.getInstance(getApplicationContext()).getMixpanelAdvertisingIdentifier(); 

     Intent intent = getIntent(); 

     try { 
      JSONObject event = new JSONObject(intent.getStringExtra("event")); 

      String eventId = event.getString("id"); 
      String title = event.getString("title"); 
      String startsAt = event.getString("starts_at"); 
      String venue = event.getString("venue"); 
      String city = event.getString("city"); 
      String state = event.getString("state"); 

      SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd'T'hh:mm:ss"); 
      Date newDate = format.parse(startsAt); 

      format = new SimpleDateFormat("EEEE, MMMM d @ h:mm a"); 
      String date = format.format(newDate); 

      ((TextView)findViewById(R.id.event_title)).setText(title); 
      ((TextView)findViewById(R.id.event_date)).setText(date); 
      ((TextView)findViewById(R.id.event_venue)).setText(venue + " - " + city + ", " + state); 

      String url = "http://tlapi.ticketliquidator.com/event_map/" + eventId + "?utm_campaign=" + idfa + "&utm_term=" + appsFlyerUID; 


      Map<String, Object> eventValue = new HashMap<String, Object>(); 
      AppsFlyerLib.getInstance().trackEvent(getApplicationContext(), "View Event " + eventId,eventValue); 


      final WebView wv = (WebView) findViewById(R.id.event_webview); 
      wv.getSettings().setJavaScriptEnabled(true); 
      final Activity self = this; 

      wv.setWebViewClient(new WebViewClient() { 
       public boolean shouldOverrideUrlLoading(WebView view, String url) { 
        redirecting = true; 
        view.loadUrl(url); 
        return true; 
       } 
       public void onPageFinished(WebView view, String url) { 
        if(redirecting){ 
         pDialog.dismiss(); 
        } 
       } 
       public void onPageStarted(WebView view, String url, Bitmap favicon) { 
        if(redirecting){ 
         pDialog = new ProgressDialog(self); 
         pDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER); 
         pDialog.setMessage(" Loading..."); 
         pDialog.setCancelable(true); 
         pDialog.show(); 
        } 

       } 
      }); 


      pDialog = new ProgressDialog(this); 
      pDialog.setMessage("Getting event..."); 
      pDialog.show(); 

      wv.setWebChromeClient(new WebChromeClient() { 
       public void onProgressChanged(WebView view, int progress) { 

        if(progress == 100) 
         pDialog.dismiss(); 
       } 
      }); 

      wv.loadUrl(url); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 


    } 
} 

これはWebViewのための私のアンドロイドクラスです。私は、私はWebViewの中でクリックされたボタンを知って、そのボタンの横の価格を取得する必要があります...このウェブページから情報を引き出すために

Api WebView

をしようとしています。その後私は追跡のためにappsflyerにそれを送り返します。

はあなたのWebView内のボタンクリックのイベントにアクセスすることはできません

答えて

0

、WebViewのは、htmlページを実行するために使用され、そのためにあなたは、onClickイベントに

1

あなたをキャプチャするためにJavaScriptを使用して、HTMLページ内でコーディングする必要がページをロードした後、あなたはJavaScriptを注入し、それぞれのDOMを見つけることができるように、この

@Override 
public void onPageFinished(WebView view, String url){ 
    // your javascript as string which works fine in scratchpad 
    String javaScript ="javascript:(function() {alert();})()"; 
    webview.loadUrl(javaScript); 
} 

のようなロードされたWebページにあなたのjavascriptを注入する必要があります「そのためとして、Javaスクリプトでそれをだましてあるでしょうあなたの要件に従って、それに基づいてthisのようなjavaメソッドを呼び出すことができます。

関連する問題