OneSignal получает идентификатор пользователя от Android

Я пытаюсь реализовать OneSignal Android SDK. Все в порядке, кроме получения userId в документации OneSignal, здесь имеет документацию. шаги:

defaultConfig {
        applicationId "com.nuspay.onesignaldemo"

        manifestPlaceholders = [manifestApplicationId: "${applicationId}",
                                onesignal_app_id: "OPEN_SIGNAL_ID",
                                onesignal_google_project_number: "GOOGLE_PLAY_PROJECT_NUMBER"]
        minSdkVersion 17
        targetSdkVersion 23
        versionCode 1
        versionName "1.0"
    }

И добавьте этот файл gradle в качестве зависимостей:

 compile 'com.onesignal:OneSignal:2.+@aar'
    compile 'com.google.android.gms:play-services-gcm:+'
    compile 'com.google.android.gms:play-services-analytics:+'
    compile "com.google.android.gms:play-services-location:+"

В манифест.xml добавьте класс приложения и это разрешение

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

Класс приложения выглядит следующим образом:

public class DemoApplication extends Application{
    public static final String TAG = DemoApplication.class.getSimpleName();
    private static DemoApplication instace;

    @Override
    public void onCreate() {
        super.onCreate();
        instace=this;
        initialization();
    }

    private void initialization() {
        OneSignal.startInit(this)
        .setAutoPromptLocation(true)
        .setNotificationOpenedHandler(new ExampleNotificationOpenedHandler()).
        init();

        OneSignal.idsAvailable(new OneSignal.IdsAvailableHandler() {
            @Override
            public void idsAvailable(String userId, String registrationId) {
                Log.d("debug", "User:" + userId);
                if (registrationId != null)
                    Log.d("debug", "registrationId:" + registrationId);

            }
        });
        OneSignal.enableNotificationsWhenActive(true);
        OneSignal.enableInAppAlertNotification(true);
        OneSignal.promptLocation();
    }
}

ExampleNotificationOpenedHandler вот так:

public class ExampleNotificationOpenedHandler implements OneSignal.NotificationOpenedHandler {

    @Override
    public void notificationOpened(String message, JSONObject additionalData, boolean isActive) {
        try {

            Log.d("HWT","Message-->"+message);
            Log.d("HWT","additionalData-->"+additionalData);
            Log.d("HWT","isActive-->"+isActive);

            if (additionalData != null) {
                if (additionalData.has("actionSelected"))
                    Log.d("HWT", "OneSignal notification button with id " + additionalData.getString("actionSelected") + " pressed");

                Log.d("OneSignalExample", "Full additionalData:\n" + additionalData.toString());
            }
        } catch (Throwable t) {
            t.printStackTrace();
        }
    }
    }

Теперь в моем обратном вызове Activity onCreate используется приведенный ниже код для получения идентификатора пользователя.

OneSignal.idsAvailable(new OneSignal.IdsAvailableHandler() {
            @Override
            public void idsAvailable(String userId, String registrationId) {
                String text = "OneSignal UserID:\n" + userId + "\n\n";
            }
        });

Моя проблема в том, что idsAvailable обратный вызов никогда не вызывается.

Заметки:

  1. Я устанавливаю разрешение GCM, получаю номер проекта, устанавливаю проект Open signal, все в порядке.

Не могли бы вы указать мои недостатки. Заранее спасибо.


person Md. Sajedul Karim    schedule 16.05.2016    source источник
comment
Получаете ли вы идентификатор пользователя внутри DemoApplication? или idsAvailable никогда не вызывается как для вашей активности, так и для приложения?   -  person agonist_    schedule 16.05.2016
comment
Также я столкнулся с той же проблемой, но я делал глупости, я поместил свой ключ пользователя в свой файл граддла вместо идентификатора/ключа приложения, который вы можете найти в меню › API KEYS. Уведомление также работало, но не idsAvailable, так что, возможно, вы сделали ту же ошибку ... + «GOOGLE_PLAY_PROJECT_NUMBER» это облако Google, а не Google Play, просто чтобы быть уверенным   -  person agonist_    schedule 16.05.2016
comment
@agonist_, спасибо за ваш комментарий. Я больше не вызывал метод idsAvailable. Что вы подразумеваете под ключом пользователя вместо идентификатора/ключа приложения?   -  person Md. Sajedul Karim    schedule 16.05.2016


Ответы (1)


Наконец, я решил это, удалив эти строки из класса приложения:

OneSignal.enableNotificationsWhenActive(true);
    OneSignal.enableInAppAlertNotification(true);
    OneSignal.promptLocation();
person Md. Sajedul Karim    schedule 16.05.2016
comment
Эти строки не должны влиять на IdsAvailableHandler. Этот обратный вызов может запускаться с задержкой от 5 до 15 секунд, если приложение запускается впервые, поскольку оно зарегистрировано в Google и OneSignal. Также на устройствах Android 6.0 он не сработает, пока запрос на разрешение местоположения не будет принят или отклонен. - person jkasten; 17.05.2016
comment
@jaksten, спасибо за ваш комментарий. Но, к сожалению, я не получил результата от IdsAvailableHandler. После удаления этих строк я получаю результат. - person Md. Sajedul Karim; 17.05.2016
comment
Является ли promptLocation единственным методом, создающим проблему? Или enableInAppAlertNotificationи enableNotificationsWhenActive тоже создают проблемы? Вы используете последнюю версию 2.3.0 SDK? Можете ли вы проверить наличие проблем в logcat? - person jkasten; 17.05.2016