Идентификатор экземпляра FCM не создается в Samsung Galaxy S8 android версии 8.0.0 - PullRequest
0 голосов
/ 23 мая 2018

У меня есть реализация FCM в проекте, и, похоже, идентификатор экземпляра FCM не генерируется только в этом одном устройстве (Samsung Galaxy s8, версия Android 8.0.0).Кроме этого устройства, он отлично работает на других устройствах.Однако, к сожалению, сейчас у меня нет доступа к любому другому устройству oreo, поэтому я не могу проверить, является ли это проблемой oreo или проблемой телефона.

Мой файл манифеста:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.ideabinbd.fcmimplementation">
<uses-permission android:name="android.permission.INTERNET"/>

<application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:roundIcon="@mipmap/ic_launcher_round"
    android:supportsRtl="true"
    android:theme="@style/AppTheme">
    <activity android:name=".MainActivity">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

    <service android:name=".FCMInstance">
        <intent-filter>
            <action android:name="com.google.firebase.INSTANCE_ID_EVENT"/>
        </intent-filter>
    </service>
    <service android:name=".FcmMessageReceiver">
        <intent-filter>
            <action android:name="com.google.firebase.MESSAGING_EVENT"/>
        </intent-filter>
    </service>
</application>

Класс идентификатора экземпляра:

public class FCMInstance extends FirebaseInstanceIdService {
private final String TAG="fcmToken";
public  String currentToken;

@Override
public void onTokenRefresh() {
    currentToken= FirebaseInstanceId.getInstance().getToken();
    Log.d(TAG, currentToken);
}
}

Служба OnMessageReceive:

public class FcmMessageReceiver extends FirebaseMessagingService {
@Override
public void onMessageReceived(RemoteMessage remoteMessage) {
    Log.d("fcm","messageRecieved");
    String title= remoteMessage.getNotification().getTitle();
    String body= remoteMessage.getNotification().getBody();

    Intent resultIntent = new Intent(getApplicationContext(), MainActivity.class);

    PendingIntent resultPendingIntent = PendingIntent.getActivity(getApplicationContext(), 0,
            resultIntent, PendingIntent.FLAG_UPDATE_CURRENT);
    NotificationCompat.Builder mNotifyBuilder;
    NotificationManager mNotificationManager;
    mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
    // Sets an ID for the notification, so it can be updated
    int notifyID = 9001;
    mNotifyBuilder = new NotificationCompat.Builder(getApplicationContext())
            .setContentTitle(title)
            .setContentText(body)
            .setSmallIcon(R.mipmap.ic_launcher);
    // Set pending intent
    mNotifyBuilder.setContentIntent(resultPendingIntent);
    // Set Vibrate, Sound and Light
    int defaults = 0;
    //defaults = defaults | Notification.DEFAULT_LIGHTS;
    //defaults = defaults | Notification.DEFAULT_VIBRATE;
    defaults = defaults | Notification.DEFAULT_SOUND;
    mNotifyBuilder.setDefaults(defaults);
    // Set the content for Notification

    // Set autocancel
    mNotifyBuilder.setAutoCancel(true);
    // Post a notification
    mNotificationManager.notify(notifyID, mNotifyBuilder.build());
}
}

На MainActivity:

public class MainActivity extends AppCompatActivity {
private static final String TAG = "fcmToken";
Button invokeServer;
String url="http://10.0.3.2/fcm/fcmInsert.php";
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Log.d(TAG, FirebaseInstanceId.getInstance().getToken());
}

Я получаю исключение нулевого указателя при попытке распечатать токен с использованием журнала.Ниже приведен логкат для ошибки:

Процесс: com.ideabinbd.fcmimplementation, PID: 809 java.lang.RuntimeException: Невозможно запустить действие ComponentInfo {com.ideabinbd.fcmimplementation / com.ideabinbd.fcmimplementation.MainActivity}: java.lang.NullPointerException: для печати требуется сообщение на android.app.ActivityThread.performLaunchActivity (ActivityThread.java:2955) на android.app.ActivityThread.handleLaunchActivity (ActivityThread.java:3030) в android.app.ActivityThread.-wrap11 (неизвестный источник: 0) в android.app.ActivityThread $ H.handleMessage (ActivityThread.java:1696) в android.os.Handler.dispatchMessage (Handler.java:105) в android.os.Looper.loop(Looper.java:164) на android.app.ActivityThread.main (ActivityThread.java:6938) на java.lang.reflect.Method.invoke (собственный метод) на com.android.internal.os.Zygote $ MethodAndArgsCaller.run(Zygote.java:327) на com.android.internal.os.ZygoteInit.main (ZygoteInit.java:1374). Причина: java.lang.NullPointerException: println нуждается в amessage на android.util.Log.println_native (собственный метод) на android.util.Log.d (Log.java:161) на com.ideabinbd.fcmimplementation.MainActivity.onCreate (MainActivity.java:34) на android.app.Activity.performCreate (Activity.java:7174) в android.app.Instrumentation.callActivityOnCreate (Instrumentation.java:1220) в android.app.ActivityThread.performLaunchActivity (ActivityThread.java:2908)

снова, код прекрасно работает для более старых версий Android, есть ли какой-то шаг, который я пропускаю для Android 8, необходимых для создания идентификатора службы?И речь идет не о канале уведомлений , поскольку получение отдельных уведомлений будет работать только в том случае, если я сгенерирую токен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...