安装引荐在一些红米设备上无法工作

11

我需要跟踪我的安卓应用的安装推荐。在大多数设备上它都正常工作。但是在红米设备上,广播没有被触发。我已经在红米Note 4上进行了测试。

我已经从ADB和Play商店两个途径进行了测试。但是都不能在红米设备上触发广播。

下面是我使用的代码:

public class ReferrerReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
           Log.d("Broadcast", "RECEIVED!");
        }
}


<receiver
    android:name=".receiver.ReferrerReceiver"
    android:exported="true">
    <intent-filter>
        <action android:name="com.android.vending.INSTALL_REFERRER"/>
    </intent-filter>
</receiver>

请问有没有人遇到过相同的问题并且得到了解决方案?


你尝试过在你的接收器中使用 if (Objects.equals(intent.getAction(), Intent.ACTION_INSTALL_PACKAGE)) { Log.d("Broadcast", "RECEIVED!"); } 吗? - Ashutosh Sagar
@AshutoshSagar 我遇到的问题是onReceive本身没有被调用。 - Sachin
5个回答

3
你的应用程序是否在“受保护的应用程序”列表中,允许在后台运行?如果不是,则不会自动启动。这在像小米、华为等设备上是一个问题。在“设置->应用程序-安全”中应该有一个设置页面,允许您将您的应用程序添加到允许自动启动、在后台运行等应用程序列表中。每个设备制造商的操作略有不同,但通常我们在中国设备上看到这样做是为了节省电池寿命。

另请参见:


0
在Redmi设备上,一些Android应用程序需要权限。请在设备上手动允许这些权限。通过使用设备中的应用程序权限选项,授予所有权限。我已经观察到这可能会对我的应用程序有所帮助。

0

我使用红米3 Pro,经常遇到Android权限问题。小米设备使用自定义ROM,有时会导致权限请求出现故障。

在我安装的每个应用程序中,覆盖服务权限总是被强制设置为拒绝。我必须手动允许它。

我发现了一个不错的解决方法,可以让小米设备自动启动权限:如何以编程方式获取MIUI安全应用程序的自动启动权限?


0

小米手机由于其对后台进程的限制,常常会出现一些问题。以下是如何解决这些问题:

1:进入设置 --> 应用管理 --> 应用电池优化,选择需要接收推送通知的应用程序,然后选择“无限制”。

2:进入设置 --> 权限 --> 自启动,选择需要的应用程序,并切换开关以打开它。

3:将应用锁定在“最近使用的应用程序”/“应用程序概述”平面上。首先打开应用程序,然后按“最近使用的应用程序/概述按钮”(这是原生Android上的方形按钮,或者是Mi Mix上带有三条水平线的按钮)。从那里找到您想要接收通知的应用程序,在其上下拉以“锁定”它,以便它永远不会被清除。

4:最后一步需要开发人员选项权限。要启用它,请进入设置(我已经厌倦了输入“进入设置”...)--> 关于手机,点击MIUI版本标签大约八次。然后返回设置,进入开发人员选项,向下滚动到几乎底部,找到“内存优化”,并关闭它。

也许只需要第四步。


-3
你可以使用Google的Play Install Referrer Library api 1.0来解决这个问题。我就是这样做的,在默认情况下阻止自动启动的设备上运行良好。
首先,在应用程序的build.gradle文件的dependencies部分中添加以下行:
dependencies {
...
compile 'com.android.installreferrer:installreferrer:1.0'

}

你应该在你的Activity中实现InstallReferrerStateListener接口及其onInstallReferrerSetupFinished和onInstallReferrerServiceDisconnected方法。

调用newBuilder()方法创建一个InstallReferrerClient类的实例。

调用startConnection()方法建立与Google Play的连接。

startConnection()方法是异步的,因此你必须重写InstallReferrerStateListener以在startConnection()完成后接收回调。

你还应该覆盖onInstallReferrerSetupFinished()方法处理与Google Play的断开连接。例如,如果Play商店服务正在后台更新,Play安装参考库客户端可能会失去连接。库客户端必须调用startConnection()方法重新启动连接,然后再进行进一步请求。

示例:

InstallReferrerClient mReferrerClient

mReferrerClient = InstallReferrerClient.newBuilder(this).build();
mReferrerClient.startConnection(new InstallReferrerStateListener() {
@Override
public void onInstallReferrerSetupFinished(int responseCode) {
    switch (responseCode) {
        case InstallReferrerResponse.OK:
            // Connection established
            break;
        case InstallReferrerResponse.FEATURE_NOT_SUPPORTED:
            // API not available on the current Play Store app
            break;
        case InstallReferrerResponse.SERVICE_UNAVAILABLE:
            // Connection could not be established
            break;
    }
}
@Override
public void onInstallReferrerServiceDisconnected() {
    // Try to restart the connection on the next request to
    // Google Play by calling the startConnection() method.
}
});

在连接到Play Store应用程序之后:

使用同步的getInstallReferrer()方法返回ReferrerDetails。 然后,使用ReferrerDetails中的方法获取安装时间戳和引荐人URL。

ReferrerDetails response = mReferrerClient.getInstallReferrer();
response.getInstallReferrer();
response.getReferrerClickTimestampSeconds();
response.getInstallBeginTimestampSeconds();

更多信息请参考: https://developer.android.com/google/play/installreferrer/library

希望这能有所帮助!


虽然链接很有帮助,请在答案本身中添加更多细节和示例。 - Anton
1
虽然这个链接可能回答了问题,但最好在此处包含答案的基本部分并提供参考链接。如果链接页面更改,仅链接的答案可能会失效。-【来自审查】 - David Maze
@DavidMaze 谢谢,麻烦您帮忙看一下我修改后的内容,我添加了更多细节和示例。 - Gustavo Martn Gonzlez Lamarque
我已经尝试过了,但在一些红米设备上无法正常工作。 - Harkirat Saluja

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接