我正在尝试跟踪 APK 安装。当用户登陆下载页面(而不是商店)时,他来自特定来源。当用户点击下载时,APK 将被安装。安装后,我需要将安装映射到用户在安装之前来自的源。有什么好的方法可以做到这一点吗?
到目前为止我的计划:将下载页面上的用户 IP 和屏幕分辨率保存到数据库中。安装后,将IP和屏幕分辨率传递给服务器,并与数据库中的行进行映射。这是这样做的好方法吗?
希望你们能帮助我。
我正在尝试跟踪 APK 安装。当用户登陆下载页面(而不是商店)时,他来自特定来源。当用户点击下载时,APK 将被安装。安装后,我需要将安装映射到用户在安装之前来自的源。有什么好的方法可以做到这一点吗?
到目前为止我的计划:将下载页面上的用户 IP 和屏幕分辨率保存到数据库中。安装后,将IP和屏幕分辨率传递给服务器,并与数据库中的行进行映射。这是这样做的好方法吗?
希望你们能帮助我。
您只需要为此编写一个可以接收PACKAGE_ADDED
和PACKAGE_INSTALL
Intent 的 BroadcastReceiver:
安装BroadcastReceiver.Class
public class InstallBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if(action.equals(Intent.ACTION_PACKAGE_ADDED)
||action.equals(Intent.ACTION_PACKAGE_INSTALL)){
notifyServerForApplicationInstall(context, intent);
}
}
private void notifyServerForApplicationInstall(Context context,Intent intent){
//send the data to your server here
}
}
AndroidManifest
在文件中注册接收器
<receiver
android:name=".InstallBroadcastReceiver"
android:exported="false"
<intent-filter>
<category android:name="android.intent.category.DEFAULT" />
<action android:name="android.intent.action.PACKAGE_ADDED" />
<action android:name="android.intent.action.PACKAGE_INSTALL" />
<data android:scheme="package" />
</intent-filter>
</receiver>
不要忘记在 manifest 中提供此权限:
<uses-permission android:name="android.permission.INSTALL_PACKAGES"/>
我准备了一个 BroadcastReceiver 类:
public class newPackageReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Log.d("DEBUG"," test for application install/uninstall");
}
}
在主要活动中,我首先注册一个新的接收器对象,然后实例化按钮以进行应用程序安装。
public void onCreate(Bundle savedInstanceState) {
...
IntentFilter filter = new IntentFilter();
filter.addAction(Intent.ACTION_PACKAGE_ADDED);
filter.addAction(Intent.ACTION_PACKAGE_CHANGED);
filter.addAction(Intent.ACTION_PACKAGE_DATA_CLEARED);
filter.addAction(Intent.ACTION_PACKAGE_INSTALL);
filter.addAction(Intent.ACTION_PACKAGE_REMOVED);
filter.addAction(Intent.ACTION_PACKAGE_REPLACED);
filter.addAction(Intent.ACTION_PACKAGE_RESTARTED);
receiver = new newPackageReceiver();
registerReceiver(receiver, filter);
...
dlButton.setText(R.string.dl_button);
dlButton.setOnClickListener(new AppliDownloadOnClickListener(this ));
@Override
public void onDestroy(){
unregisterReceiver(receiver);
super.onDestroy();
}