Все технические форумы на одном сайте Удобный поиск информации с популярных форумов в одном месте
Вопрос: А что случилось с Firebase Crashlytics ?

Доброго вечера.
В одно из приложений добавлен сабж, все работало, отчеты летели. Недавно заметил, что их не стало, полез смотреть - на самом деле не летят. Создал даже пустое тестовое приложение - глухо.
Доки смотрел, ничего нового, вроде, нет там. В чем может быть дело ?
Ответ: А, ну fabric конечно же, оговорочка по фрейду.
Главное, в консоли и версии приложения все висят, где оно внедрено уже, а нефига не летит.
Чудеса.

Добавлено через 16 минут
Сейчас полез дальше копать - все работает уже. Шо это было - непонятно. Тему можно считать закрытой.
Вопрос: Firebase и Windows/Linux

Добрый день ребята, я создал простенькое приложение-чат на Firebase для Android. Работает. Но теперь хочу создать и для Windows/Linux. То есть кроссплатформенный чат. Возможно ли такое именно с Firebase? Спасибо заранее
Ответ: sanzharito, например из приложения на Windows/Linux слать запрос на свой сервер который будет из этого запроса делать обращение к Firebase через web-сервис. можно конечно слать напрямую к Firebase, но размещение ключей в приложении... сами знаете чем чревато. может есть и нативные способы.
Вопрос: Cloud Messaging Firebase не работает, в чем проблема?

Всем привет. Столкнулся с такой проблемой, после последних обновлений, не могу организовать отправку уведомлений на мобильные устройства, при этом пользуясь туториалами, более ранних версий все работало, буквально пару месяцев назад.
Уважаемые программисты, пожалуйста, подскажите в чем может быть проблема?

Мой порядок действий:
1. Создал проект
2. Интегрировал Firebase Cloud Messaging через tools
3. Связал с аккаунтом и проектом
4. Создал классы для токена и для обработки message
--------
Создал апк файл, забросил на мобильник, запустил приложение, свернул, в проекте FireBase console запустил отправку сообщений, заполнил поля формы, выбрал проект, !Важно: он определил 1 устройство в этом проекте, нажимаю отправку и всё... ничего не происходит, на телефоне тишина, в консоли написано отправлено, но нулевая статистика вся.... Ниже представлю листинг своих файлов, подскажите пожалуйста, где у меня ошибка...
-----
Манифест
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.okokokkok">
<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=".MyFireBaseInstansIDService">
            <intent-filter>
                <action android:name="com.google.firebase.INSTANCE_ID_EVENT" />
            </intent-filter>
        </service>
        <service
            android:name=".MyFirebaseMessagingService"
            android:enabled="true"
            android:exported="true">
            <intent-filter>
                <action android:name="com.google.firebase.MESSAGING_EVENT"/>
            </intent-filter>
 
        </service>
    </application>
 
</manifest>
Класс сообщений FirebaseMessagingService

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
package com.example.okokokkok;
 
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.app.Service;
import android.content.Context;
import android.content.Intent;
import android.media.RingtoneManager;
import android.net.Uri;
import android.os.IBinder;
import android.support.v4.app.NotificationCompat;
 
import com.google.firebase.messaging.FirebaseMessagingService;
import com.google.firebase.messaging.RemoteMessage;
 
public class MyFirebaseMessagingService extends FirebaseMessagingService {
    public MyFirebaseMessagingService() {
    }
 
    @Override
    public void onMessageReceived(RemoteMessage remoteMessage) {
      super.onMessageReceived(remoteMessage);
 
        sendNotification(remoteMessage.getNotification().getBody());
    }
 
    private void sendNotification(String messageBody)
    {
        Intent intent = new Intent(this, MainActivity.class);
        intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
        PendingIntent pendingIntent = PendingIntent.getActivity(this,0, intent,PendingIntent.FLAG_ONE_SHOT);
 
        Uri defaultSoundUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_ALARM);
 
        NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this);
        notificationBuilder.setSmallIcon(R.drawable.ic_stat_name);
        notificationBuilder.setContentTitle("okokokkok");
        notificationBuilder.setContentText(messageBody);
        notificationBuilder.setAutoCancel(true);
        notificationBuilder.setSound(defaultSoundUri);
        notificationBuilder.setContentIntent(pendingIntent);
 
 
        NotificationManager notificationManager = (NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE);
        notificationManager.notify(0, notificationBuilder.build());
    }
}

Класс токен FirebaseInstanceIdService

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
package com.example.okokokkok;
 
import com.google.firebase.iid.FirebaseInstanceId;
import com.google.firebase.iid.FirebaseInstanceIdService;
 
public class MyFireBaseInstansIDService extends FirebaseInstanceIdService {
 
    @Override
    public void onTokenRefresh() {
        // Get updated InstanceID token.
        String refreshedToken = FirebaseInstanceId.getInstance().getToken();
 
        // If you want to send messages to this application instance or
        // manage this apps subscriptions on the server side, send the
        // Instance ID token to your app server.
        sendRegistrationToServer(refreshedToken);
    }
    private void sendRegistrationToServer (String tokan)
    {
 
    }
}
Файлы build (app and project)

build project


Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
// Top-level build file where you can add configuration options common to all sub-projects/modules.
 
buildscript {
    
    repositories {
        google()
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.1.4'
        
 
        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
        classpath 'com.google.gms:google-services:4.2.0'
    }
}
 
allprojects {
    repositories {
        google()
        jcenter()
    }
}
 
task clean(type: Delete) {
    delete rootProject.buildDir
}

build app

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
apply plugin: 'com.android.application'
 
android {
    compileSdkVersion 28
    defaultConfig {
        applicationId "com.example.okokokkok"
        minSdkVersion 15
        targetSdkVersion 28
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}
 
dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation 'com.android.support:appcompat-v7:28.0.0'
    implementation 'com.android.support.constraint:constraint-layout:1.1.3'
    implementation 'com.google.firebase:firebase-messaging:17.3.4'
    implementation 'com.google.firebase:firebase-core:16.0.4'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'com.android.support.test:runner:1.0.2'
    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
}
 
apply plugin: 'com.google.gms.google-services'
PS: Настройка build осуществлялась по мануалам на официальной странице Firebase
Ответ: Serega91, так вроде же такой notification builder, который принимает на вход только context, - deprecated.
используйте конструктор который принимает context и channelId.
Вопрос: Crashlytics

Есть такая библиотека в андроид crashlytics. Она отлавливает трудноуловимые крэши приложения, которые при обычном(ручном тестировании) не проявляются верно?
Ответ: Извини Паблито, у меня немного туго с английским просто
Вопрос: Ошибка подключения Firebase к Android Studio

При попытке подключить Firebase, получается такая ошибка:
Failed to resolve: firebase-auth-15.0.0

Firebase assistant автоматически добавляет такую строку в gradle
Java
1
implementation 'com.google.firebase:firebase-auth:16.0.1:15.0.0'
Не могу не как найти информацию в интернете которая поможет...
Ответ: там должно быть или 15.0.0 или 16.0.1
но никак все сразу
Вопрос: Неправильно работает оповещение google Firebase

Сделал оповещение настроил его таким образом

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
 private void showNotification(String title, String message) {
        Intent intent = new Intent(getApplicationContext(),MainActivity.class);
        PendingIntent contentIntent = PendingIntent.getActivity(getApplicationContext(), 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
       
        NotificationCompat.Builder b = new NotificationCompat.Builder(getApplicationContext());
 
        b.setAutoCancel(true)
                .setDefaults(Notification.DEFAULT_ALL)
                .setWhen(System.currentTimeMillis())
                .setSmallIcon(R.drawable.icon)
                .setContentTitle(title)
                .setContentText(message)
                .setContentIntent(contentIntent);
 
        NotificationManager notificationManager = (NotificationManager)getBaseContext().getSystemService(Context.NOTIFICATION_SERVICE);
        notificationManager.notify(1,b.build());
}
Проблема в том что звуковое оповещение и моя картинка R.drawable.icon работает только при условии что приложение отрыто
Если оно свернуто или закрыто приходит стандартный значок и без звука

В манифесте добавлял это не помогает

XML
1
2
3
4
5
6
7
8
9
10
<service android:name=".FirebaseService.MyFiverbaseIdService">
            <intent-filter>
                <action android:name="com.google.firebase.INSTANCE_ID_EVENT" />
            </intent-filter>
        </service>
        <service android:name=".FirebaseService.MyFirebaseMessagingService">
            <intent-filter>
                <action android:name="com.google.firebase.MESSAGING_EVENT"
            </intent-filter>
        </service>
Каким образом получать оповещения если оно выключено в том числе с моими настройками ?
Ответ: dripservice, с консоли приходят даже на реальное устройство?
Вопрос: FireBase + RecyclerView| как обновить список, после удаления item из базы?

Добрый всем день!

есть метод который удаляет айтем (значения items берутся из FireBase):
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
public void DelPos(View v){
    //mDatabase = FirebaseDatabase.getInstance().getReference();
    String s = String.valueOf(pos);
    Toast.makeText(getApplicationContext(), s, Toast.LENGTH_SHORT).show();
    Log.d("DisLog", "DataChange1");
    mDatabase.child("users").child(mUserId).child("items").orderByChild("title").equalTo(stringData).addListenerForSingleValueEvent(new ValueEventListener() {
                @Override
                public void onDataChange(DataSnapshot dataSnapshot) {
                    if (dataSnapshot.hasChildren()) {
                        DataSnapshot firstChild = dataSnapshot.getChildren().iterator().next();
                        firstChild.getRef().removeValue();
                        Log.d("DisLog", "DataChange");
 
                    }
                }
 
                @Override
                public void onCancelled(DatabaseError databaseError) {
                    Log.d("DisLog", "DataCancel");
                }
 
            });
    data.get(pos).isLongClicked=false;
    mAdapter.notifyDataSetChanged();
    mRecyclerView.setAdapter(mAdapter);
}
но айтем удаляется, и адаптер тоже обновляется, а позиция в списке остается, а если напр повернуть экран, то этой позиции уже нет, подскажите кто работал с FireBase, какой подход к этой задаче?
Ответ: ЗАРАБОТАЛО!

это в фтопку:

Не по теме:

Java
1
2
 mAdapter.notifyDataSetChanged();
    mRecyclerView.setAdapter(mAdapter);



это правильно:
Java
1
2
3
data.remove(pos);
    mAdapter.notifyItemRemoved(pos);
    mAdapter.notifyItemRangeChanged(pos, data.size());
Вопрос: Android Studio и FireBase

Всем привет. Начал обучаться программированию Android приложения и возникли некоторые трудности.
Создаю приложение для вуза. Подключил FireBase к своему проекту, работаю в Android Studio.
Сейчас занимаюсь расписанием пар, но не хватает знаний для правильной реализации.
Как сделать так, чтобы каждый зарегистрированный пользователь (студент) мог видеть только своё расписание. По такой же аналогии, чтоб каждый видел только свои личные данные в личном кабинете. Расписание и данные будут в базе данных FireStore от FireBase.
Ответ: В доках всё есть.

Слева есть разделы.
Вопрос: Firebase новичку

Подскажите русскоязычный источник для изучения Firebase.
Зарание спасибо
Ответ: на гугле забанен?
Вопрос: FireBase | Realtime DataBase Rules| как это настроить?

Здравствуйте!

в правилах FB следующее:

JSON
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
{
  "rules": {
    "users": {
      "$uid": {
        ".read": "auth != null && auth.uid == $uid",
        ".write": "auth != null && auth.uid == $uid",
        "items": {
          "$item_id": {
            "title": {
              ".validate": "newData.isString() && newData.val().length > 0"
            },
            "number": {
              ".validate": "newData.isString() && newData.val().length > 0"
            },
            "additions": {
              ".validate": "newData.isString() && newData.val().length > 0"
            },
            "pincode": {
              ".validate": "newData.isString() && newData.val().length > 0"
            },
            "comment": {
              ".validate": "newData.isString() && newData.val().length > 0"
            }
            
            }
          }
        }
      }
    }
  }
пытаюсь добавить данные как в примере с ноль эмоций, ну и тп.п день убил.

в коде добавления у меня такое:

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
 public void onClick(DialogInterface dialog, int which) {
                        //отправляем результат обратно
                        title = etName.getText().toString();
                        number = etNum.getText().toString();
                        additions= etAddit.getText().toString();
                        pincode = etPin.getText().toString();
                        comment = etComm.getText().toString();
 
                       String key = MainActivity.mDatabase.child("posts").push().getKey();
                        SearchList searchList = new SearchList(title, number, additions, pincode,comment);
                        Map<String, Object> postValues = searchList.toMap();
 
 
                       // Toast.makeText(getActivity(), key, Toast.LENGTH_LONG).show();
                        Map<String, Object> childUpdates = new HashMap<>();
                       childUpdates.put("/posts/" + key, postValues);
                        childUpdates.put("/user-posts/" + MainActivity.mUserId + "/" /*+ key*/, postValues);
 
                        MainActivity.mDatabase.updateChildren(childUpdates);
 
                        etName.setText("");
                        etNum.setText("");
                        etAddit.setText("");
                        etPin.setText("");
                        etComm.setText("");
                     //   MainActivity.mAdapter.notifyDataSetChanged();
                    }
а в базе на FireBase -
Java
1
null
;

как с этим разобраться помогите кто работал, т.е. приложению просто нужно в пять полей добавлять данные для списка.

З.Ы. кста вот так работает:
Java
1
mDatabase.child("users").child(mUserId).child("items").push().child("title").setValue(text.getText().toString());
т.е. в title добавляет запись.
Ответ: долго ломал моск, но таки разобрался, короче поставленая задача решена так:

в правилах такое:
Json
Кликните здесь для просмотра всего текста
JSON
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
{
  "rules": {
    "users": {
      "$uid": {
        ".read": "auth != null && auth.uid == $uid",
        ".write": "auth != null && auth.uid == $uid",
        "items": {
          "$item_id": {
            
            
              ".validate": "newData.hasChildren(['title', 'number', 'additions', 'pincode', 'comment'])",
               
              "title":{
                ".validate": "newData.isString() && newData.val().length > 0"
            },
              "number":{
                ".validate": "newData.isString() && newData.val().length > 0"
            },
              "additions": {
              ".validate": "newData.isString() && newData.val().length > 0"
            },
             "pincode": {
              ".validate": "newData.isString() && newData.val().length > 0"
            },
             "comment": {
              ".validate": "newData.isString() && newData.val().length > 0"
            }
            
            
            }
          }
        }
      }
    }
  }


а стучать вот так:
Java
1
2
Model searchList("бла","бла","бла","бла","бла","бла"); 
mDatabase.child("users").child(mUserId).child("items" + itemKey).setValue(searchList);
но для полного кайфа остался один косметический вопрос, изменяю параметры в полях в окне Dialog, в базе все меняется в реальном времени, но когда делаешь по кнопке диалога в конце кода
Java
1
recyclerAdapter.notifyDataSetChanged()
он оставляет предыдущий айтем списка (со старыми данными) и добавляет еще один(хотя в базе всего один), а когда напр. ворочаешь экран лишний(старый) айтем пропадает.

как с этой бедой справиться, помоЖите плиз ?

Добавлено через 15 часов 37 минут
Почему RecyclerView может добавлять новую (измененную позицию), и так же отображать изначальную копию item одновременно???

ведь данные в базе в реальном времени обновляются и при добавлении нового айтема такого нет...