Как перенести полученный DeepLink (FB SDK) из метода onDeferredAppLinkDataFetched в переменную активности?
Всем привет! Я использую глубокие ссылки из FB (обычные и отложенные), ловлю их в методе onDeferredAppLinkDataFetched, в логах все выводиться - супер! Теперь я хочу поработать с этой глубокой ссылкой, но не могу достать ее из этого метода. Как я прочитал AppLinkData.CompletionHandler работает в асинхронном потоке может это натолкнет на идеи. Спасибо заранее!! Вот код:
private static final String URL_TEST_BINOM = "https://***********************";
private String UrlBinomDeepLink = "1";
SharedPreferences mSettings;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_network);
myWebView = findViewById(R.id.browsec);
myWebView.setWebViewClient(new MyWebViewClient());
FacebookSdk.setAutoInitEnabled(true);
FacebookSdk.fullyInitialize();
FacebookSdk.setAutoLogAppEventsEnabled(true);
AppLinkData.fetchDeferredAppLinkData(this,
new AppLinkData.CompletionHandler() {
@Override
public void onDeferredAppLinkDataFetched(AppLinkData deferredDeepLink) {
Uri uri = deferredDeepLink == null
? AppLinks.getTargetUrlFromInboundIntent(Chrome.this, getIntent())
: deferredDeepLink.getTargetUri();
if (uri != null) {
UrlBinomDeepLink = URL_TEST_BINOM + uri.getQuery();
Log.d("DEBUG_FACEBOOK_SDK",""+uri.getQuery());
} else Log.d("DEBUG_FACEBOOK_SDK", "AppLinkData is Null");
}
}
);
myWebView.loadUrl(UrlBinomDeepLink);
System.out.println(UrlBinomDeepLink);
Ответы (2 шт):
Есть еще более тупой способ нежели предложенный @EugeneKrivenja
Примерно так:
private Uri deepLink = null;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_network);
myWebView = findViewById(R.id.browsec);
myWebView.setWebViewClient(new MyWebViewClient());
FacebookSdk.setAutoInitEnabled(true);
FacebookSdk.fullyInitialize();
FacebookSdk.setAutoLogAppEventsEnabled(true);
AppLinkData.fetchDeferredAppLinkData(this,
new AppLinkData.CompletionHandler() {
@Override
public void onDeferredAppLinkDataFetched(AppLinkData deferredDeepLink) {
Uri uri = deferredDeepLink == null
? AppLinks.getTargetUrlFromInboundIntent(Chrome.this, getIntent())
: deferredDeepLink.getTargetUri();
if (uri != null) {
UrlBinomDeepLink = URL_TEST_BINOM + uri.getQuery();
Log.d("DEBUG_FACEBOOK_SDK",""+uri.getQuery());
deeplink = uri; //"пишем" диплинк
} else Log.d("DEBUG_FACEBOOK_SDK", "AppLinkData is Null");
}
}
);
myWebView.loadUrl(UrlBinomDeepLink);
System.out.println(UrlBinomDeepLink);
Не знаю можно ли это считать полноценным ответом, но для ваших действий это вполне подойдет:
private String url;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_network);
myWebView = findViewById(R.id.browsec);
myWebView.setWebViewClient(new MyWebViewClient());
FacebookSdk.setAutoInitEnabled(true);
FacebookSdk.fullyInitialize();
AppLinkData.fetchDeferredAppLinkData(this,
new AppLinkData.CompletionHandler() {
@Override
public void onDeferredAppLinkDataFetched(AppLinkData appLinkData) {
if(appLinkData != null) {
url = appLinkData.getTargetUri();
loadURL();
}
}
}
);
private void loadURL() {
myWebView.loadUrl(url);
}
}
Определенно это костыли, но, если на данный момент вы еще не можете осилить более сложные методики реализации, то такой вариант вам подойдет. Метод в методе, но начинать нужно с асинхронного.