2012-06-11 45 views
12

Giả sử tôi có ứng dụng Android A được cài đặt trong thiết bị của người dùng và tôi có AppWidget với Ứng dụng của mình nơi chúng tôi cho phép các nhà phát triển Android khác xuất bản ứng dụng của họ quảng cáo quảng bá trên cơ sở Giá mỗi lượt cài đặt. Vì vậy, chúng tôi cần phải theo dõi nếu ứng dụng B đang được cài đặt trên thiết bị của người dùng thông qua giới thiệu của ứng dụng A. Hãy giả sử Android App B có quảng cáo chạy trên tiện ích Android App A và liên kết mà qua đó chúng tôi chuyển hướng người dùng ứng dụng của Người dùng ứng dụng B đến Google Play bằng tất cả dữ liệu liên kết giới thiệu. URL trông như thế này (theo khuyến cáo here -Android App A muốn theo dõi dữ liệu giới thiệu Google Play để cài đặt Android App B

https://play.google.com/store/apps/details?id=com.joelapenna.foursquared&referrer=utm_source%3Dtooyoou%26utm_medium%3Dbanner%26utm_term%3Dfoursquare%26utm_content%3Dfoursquare-tooyoou%26utm_campaign%3Dfoursquare-android)

Nếu bạn nhấn vào liên kết ở trên trong trình duyệt của bạn hoặc thực hiện một mã QR ra khỏi nó và khởi động nó nó sẽ đưa bạn đến App B trong Google Play với dữ liệu giới thiệu bắt buộc. Bây giờ, khi ứng dụng B được cài đặt trên thiết bị của người dùng và được khởi chạy lần đầu tiên, chương trình phát sóng mà ứng dụng A dự kiến ​​nhận là com.android.vending.INSTALL_REFERRER. Nếu phát sóng được nhận và utm_source là ứng dụng A thì hãy ghi lại và xử lý giao dịch. Đây là tất cả những gì chúng tôi muốn làm.

Đây là đoạn mã AndroidManifest.xml của ứng dụng A.

<application 
     android:icon="@drawable/ic_launcher" 
     android:label="@string/app_name" 
     android:debuggable="true" > 
     <activity 
      android:name=".LocateMeActivity" 
      android:label="@string/app_name" > 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 
       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 
     <receiver android:name="com.locateme.android.ReferralReceiver" android:exported="true"> 
     <intent-filter> 
     <action android:name="com.android.vending.INSTALL_REFERRER" /> 
     </intent-filter> 
    </receiver> 
    </application> 

Quyền nói thêm -

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission> 
<uses-permission android:name="android.permission.INTERNET"></uses-permission> 

Đây là lớp ReferralReceiver.java Broadcast Receiver đó là nghĩa vụ để xử lý phát sóng.

import java.io.UnsupportedEncodingException; 
import java.net.URLDecoder; 
import java.util.HashMap; 
import java.util.Map; 

import android.content.BroadcastReceiver; 
import android.content.Context; 
import android.content.Intent; 
import android.content.SharedPreferences; 
import android.os.Bundle; 

public class ReferralReceiver extends BroadcastReceiver 
{ 
    @Override 
    public void onReceive(Context context, Intent intent) 
    { 
     // Workaround for Android security issue: http://code.google.com/p/android/issues/detail?id=16006 
     try 
     { 
      final Bundle extras = intent.getExtras(); 
      if (extras != null) { 
       extras.containsKey(null); 
      } 
     } 
     catch (final Exception e) { 
      return; 
     } 

     Map<String, String> referralParams = new HashMap<String, String>(); 

     // Return if this is not the right intent. 
     if (! intent.getAction().equals("com.android.vending.INSTALL_REFERRER")) { //$NON-NLS-1$ 
      return; 
     } 

     String referrer = intent.getStringExtra("referrer"); //$NON-NLS-1$ 
     if(referrer == null || referrer.length() == 0) { 
      return; 
     } 

     try 
     { // Remove any url encoding 
      referrer = URLDecoder.decode(referrer, "x-www-form-urlencoded"); //$NON-NLS-1$ 
     } 
     catch (UnsupportedEncodingException e) { return; } 

     // Parse the query string, extracting the relevant data 
     String[] params = referrer.split("&"); // $NON-NLS-1$ 
     for (String param : params) 
     { 
      String[] pair = param.split("="); // $NON-NLS-1$ 
      referralParams.put(pair[0], pair[1]); 
     } 

     ReferralReceiver.storeReferralParams(context, referralParams); 
    } 

    private final static String[] EXPECTED_PARAMETERS = { 
     "utm_source", 
     "utm_medium", 
     "utm_term", 
     "utm_content", 
     "utm_campaign" 
    }; 

    private final static String PREFS_FILE_NAME = "ReferralParamsFile"; 

    public static void storeReferralParams(Context context, Map<String, String> params) 
    { 
     SharedPreferences storage = context.getSharedPreferences(ReferralReceiver.PREFS_FILE_NAME, Context.MODE_PRIVATE); 
     SharedPreferences.Editor editor = storage.edit(); 

     for(String key : ReferralReceiver.EXPECTED_PARAMETERS) 
     { 
      String value = params.get(key); 
      if(value != null) 
      { 
       editor.putString(key, value); 
      } 
     } 

     editor.commit(); 
    } 


    public static Map<String, String> retrieveReferralParams(Context context) 
    { 
     HashMap<String, String> params = new HashMap<String, String>(); 
     SharedPreferences storage = context.getSharedPreferences(ReferralReceiver.PREFS_FILE_NAME, Context.MODE_PRIVATE); 

     for(String key : ReferralReceiver.EXPECTED_PARAMETERS) 
     { 
      String value = storage.getString(key, null); 
      if(value != null) 
      { 
       params.put(key, value); 
      } 
     } 
     return params; 
    } 
} 

Thiết bị Debugging là trên hệ điều hành Android 2.3.4

Qua một TextView đơn giản và Button trong các hoạt động chính của App Tôi cố gắng để hiển thị các dữ liệu giới thiệu bắt bởi người nhận. Dưới đây là cuộc gọi và hiển thị -

referraltext.setText(ReferralReceiver.retrieveReferralParams(this.getApplicationContext()).toString()); 

Khi tôi khởi động liên kết giới thiệu App B trình bày ở trên, hãy vào Google Play, cài đặt nó và mở nó lần đầu tiên logcat không hiển thị quảng bá com.android.vending .INSTALL_REFERRER ở tất cả và do đó dữ liệu giới thiệu khi được hiển thị cho thấy một chuỗi rỗng.

Đồng thời khi tôi sử dụng lệnh adb bên dưới cùng một bộ thu phát sóng hoạt động như một nét duyên dáng và hiển thị dữ liệu giới thiệu.

am broadcast -a com.android.vending.INSTALL_REFERRER -n com.locateme.android/.ReferralReceiver --es "referrer" "utm_source=tooyoou&utm_medium=banner&utm_term=foursquare&utm_content=foursquare-tooyoou&utm_campaign=foursquare-android" 

Vậy điều đó có nghĩa là Google Play không phát sóng dữ liệu liên kết giới thiệu và mục đích dự kiến?

Hoặc nó có nghĩa là nó phát sóng ý định chỉ cho ứng dụng B đang được cài đặt?

Hoặc tôi đang làm điều gì đó sai?

Điều này có thể đạt được nếu không có ứng dụng B phải chèn SDK theo dõi hoặc mã của chúng tôi trong ứng dụng của họ chỉ để quảng cáo với chúng tôi.

Cảm ơn bạn rất nhiều vì sự giúp đỡ của bạn.

Thông tin - Chúng tôi không sử dụng Google Analytics SDK vì vậy chúng tôi đang sử dụng tùy chỉnh của chúng tôi Broadcast Receiver hơn là BR

Đoạn mã trên hoạt động giống như một nét duyên dáng của Google. Tôi chỉ theo lời khuyên của Lucas dưới đây trong câu trả lời được đánh dấu đúng và thay thế x-www-form-urlencoded thành UTF-8. Tại sao tôi không làm điều này lúc đầu là vì những gì một công ty phân tích di động được gọi là Localytics được đăng tại đây - http://www.localytics.com/docs/android-market-campaign-analytics/ Mã của họ có cùng một vấn đề. Vì vậy, về cơ bản những gì tôi có ngay bây giờ là đoạn mã trên trong một ứng dụng Android mà tôi đã xuất bản trong Google Play và sau đó tải xuống ứng dụng từ Google Play từ thiết bị Android của tôi đang chạy ICS, mở nó và nhấp vào Truy xuất giới thiệu và nó hoạt động. dùng thử miễn phí, đây là liên kết - https://play.google.com/store/apps/details?id=com.locateme.android&referrer=utm_source%3Dtooyoou%26utm_medium%3Dbanner%26utm_term%3Dappdownload%26utm_content%3Dimage%26utm_campaign%3Dtooyooupromo

một điều rất quan trọng mà tôi muốn nhắc lại là google play chiến dịch giới thiệu theo dõi theo cách này sẽ không hoạt động nếu bạn đang cài đặt một ứng dụng từ xa trên thiết bị của bạn sử dụng chơi google từ web. Tôi đã thử nghiệm nó và nó là một khiếm khuyết mở với Google.

+0

Xin chào Aakash, tôi có thể biết bạn có sử dụng bất kỳ SDK của bên thứ ba nào cho quy trình theo dõi này không, hãy cho tôi biết càng sớm càng tốt – Aerrow

+0

Không thực sự bạn không cần. Bạn chỉ cần viết bộ thu của riêng mình để phát chương trình phát sóng REFERRER của Google Play và xử lý nó khi cần. – Aakash

+0

Trong trường hợp của tôi, tôi cần sử dụng kịch bản trên. Bạn có thể plz hướng dẫn tôi thực hiện tính năng này không. – Aerrow

Trả lời

7

mã nguồn ở trên không chính xác.

dòng

referrer = URLDecoder.decode(referrer, "x-www-form-urlencoded"); 

nên

referrer = URLDecoder.decode(referrer, "UTF-8"); 

tài liệu android là không rõ ràng về vấn đề này, nhưng nếu bạn sử dụng x-www-form-urlencoded nó sẽ ném một mã hóa ngoại lệ không được hỗ trợ. ...

+0

Cảm ơn rất nhiều. Kiểm tra cập nhật trong câu hỏi – Aakash

0

Bạn cũng có thể sử dụng theo dõi của bên thứ ba như Theo dõi ứng dụng trên thiết bị di động từ Tunes. Điều này sẽ giúp ứng dụng Android A nhận được đăng lại bất cứ khi nào Android B được cài đặt. Các công cụ của bên thứ ba như MAT, Appsflyer là một trong những công cụ phổ biến nhất được sử dụng để theo dõi lượt cài đặt.

Các vấn đề liên quan