Проблема с Firebase Dynami c Ссылки в Titanium - PullRequest
0 голосов
/ 20 февраля 2020

Я работаю над добавлением Firebase Dynami c Ссылки на мое приложение. Я создал собственный модуль, который доступен здесь: Titanium Firebase DynamicLinks . Основной метод этого модуля: handleDeepLink():

@Kroll.method
    public void handleDeepLink() {
        Activity currentActivity = TiApplication.getAppRootOrCurrentActivity();
        Intent intent = currentActivity.getIntent();
        if (intent == null) {
            return;
        }
        Log.w(LCAT, "Links instance not null: " + (FirebaseDynamicLinks.getInstance() != null));
        Log.w(LCAT, "current activity not null: " + (currentActivity != null));
        FirebaseDynamicLinks.getInstance()
        .getDynamicLink(intent)
        .addOnSuccessListener(currentActivity, new OnSuccessListener<PendingDynamicLinkData>() {
            @Override
            public void onSuccess(PendingDynamicLinkData pendingDynamicLinkData) {
                Uri deepLink = null;
                if (pendingDynamicLinkData != null) {
                    deepLink = pendingDynamicLinkData.getLink();

                    KrollDict queryParams = new KrollDict();
                    Set<String> queryParamNames = deepLink.getQueryParameterNames();
                    for (String paramName : queryParamNames) {
                        queryParams.put(paramName, deepLink.getQueryParameter(paramName));
                    }
                    fireEvent("deeplink:new", queryParams);
                }
            }
        })
        .addOnFailureListener(currentActivity, new OnFailureListener() {
            @Override
            public void onFailure(@NonNull Exception e) {
                fireEvent("deeplink:error", e.getMessage());
            }
        }); 
    }

Я добавил его в мое демо-приложение Alloy и использовал его следующим образом:

$.index.addEventListener('open', () => {
    const Firebase = require('com.pmitkowski.firebase.dynamiclinks');
    Firebase.addEventListener('deeplink:new', (params) => {
        console.warn('deep link params', params);
    });
    Firebase.addEventListener('deeplink:error', (error) => {
        console.error(error);
    });
    Firebase.handleDeepLink();
});

$.index.open();

My index.xml file:

<Alloy>
    <Window class="container">
        <Label id="label" onClick="doClick">Hello, World</Label>
    </Window>
</Alloy>

Проблема в том, что каждый раз, когда я запускаю свое приложение на эмуляторе Android, я получаю сообщение об ошибке:

[ERROR] V8Exception: Exception occurred at /alloy/controllers/index.js:74: Uncaught Error: Attempt to invoke virtual method 'com.google.android.gms.tasks.Task com.google.firebase.dynamiclinks.FirebaseDynamicLinks.getDynamicLink(android.content.Intent)' on a null object reference

Метод FirebaseDynamicLinks.getInstance() в моем модуле на самом деле возвращает null, но это не так, как это должно работать, и я не знаю, почему это происходит. Я уверен, что Firebase инициализирует себя перед вызовом этого метода (я вижу это в журналах). Можете ли вы помочь мне с решением этой проблемы?

1 Ответ

0 голосов
/ 17 марта 2020

Я не уверен, как решить эту проблему с SDK версии 8.3.1, но когда я переключился на 9.0.0 и импортировал Firebase Dynami c Связывает зависимость через Gradle вместо использования простых зависимостей .aar и .jar , он начал работать правильно.

...