Close Menu
    Facebook X (Twitter) Instagram
    • Home
    • Contact Us
    • About Us
    • Privacy Policy
    • Terms Of Service
    • Advertisement
    Sunday, July 5
    Facebook X (Twitter) Instagram Pinterest Vimeo
    ABS Africa TV
    • Breaking News
    • Trending
    • Africa News
    • World News
    • Features
    • Technology
    • Sports
    • Politics
    • More
      • Culture
      • Lifestyle
      • Travel
      • Business
      • Environment
      • Legal
      • Health
      • Cameroon
      • Ambazonia
      • AfroSingles
      • Environ/Climate
      • Editorial
      • The Leak Magazine
    • Donate
    Subscription
    ABS Africa TV
    Home»Sports»AFCON U20: Kenya, Tanzania clash again in CECAFA Zonal qualifiers final
    Sports

    AFCON U20: Kenya, Tanzania clash again in CECAFA Zonal qualifiers final

    Johnson BenguruBy Johnson BenguruJuly 5, 2026No Comments9 Mins Read
    Facebook Twitter Pinterest LinkedIn Tumblr Email
    Share
    Facebook Twitter LinkedIn Pinterest Email
    Post Views: 11

    AFCON U20: Kenya, Tanzania clash again in CECAFA Zonal qualifiers final

    AFCON U20: Kenya, Tanzania clash again in CECAFA Zonal qualifiers final

    Kenya’s Rising Stars pose for a group photo before their game against Sudan (C) Courtesy

    Read this story aloud

    Listen to the clean text version of this article

    Ready
    4 min listen
    Audio reading is not supported on this browser.

    Kenya is set to face hosts Tanzania in the final of the CAF U-20 Africa Cup of Nations (AFCON) CECAFA qualifiers at the KMC Stadium in Dar es Salaam. Both teams have already booked their spots for the 2025 AFCON U-20 tournament but are determined to lift the regional title

    Kenya will aim to conclude their remarkable campaign in the CAF U-20 Africa Cup of Nations (AFCON) CECAFA qualifiers with a win against hosts Tanzania in the final at KMC Stadium, Dar es Salaam this afternoon.
    The highly anticipated final is a rematch of their Group A clash from just over a week ago. Kenya emerged victorious in that encounter and now hopes to remain unbeaten in the tournament, while Tanzania is keen to avoid another loss on home soil.
    Both teams have already secured their spots in the 2025 AFCON U-20 tournament by reaching the final of the CECAFA regional qualifiers, according to competition rules.

    More To Read

    • 𝐄𝐚𝐬𝐭𝐥𝐞𝐢𝐠𝐡 𝐕𝐨𝐢𝐜𝐞 𝐚𝐭 𝐍𝐢𝐧𝐞 – 8 Utumishi Girls students charged with murder as court shields identities
    • Infotrak survey: Kenyans rank delivery of promises as top measure of leaders’ performance
    • Kenya and Morocco deepen defence cooperation with joint focus on air power and military training
    • Kenya pushes for common AI rules across COMESA to boost trade and cybersecurity
    • Somalia’s Deputy Prime Minister breaks silence after Kenya deportation, denies arming militias
    • 𝐄𝐚𝐬𝐭𝐥𝐞𝐢𝐠𝐡 𝐕𝐨𝐢𝐜𝐞 𝐚𝐭 𝐍𝐢𝐧𝐞 – Meru miraa farmers push back against new licensing law, demand review

    Kenya’s road to the final saw them beat Tanzania 2-1 in the group stage before overpowering Burundi 4-0 in the semi-finals. Apart from a goalless draw with Rwanda in the group stage, Kenya has won all their matches.
    Rising Stars head coach, Salim Babu, is aware of the challenge posed by Tanzania but remains confident in his team’s readiness. “Tanzania will want revenge, which makes the final tougher, but we’ve prepared well, and the players are determined to win,” said Babu, who also manages Kenya Police in the FKF Premier League.
    Tanzania has bounced back from their group stage defeat to Kenya by winning their next four matches, including a 2-1 victory over Uganda in the semi-finals. Head coach Charles Boniface Mkwasa is optimistic about their chances after learning from their previous meeting with Kenya. “We are happy to have qualified for AFCON U-20, but now we’re focused on winning the title,” Mkwasa told Cecafaonline.com.

    Latest Stories

    • Machakos Mitumba Market traders suffer heavy losses after midnight fire
    • Kenyans urged to join Saba Saba march to honour victims of alleged abductions, killings
    • Quiet revolution behind foldable smartphones and why they’re making a comeback
    • Invisible peacebuilders: How ‘diplomacy works’ to prevent conflict

    Tanzania will also welcome back star striker Valentino Kusengama, who returns from suspension. Kusengama has scored four goals in the tournament, while Sabri Kondo leads the team with five.
    For Kenya, key forwards Kelvin Wangaya and Aldrine Kibet, both with four goals, along with midfielders Andres Omondi and Hassan Beja, will be crucial to their chances of securing the title.
    Besides the championship, individual awards will be presented for the tournament’s top scorer, best player, best goalkeeper, and the Fair Play Award. The tournament also serves as a qualifier for the 2025 FIFA U-20 World Cup, to be held in Chile.
    CAF will announce the host nation for the 2025 AFCON U-20 on October 22 during its General Assembly in Addis Ababa.
    Earlier today, Uganda will face Burundi in the third-place play-off at the same venue.
    Today’s Matches (KMC Stadium)

  • Uganda vs. Burundi, 12 pm
  • Tanzania vs. Kenya, 3 pm
  • Other Topics To Read

    Top Stories Today

    • Three arrested after Linda Mwananchi convoy attacked in Kisii as police hunt for more suspects
    • Machakos Mitumba Market traders suffer heavy losses after midnight fire
    • Kenyans urged to join Saba Saba march to honour victims of alleged abductions, killings
    • Quiet revolution behind foldable smartphones and why they’re making a comeback
    • Invisible peacebuilders: How ‘diplomacy works’ to prevent conflict
    • State extends security operation in Marsabit, declares multiple areas dangerous for 30 more days

    `;
    }

    return “;
    }

    function commentActionsMarkup(comment, canComment) {
    const likeLabel = comment.liked_by_me ? ‘Liked’ : ‘Like’;
    const likeCount = Number(comment.like_count || 0) > 0
    ? “
    : ”;

    const likeButton = canComment && comment.status === ‘approved’
    ? “
    : “;

    const replyButton = canComment && comment.status === ‘approved’
    ? “
    : ”;

    return `

    `;
    }

    function commentMarkup(comment, canComment, isReply = false) {
    const pendingBadge = comment.status && comment.status !== ‘approved’
    ? “
    : ”;

    const edited = comment.is_edited
    ? “
    : ”;

    const repliesHtml = Array.isArray(comment.replies) && comment.replies.length
    ? `

    `
    : “;

    return `

    `;
    }

    function replyFormMarkup(commentId) {
    return `

    `;
    }

    function setNotice(widget, message, type = ‘info’) {
    const notice = widget.querySelector(‘[data-role=”notice”]’);
    if (!notice) return;

    if (!message) {
    notice.hidden = true;
    notice.textContent = ”;
    notice.classList.remove(‘is-error’);
    return;
    }

    notice.hidden = false;
    notice.textContent = message;
    notice.classList.toggle(‘is-error’, type === ‘error’);
    }

    function setCount(widget, total) {
    const count = widget.querySelector(‘[data-role=”count”]’);
    if (!count) return;

    const num = Number(total || 0);
    count.textContent = num === 1 ? ‘1 comment’ : `${num} comments`;
    }

    function openReplyBox(widget, commentId) {
    widget.querySelectorAll(‘[data-role=”reply-box”]’).forEach(box => {
    box.hidden = true;
    box.innerHTML = ”;
    });

    const targetItem = widget.querySelector(`.ev-comments__item[data-comment-id=”${commentId}”]`);
    if (!targetItem) return;

    const replyBox = targetItem.querySelector(‘[data-role=”reply-box”]’);
    if (!replyBox) return;

    replyBox.hidden = false;
    replyBox.innerHTML = replyFormMarkup(commentId);

    const textarea = replyBox.querySelector(‘textarea’);
    if (textarea) textarea.focus();
    }

    function closeReplyBox(container) {
    if (!container) return;
    container.hidden = true;
    container.innerHTML = ”;
    }

    async function initCommentsWidget(widget) {
    const state = {
    articleId: Number(widget.dataset.articleId),
    loadUrl: widget.dataset.loadUrl,
    storeUrl: widget.dataset.storeUrl,
    commentsBaseUrl: widget.dataset.commentsBaseUrl,
    canComment: widget.dataset.canComment === ‘1’,
    page: 1,
    perPage: 10,
    sort: ‘newest’,
    total: 0,
    hasMore: false,
    busy: false
    };

    const list = widget.querySelector(‘[data-role=”list”]’);
    const loading = widget.querySelector(‘[data-role=”loading”]’);
    const empty = widget.querySelector(‘[data-role=”empty”]’);
    const loadMoreBtn = widget.querySelector(‘[data-role=”load-more”]’);
    const sortSelect = widget.querySelector(‘[data-role=”sort”]’);
    const composerForm = widget.querySelector(‘[data-role=”composer-form”]’);

    async function loadComments(reset = true) {
    if (state.busy) return;

    state.busy = true;
    setNotice(widget, ”);
    loading.hidden = false;

    if (reset) {
    state.page = 1;
    list.innerHTML = ”;
    empty.hidden = true;
    }

    try {
    const url = new URL(state.loadUrl, window.location.origin);
    url.searchParams.set(‘page’, state.page);
    url.searchParams.set(‘per_page’, state.perPage);
    url.searchParams.set(‘sort’, state.sort);

    const response = await requestJson(url.toString(), {
    method: ‘GET’,
    headers: {
    ‘Accept’: ‘application/json’,
    ‘X-Requested-With’: ‘XMLHttpRequest’
    }
    });

    const items = Array.isArray(response.data) ? response.data : [];
    const meta = response.meta || {};

    state.total = Number(meta.total || 0);
    state.hasMore = !!meta.has_more;

    setCount(widget, state.total);

    if (reset) {
    list.innerHTML = ”;
    }

    if (!items.length && reset) {
    empty.hidden = false;
    } else {
    empty.hidden = true;
    list.insertAdjacentHTML(
    ‘beforeend’,
    items.map(item => commentMarkup(item, state.canComment, false)).join(”)
    );
    }

    loadMoreBtn.hidden = !state.hasMore;
    } catch (error) {
    if (!list.children.length) {
    empty.hidden = false;
    empty.textContent = ‘Unable to load comments right now.’;
    }
    setNotice(widget, error.message || ‘Unable to load comments.’, ‘error’);
    } finally {
    loading.hidden = true;
    state.busy = false;
    }
    }

    async function submitTopLevelComment(form) {
    const textarea = form.querySelector(‘textarea[name=”content”]’);
    const button = form.querySelector(‘[data-role=”submit-comment”]’);

    if (!textarea) return;

    const content = textarea.value.trim();
    if (!content) return;

    const originalText = button ? button.textContent : ”;

    try {
    if (button) {
    button.disabled = true;
    button.textContent = ‘Posting…’;
    }

    const response = await requestJson(state.storeUrl, {
    method: ‘POST’,
    headers: buildJsonHeaders(),
    body: JSON.stringify({
    article_id: state.articleId,
    content: content,
    source_url: window.location.href
    })
    });

    textarea.value = ”;

    if (response?.data) {
    list.insertAdjacentHTML(
    ‘afterbegin’,
    commentMarkup(response.data, state.canComment, false)
    );
    empty.hidden = true;

    if ((response.data.status || ”) === ‘approved’) {
    state.total += 1;
    setCount(widget, state.total);
    }
    }

    setNotice(widget, response.message || ‘Comment posted successfully.’);
    } catch (error) {
    setNotice(widget, error.message || ‘Unable to post comment.’, ‘error’);
    } finally {
    if (button) {
    button.disabled = false;
    button.textContent = originalText || ‘Post comment’;
    }
    }
    }

    async function submitReply(form) {
    const commentId = Number(form.dataset.commentId || 0);
    const textarea = form.querySelector(‘textarea[name=”content”]’);
    const button = form.querySelector(‘.ev-comments__reply-submit’);

    if (!commentId || !textarea) return;

    const content = textarea.value.trim();
    if (!content) return;

    const originalText = button ? button.textContent : ”;

    try {
    if (button) {
    button.disabled = true;
    button.textContent = ‘Posting…’;
    }

    const response = await requestJson(`${state.commentsBaseUrl}/${commentId}/reply`, {
    method: ‘POST’,
    headers: buildJsonHeaders(),
    body: JSON.stringify({
    article_id: state.articleId,
    content: content,
    source_url: window.location.href
    })
    });

    if (response?.data) {
    const parentItem = widget.querySelector(`.ev-comments__item[data-comment-id=”${commentId}”]`);
    if (parentItem) {
    const repliesWrap = parentItem.querySelector(‘.ev-comments__replies’);
    if (repliesWrap) {
    repliesWrap.insertAdjacentHTML(
    ‘beforeend’,
    commentMarkup(response.data, state.canComment, true)
    );
    }
    }
    }

    closeReplyBox(form.closest(‘[data-role=”reply-box”]’));
    setNotice(widget, response.message || ‘Reply posted successfully.’);
    } catch (error) {
    setNotice(widget, error.message || ‘Unable to post reply.’, ‘error’);
    } finally {
    if (button) {
    button.disabled = false;
    button.textContent = originalText || ‘Post reply’;
    }
    }
    }

    async function toggleLike(button) {
    const commentId = Number(button.dataset.commentId || 0);
    if (!commentId) return;

    const originalHtml = button.innerHTML;

    try {
    button.disabled = true;
    button.innerHTML = ‘Working…’;

    const response = await requestJson(`${state.commentsBaseUrl}/${commentId}/like`, {
    method: ‘POST’,
    headers: buildJsonHeaders(),
    body: JSON.stringify({})
    });

    const liked = !!response?.data?.liked;
    const likeCount = Number(response?.data?.like_count || 0);

    button.classList.toggle(‘is-liked’, liked);
    button.innerHTML = `${liked ? ‘Liked’ : ‘Like’} ${likeCount > 0 ? “ : ”}`;
    } catch (error) {
    button.innerHTML = originalHtml;
    setNotice(widget, error.message || ‘Unable to update like.’, ‘error’);
    } finally {
    button.disabled = false;
    }
    }

    if (composerForm) {
    composerForm.addEventListener(‘submit’, function (e) {
    e.preventDefault();
    submitTopLevelComment(composerForm);
    });
    }

    if (sortSelect) {
    sortSelect.addEventListener(‘change’, function () {
    state.sort = this.value || ‘newest’;
    loadComments(true);
    });
    }

    if (loadMoreBtn) {
    loadMoreBtn.addEventListener(‘click’, function () {
    if (state.busy || !state.hasMore) return;
    state.page += 1;
    loadComments(false);
    });
    }

    widget.addEventListener(‘click’, function (e) {
    const likeBtn = e.target.closest(‘[data-action=”toggle-like”]’);
    if (likeBtn) {
    e.preventDefault();
    toggleLike(likeBtn);
    return;
    }

    const replyBtn = e.target.closest(‘[data-action=”toggle-reply”]’);
    if (replyBtn) {
    e.preventDefault();
    openReplyBox(widget, Number(replyBtn.dataset.commentId || 0));
    return;
    }

    const cancelReplyBtn = e.target.closest(‘[data-action=”cancel-reply”]’);
    if (cancelReplyBtn) {
    e.preventDefault();
    closeReplyBox(cancelReplyBtn.closest(‘[data-role=”reply-box”]’));
    }
    });

    widget.addEventListener(‘submit’, function (e) {
    const replyForm = e.target.closest(‘.ev-comments__reply-form’);
    if (replyForm) {
    e.preventDefault();
    submitReply(replyForm);
    }
    });

    loadComments(true);
    }

    document.addEventListener(‘DOMContentLoaded’, function () {
    document.querySelectorAll(‘.ev-comments’).forEach(initCommentsWidget);
    });
    })();

    Trending

    Messi is old, short and slow: How is he still dominating at the World Cup?
    Messi is old, short and slow: How is he still dominating at the World Cup?Sports
    |The Conversation
    |23 hours ago
    Government extends security operation in Marsabit, declares multiple areas dangerous for 30 more days
    Government extends security operation in Marsabit, declares multiple areas dangerous for 30 more daysNorthern Kenya
    |Lucy Mumbi
    |2 hours ago
    Iran begins six-day funeral for late Supreme Leader Ali Khamenei
    Iran begins six-day funeral for late Supreme Leader Ali KhameneiWorld
    |DW News
    |1 day ago
    Serena Williams withdraws from Wimbledon doubles after knee injury, ending Venus reunion plans
    Serena Williams withdraws from Wimbledon doubles after knee injury, ending Venus reunion plansSports
    |Bashir Mbuthia
    |11 hours ago
    Pope Leo XIV shines spotlight on Mediterranean migration crisis
    Pope Leo XIV shines spotlight on Mediterranean migration crisisWorld
    |Mary Wambui
    |15 hours ago
    Egypt end 92-year wait to reach World Cup last 16
    Egypt end 92-year wait to reach World Cup last 16News
    |Erick Kariuki
    |1 day ago
    Three arrested after Linda Mwananchi convoy attacked in Kisii as police hunt for more suspects
    Three arrested after Linda Mwananchi convoy attacked in Kisii as police hunt for more suspectsNews
    |Lucy Mumbi
    |2 hours ago
    Mbappé fires France past Paraguay into World Cup quarter-finals
    Mbappé fires France past Paraguay into World Cup quarter-finalsSports
    |Erick Kariuki
    |3 hours ago
    Kenya reaffirms ties with Rwanda as it marks Liberation Day celebrations
    Kenya reaffirms ties with Rwanda as it marks Liberation Day celebrationsRegional
    |Bashir Mbuthia
    |11 hours ago
    What the World Cup hydration breaks reveal about who governs men’s football
    What the World Cup hydration breaks reveal about who governs men’s footballSports
    |The Conversation
    |18 hours ago

    AFCON again clash KENYA Tanzania
    Share. Facebook Twitter Pinterest LinkedIn Tumblr Email
    Johnson Benguru
    • Website

    Related Posts

    CAF unanimously backs Gianni Infantino for FIFA Presidency 2027–2031

    July 5, 2026

    Kenya climbs to sixth place in Africa’s digital rights ranking

    July 5, 2026

    FIFA World Cup: Morocco advance to the quarterfinals!

    July 5, 2026
    Leave A Reply Cancel Reply

    Search
    Latest Post

    SA paradox: From xenophobia to buying blue

    July 5, 2026

    Climate crisis threatens education in Africa -Save the Children

    July 5, 2026

    EU prepares another $1.7 billion for Egypt as Europe deepens its strategic bet on Africa’s second

    July 5, 2026

    Residents in eastern Congo cling to hope as new Ebola treatment trial begins

    July 5, 2026

    What Mamla Legal Hai Gets Right And Misses About Death Penalty

    July 5, 2026

    Subscribe to Updates

    Get the latest creative news from FooBar about art, design and business.

    • Facebook
    • Twitter
    • Pinterest
    • Instagram
    • YouTube
    • TikTok
    ABS TV and ABS Network News is a leading Pan-African 24/7 broadcasting network delivering nonstop news, talk shows, lifestyle programs, and digital media content worldwide through Satellite, Streaming Platforms, and Roku TV.
     
    Based in the United States, we connect Africa to the world while empowering creators, journalists, and brands through innovative media and broadcasting services.
    Facebook X (Twitter) Pinterest WhatsApp Instagram

    Our Picks

    SA paradox: From xenophobia to buying blue

    Climate crisis threatens education in Africa -Save the Children

    EU prepares another $1.7 billion for Egypt as Europe deepens its strategic bet on Africa’s second

    Most Popular

    Residents in eastern Congo cling to hope as new Ebola treatment trial begins

    What Mamla Legal Hai Gets Right And Misses About Death Penalty

    Don’t abandon God after your success, Davido tells young dreamers

    © 2026 Copyright. All Rights Reserved by ABSAFRICATV
    • Privacy Policy
    • Terms of Services

    Type above and press Enter to search. Press Esc to cancel.

    We use cookies to ensure that we give you the best experience on our website. If you continue to use this site we will assume that you are happy with it.