升级 Parse Android SDK 后出现 PushServiceApi26.run 的 IllegalArgumentException

IllegalArgumentException with PushServiceApi26.run after upgrading Parse Android SDK

对于 Android >= 8.0 (Oreo) 的所有用户,我在开发者控制台中反复出现崩溃。它是在将 Parse 从 1.15.8 升级到 1.16.3 后开始发生的。

没有太多信息,我试图检查 IllegalArgumentException 触发的代码。它实际上是有道理的,这里是 GcmBroadcastReceiver's onReceive() for Parse 1.16.x release 的代码:

@Override
@CallSuper
public void onReceive(Context context, Intent intent) {
    PushServiceUtils.runService(context, intent);
}
// In Parse 1.15.8, onReceive was instead calling 
// ServiceUtils.runWakefulIntentInService(context, intent, PushService.class);

PushServiceUtils中:

public static boolean runService(Context context, @NonNull Intent intent) {
    if (USE_JOBS) { // USE_JOBS : Android SDK >= 8.0 (Oreo)
        return PushServiceApi26.run(context, intent);
    } else {
        return PushService.run(context, intent);
    }
}

虽然我设法找到了错误发生的位置,但我对 Android(尤其是推送通知)的了解不足,无法理解发生了什么。在清单中,相关行:

<meta-data
        android:name="com.parse.push.gcm_sender_id"
        android:value="id:xxxxxxx" />


<service android:name="com.parse.PushService" />

<receiver
    android:name="com.parse.GcmBroadcastReceiver"
    android:permission="com.google.android.c2dm.permission.SEND" >

    <intent-filter>
        <action android:name="com.google.android.c2dm.intent.RECEIVE" />
        <action android:name="com.google.android.c2dm.intent.REGISTRATION" />

        <category android:name="bruce.worker.android" />
    </intent-filter>

</receiver>

但是,我仍然找不到造成这种情况的原因。任何帮助将不胜感激!

我设法通过在装有 Oreo 的设备上重现问题找到了解决方案。堆栈跟踪中的错误更精确:

Android java.lang.IllegalArgumentException: No such service

然后我得到了解决方案感谢

我只需要在清单中添加这个:

<service android:name="com.parse.PushServiceApi26"
        android:permission="android.permission.BIND_JOB_SERVICE"
        android:exported="true"/>