2017-10-13 11 views
0

私たちは、私もすべての依存関係のバージョンを変更したAndroid 25からアンドロイドオレオ - プッシュ通知クラッシュ

compileSdkVersion 26 
buildToolsVersion "26.0.0" 

に今我々のアプリケーションを移行しました。

私たちのアプリケーションではまだGCM.jarを使用しています。

Oreoデバイスでプッシュ通知を受け取ると、アプリケーションがクラッシュします。

クラッシュログ:

Caused by: java.lang.IllegalStateException: Not allowed to start service Intent { act=com.google.android.c2dm.intent.RECEIVE flg=0x1000010 app is in background uid UidRecord{13c38ce u0a297 RCVR bg:+3m5s626ms idle procs:1 seq(0,0,0)} 
+1

GCM jarは非常に古く、推奨されていません。今すぐfirebaseでFCMを使用する必要があります。 jarファイルにアンドロイドの新しい背景の制限がありません – tyczj

+0

@ramyaこの問題を修正しましたか?私は同じものに直面しています –

+0

@ Passionate.C:問題を修正しましたか? – Debugger

答えて

2

あなたのGradleで同様Goolgle-クラウドメッセージングGradleの依存関係を使用してください。または、最善の解決策はFirebaseに移動することです。 FirebaseにはGCMのようなツールがたくさんあります。

official docs:Firebase Cloud Messaging(FCM)は、GCMの新しいバージョンです。信頼性とスケーラビリティの高いGCMインフラストラクチャに加えて、新機能を継承しています。新しいアプリでメッセージングを統合する場合は、まずFCMを使用してください。 GCMユーザーは、現在および将来の新しいFCM機能の恩恵を受けるために、FCMにアップグレードすることを強くお勧めします。

Firebaseへの移行については、 hereそのFirebaseに移動することをお勧めしていても

0

が、ここではアップグレードできない人のためのソリューションです参照してください。

  1. 設定してくださいあなたはこれ以上の範囲覚醒放送ではなく、普通の放送
  2. を作る
  3. を26.0.1+するためのツールを構築JobServiceIntentを拡張し、それにタスクをスケジュールするクラスを作成します。

ジョブサービスでは、Oreoのバックグラウンドで作業することが可能です。ここで

はJobServiceIntentクラスのサンプル

package com.voxelbusters.nativeplugins.features.notification.core; 

import android.content.Context; 
import android.content.Intent; 
import android.os.Bundle; 
import android.support.v4.app.JobIntentService; 

import com.google.android.gms.gcm.GoogleCloudMessaging; 
import com.voxelbusters.nativeplugins.defines.CommonDefines; 
import com.voxelbusters.nativeplugins.utilities.Debug; 
import com.voxelbusters.nativeplugins.utilities.JSONUtility; 

import org.json.JSONObject; 

/** 
* Created by ayyappa on 09/02/18. 
*/ 

public class NotificationJobService extends JobIntentService 
{ 
    /** 
    * Unique job ID for this service. 
    */ 
    static final int JOB_ID = 1000; 

    /** 
    * Convenience method for enqueuing work in to this service. 
    */ 
    public static void enqueueWork(Context context, Intent work) { 
     enqueueWork(context, NotificationJobService.class, JOB_ID, work); 
    } 

    @Override 
    protected void onHandleWork(Intent intent) 
    { 

     Bundle extras = intent.getExtras(); 
     GoogleCloudMessaging service = GoogleCloudMessaging.getInstance(this); 

     String messageType = service.getMessageType(intent); 

     Debug.log(CommonDefines.NOTIFICATION_TAG, "GCMIntentService received message type : " + messageType); 

     if (!extras.isEmpty()) 
     { 
      if (GoogleCloudMessaging.MESSAGE_TYPE_MESSAGE.equals(messageType)) 
      { 
       // Post notification of the received message (extras). 

      } 
     } 
    } 

    @Override 
    public void onDestroy() 
    { 
     super.onDestroy(); 
    } 

} 

今すぐ以下のように放送を受信するにenqueWorkを呼び出すです。

package com.voxelbusters.nativeplugins.features.notification.serviceprovider.gcm; 

import android.content.BroadcastReceiver; 
import android.content.ComponentName; 
import android.content.Context; 
import android.content.Intent; 

import com.voxelbusters.nativeplugins.features.notification.core.NotificationDefines; 
import com.voxelbusters.nativeplugins.features.notification.core.NotificationJobService; 

public class GCMBroadcastReceiver extends BroadcastReceiver 
{ 
    @Override 
    public void onReceive(Context context, Intent intent) 
    { 
     if (!NotificationDefines.usesExtenralRemoteNotificationService(context)) 
     { 
      // Explicitly specify that GCMIntentService will handle the intent. 
      ComponentName comp = new ComponentName(context.getPackageName(), GCMIntentService.class.getName()); 
      intent.setComponent(comp); 
      NotificationJobService.enqueueWork(context, intent); 
     } 
    } 
} 

希望します。