SDK DocumentationRecipesAnnouncementsSupport Forum
AndroidiOSAnnouncementsSupport Forum

Support Forum

Ask a Question
ANSWERED

Error when upgrading from Android v2 to v3: "E/TBLWebUnit: setUnitExtraProperties got unrecognized property."

I'm currently upgrading from v2 to v3 in an Android App, but cannot see any taboola feed. These errors are thrown in the logs: > TBLWebUnit: setUnitExtraProperties got unrecognized property. key = mediatedVia > TBLWebUnit: setUnitExtraProperties got unrecognized property. key = isUsedInTaboolaWidget How can I resolve these errors? Should the taboola feed be visible nevertheless, and I'm missing out on something else? My taboola code looks like this: build.gradle: ``` //Include the Taboola SDK binary implementation 'com.taboola:android-sdk:3.6.3' //Taboola: Include the following dependencies (mandatory) implementation 'androidx.browser:browser:1.4.0' ``` Application.kt: ` Taboola.init(TBLPublisherInfo("[my-published-id]"))` ViewController.kt: ``` { private var taboolaPage: TBLClassicPage? = null private var taboolaUnit: TBLClassicUnit? = null fun init() { if (taboolaPage == null) { taboolaUnit = findViewById<TBLClassicUnit>(R.id.taboolaView) // Dark mode disabled for now // taboolaUnit?.setUnitExtraProperties(HashMap<String, String>().apply { put("darkMode", "true") }) taboolaPage = Taboola.getClassicPage("[my-url]", "article ") taboolaPage?.addUnitToPage( taboolaUnit, "Below Article Thumbnails", "thumbnails-a", TBL_PLACEMENT_TYPE.PAGE_BOTTOM, object : TBLClassicListener() { // None of the callbacks are being called override fun onItemClick( placementName: String?, itemId: String?, clickUrl: String?, isOrganic: Boolean, customData: String? ): Boolean { return true } override fun onTaboolaWidgetOnTop() {} override fun onAdReceiveSuccess() {} override fun onAdReceiveFail(error: String?) {} override fun onResize(height: Int) {} override fun onUpdateContentCompleted() {} override fun onEvent(actionType: Int, data: String?) {} }) } } private fun refreshView() { taboolaUnit?.fetchContent() } } ``` taboola_wiget.xml (I've also tried the way without declaring TBLClassicUnit via XML) ``` <?xml version="1.0" encoding="utf-8"?> <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:taboola="http://schemas.android.com/apk/res-auto" android:id="@+id/taboolaWrapper" android:layout_width="match_parent" android:layout_height="wrap_content"> <com.taboola.android.TBLClassicUnit android:id="@+id/taboolaView" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@color/elementBackground" taboola:tb_mode="thumbnails-a" taboola:tb_page_type="article" taboola:tb_placement="Below Article Thumbnails" taboola:tb_publisher="[my-publisher-id]" taboola:tb_target_type="mix" taboola:tb_url="[my-url]" /> </FrameLayout> ``` Any help would be appreciated. Thanks! Simon
ANSWERED

Cannot customize click item event handler

Hi, I have implemented iOS classic SDK, and in function "didClickPlacementName" i have return false so that i can handle event by my own as per documentation. But Taboola sdk is opening that link along with my handler. Let me know, how i can stop taboola to handle event. Thanks & Regards, Ankit Sabharwal
ANSWERED

Getting 400 in Native widget request

I am integrating Taboola native widget in my application in a list. Every third item need to be the Taboola view 1. I have created a TBLNativePage and TBLNativeUnit instances like this Note - same properties are used in your sample val properties = PlacementInfo.widgetProperties() val nativeTaboolaPage = Taboola.getNativePage(properties.pageType, properties.pageUrl) val requestData = TBLRequestData().setRecCount(1) taboolaNativeUnit = nativeTaboolaPage.build(properties.placementName,TaboolaAdProvider.publisherInfo, requestData, object : TBLNativeListener() { override fun onItemClick( placementName: String?, itemId: String?, clickUrl: String?, isOrganic: Boolean, customData: String? ): Boolean { println("Taboola | onItemClick | isOrganic = $isOrganic") return super.onItemClick(placementName, itemId, clickUrl, isOrganic, customData) } }) 2. In ViewHolder I have fetched recommendation with this unit taboolaNativeUnit.fetchRecommendations(object : TBLRecommendationRequestCallback { override fun onRecommendationsFetched(recommendationsResponse: TBLRecommendationsResponse?) { // add data to view } override fun onRecommendationsFailed(throwable: Throwable?) { // Getting 400 Bad Request here } }) But I am getting 400 error code in network request with message - HTTP ERROR 400 Problem accessing /apiHandler/1.2/json/sdk-tester-rnd/recommendations.multiple-get. Reason: The source.type [article] is not supported URL - https://api.taboola.com/1.2/json/sdk-tester-rnd/recommendations.multiple-get?device.id=04af5eac-4ea5-4ada-a69a-132a5dc3adc3&placement1.available=true&ad=%7B%22sdkd%22%3A%7B%22appv%22%3A%225.5.0%22%2C%22appid%22%3A%22com.homepage.news.android.dev%22%2C%22sdkt%22%3A%22Taboola%20Android%20SDK%20-%20API%22%2C%22os%22%3A%22Android%22%2C%22osv%22%3A%2210%22%2C%22sdkv%22%3A%223.5.2%22%2C%22app%22%3A%22HomePage%20News%22%2C%22model%22%3A%22Xiaomi%20POCO%20F1%22%2C%22lng%22%3A%7B%22main%22%3A%22eng%22%2C%22locale%22%3A%22en_IN%22%2C%22dsplng%22%3A%22English%22%2C%22sim%22%3A%22in%22%2C%22netw%22%3A%22in%22%2C%22kbd%22%3A%5B%22%22%5D%7D%2C%22kotlin%22%3Atrue%2C%22androidx%22%3Atrue%2C%22net%22%3A%22wifi%22%2C%22mem%22%3A%225767008%22%2C%22scr%22%3A%7B%22wd%22%3A1080%2C%22ht%22%3A2027%7D%7D%7D&user.opt_out=false&source.id=%2F&app.type=mobile&placement1.name=Widget%20without%20video&source.type=article&req_id=cdb0b553-40f4-41a4-af79-61c00d47142e&source.url=https%3A%2F%2Fblog.taboola.com&app.apikey=c4c6a04f0b48c7992ff477c89a28ef8d41932d12&placement1.organic-type=mix&user.session=v2_ab99edabbcddf419ff23cdf341124161_04af5eac-4ea5-4ada-a69a-132a5dc3adc3_1651576349_1651576349_CNawjgYQ5OxKGL7ihcnu5ZasBSABKAUwZziY0QpA8I8QSIb33ANQod0VWABggwNo_cXPy5zUwd5pcAE&app.name=HomePage%20News&placement1.rec-count=1&placement1.visible=false&view.id=1651578149421 Please let me know what is missing here or where I am creating the wrong request. Note. For same adapter Classing Widget (XML) is working fine
ANSWERED

In iOS app adding taboola in table view as tast cell cause the table view to scroll up automatically.

Hi, In our iOS app we have used tabolla SDK. The page where we used taboola is a table view and we are adding taboola when user reaches the bottom of the table view. But while we add taboola cell to the table view as the last cell and reload the table, table view automatically scroll up. This scroll up effect is happening only on iPhone 6 and iPhone 6s. Please let us know if there is any solution for this.
ANSWERED

In Mobile SDK v3 (Android), we dont have com.taboola.android.TaboolaWidget?

Hi, I was looking at the documentation of Mobile SDK v3 (Android), and There was no mention of Native units. When I check the sample - https://github.com/taboola/android-sdk-examples-3x It was loading Taboola native widget programmatically unlike the Classic widget which has TBLClassicUnit. in XML also. I have a few questions - 1. Are views like "TaboolaWidget" which are presented in V2 no longer in V3? 2. Can we add a Native unit using XML?
ANSWERED

Show/hide "Sponsored Links by ..."

Hi there! I was wondering if there is any way to configure the TaboolaView from iOS side to obtain the "Sponsored Links by Taboola" or if the way to do it is by asking to Taboola account manager. Thanks!
ANSWERED
ANSWERED

Android Taboola Classic Unit Implementation only loading single item

Hi, I am loading tblclassicunit in the following way and I am getting only one view layout structure <ObservableScrollView android:id="@+id/scroll_view" android:layout_width="match_parent" android:layout_height="match_parent" android:fillViewport="true" android:overScrollMode="never"> <FrameLayout android:id="@+id/scroll_view_child" android:layout_width="match_parent" android:layout_height="wrap_content" android:clipChildren="false"> <LinearLayout android:id="@+id/linearTaboolaContainer" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical" android:paddingTop="4dp" android:paddingLeft="16dp" android:paddingRight="16dp" android:paddingBottom="22dp" /> </FrameLayout> </ObservableScrollView> and I am inflating a tblClassic in this container code that I am using is, private void buildBelowArticleWidget(TBLClassicUnit tblClassicUnit, final int position, final HashMap<Integer, Boolean> nativePositions) { tblClassicUnit .setTargetType("mix"); //optional if (!TextUtils.isEmpty(mWidgetProperties.get(Constants.PAGE_URL_KEY))) { tblClassicUnit.setPageId(mWidgetProperties.get(Constants.PAGE_URL_KEY)); } //used for enable horizontal scroll HashMap<String, String> extraProperties = new HashMap<>(); extraProperties.put("enableHorizontalScroll", "true"); extraProperties.put("useOnlineTemplate", "true"); extraProperties.put("darkMode", "true"); tblClassicUnit.getLayoutParams().height = TBLSdkDetailsHelper.getDisplayHeight(tblClassicUnit.getContext()); TBLClassicPage tblClassicPage= Taboola.getClassicPage(mWidgetProperties.get(Constants.PAGE_URL_KEY), "article"); tblClassicUnit.setAutoResizeHeight(true); enableFeedContentScrolling(true); tblClassicUnit.setUnitExtraProperties(extraProperties); HashMap<String, String> extraProperties1 = new HashMap<>(); extraProperties1.put("setFetchPolicy", "1"); tblClassicPage.setPageExtraProperties(extraProperties1); TBLClassicListener tblClassicListener; tblClassicListener=new TBLClassicListener() { @Override public void onTaboolaWidgetOnTop() { super.onTaboolaWidgetOnTop(); Log.e("taboola","onTaboolaWidgetOnTop"); // enableFeedContentScrolling(false); } @Override public void onAdReceiveSuccess() { Log.e("taboola","onAdReceiveSuccess"); mLoadTaboolaListener.onTaboolaAdLoaded(); super.onAdReceiveSuccess(); } @Override public void onAdReceiveFail(String error) { Log.e("taboola","onAdReceiveSuccess"); mLoadTaboolaListener.onTaboolaAdFailed(); super.onAdReceiveFail(error); } @Override public void onResize(int height) { super.onResize(height); } @Override public boolean onItemClick(String placementName, String itemId, String clickUrl, boolean isOrganic, String customData) { //return super.onItemClick(placementName, itemId, clickUrl, isOrganic, customData); if (isOrganic) { //do something return false; } return true; } }; tblClassicPage.addUnitToPage(tblClassicUnit,mWidgetProperties.get(Constants.PLACEMENT_KEY),mWidgetProperties.get(Constants.MODE_KEY),TBL_PLACEMENT_TYPE.FEED,tblClassicListener); // tblClassicPage.addUnitToPage(tblClassicUnit,"Feed without video","thumbs-feed-01", TBL_PLACEMENT_TYPE.FEED,tblClassicListener); fetchIfRequired(); }
ANSWERED

[iOS] How do I get my app to build on my M1 Mac (iOS Simulator) when Taboola is installed via Carthage?

I think the question says it all. I recently updated my machine, went to install the TaboolaSDK via Carthage, and got the error during build (for simulator): This is a known issue, well described here: https://medium.com/@quentinfasquel/carthage-issues-xcode-12-xcframeworks-apple-silicon-etc-1c60d8635dbc ``` stephen-work@Stephens-M1-Pro iOS-App % ./carthage.sh bootstrap --platform iOS *** No Cartfile.resolved found, updating dependencies *** Downloading binary-only framework TaboolaSDK at "https://cdn.taboola.com/taboola-mobile-sdk/ios/carthage/TaboolaSDK.json" *** xcodebuild output can be found in /var/folders/22/62ggb_8x21l87nh68dc2hm6w0000gp/T/carthage-xcodebuild.9PI6S7.log *** Downloading binary-only framework TaboolaSDK at "https://cdn.taboola.com/taboola-mobile-sdk/ios/carthage/TaboolaSDK.json" ``` As far as I understand, 2 solution paths would be to support building .xcframeworks (and provide some support documentation about this issue), and/or additionally installing via Swift Package Manager (SPM). Anyway, is there a way forward here? I currently use the 'carthage.sh' script, given here: https://github.com/Carthage/Carthage/blob/master/Documentation/Xcode12Workaround.md Where it explicitly says "this won't work on Apple Silicon" i.e. the simulator. So I'm basically stuck.
ANSWERED

Android Native Implementation Question

I have a TaboolaWidget inside a RecyclerView. Right now the widget has a fixed height with a nested scroll to view all the overflowing ads. What I want is to make the widget's size to be as large as needed in order to fit all the ads WITHOUT having to use the nested scroll that the widget provides. Thanks.