Android 앱(Kotlin)에 Huawei Ads Kit의 보상형 광고 기능 통합


소개

이 기사에서는 Huawei Ads Kit의 보상형 광고 기능을 Android 앱에 통합하는 방법을 알아볼 수 있습니다. 따라서 보상형 광고는 사용자가 인앱 보상을 받는 대가로 시청할 수 있는 전체 화면 동영상 광고입니다.

광고 키트

Huawei Ads는 개발자에게 양질의 광고 콘텐츠를 사용자에게 제공할 수 있는 광범위한 기능을 제공합니다. 이는 대상 고객에게 쉽게 도달하고 사용자 생산성을 측정할 수 있는 가장 좋은 방법입니다. 무료 앱을 게시하고 그것으로 돈을 벌고 싶을 때 매우 유용합니다.

HMS 광고 키트에는 7가지 유형의 광고 키트가 있습니다. 이제 이 애플리케이션에서 보상형 광고를 구현할 수 있습니다.

요구 사항
  • 모든 운영 체제(MacOS, Linux 및 Windows).
  • HMS 4.0.0.300 이상이 설치된 Huawei 휴대폰이 있어야 합니다.
  • Android Studio, Jdk 1.8, SDK 플랫폼 26 및 Gradle 4.6 이상이 설치된 노트북 또는 데스크톱이 있어야 합니다.
  • 최소 API 레벨 24가 필요합니다.
  • EMUI 9.0.0 이상 버전 장치가 필요합니다.

  • HMS 종속성을 통합하는 방법
  • 먼저 Huawei 개발자로 등록하고 Huawei 개발자 웹 사이트에서 신원 확인을 완료합니다. 등록 aHuawei ID를 참조하십시오.
  • android studio에서 프로젝트를 생성합니다. Creating an Android Studio Project을 참조하십시오.
  • SHA-256 인증서 지문을 생성합니다.
  • SHA-256 인증서 지문을 생성합니다. Android 프로젝트의 오른쪽 상단에서 Gradle을 클릭하고 Project Name > Tasks > android를 선택한 후 다음과 같이 SigningReport를 클릭합니다.



  • 참고: 프로젝트 이름은 사용자가 만든 이름에 따라 다릅니다.
  • Create an App in AppGallery Connect .
  • 다음과 같이 앱 정보에서 agconnect-services.json 파일을 다운로드하고 앱 디렉토리 아래의 android Project에 복사하여 붙여넣습니다.


  • 다음과 같이 SHA-256 인증서 지문을 입력하고 저장 버튼을 클릭합니다.


  • buildscript, dependencies 및 allprojects의 리포지토리 아래 build.gradle(Project) 파일에 아래 maven URL을 추가합니다. Add Configuration을 참조하십시오.

  • maven { url 'http://developer.huawei.com/repo/' }
    classpath 'com.huawei.agconnect:agcp:1.6.0.300'
    
    

  • build.gradle(Module) 파일에 아래 플러그인 및 종속 항목을 추가합니다.

  • apply plugin: id 'com.huawei.agconnect'
    // Huawei AGC
    implementation 'com.huawei.agconnect:agconnect-core:1.6.0.300'
    // Huawei Ads Kit
    implementation 'com.huawei.hms:ads-lite:13.4.51.300'
    

  • 이제 Gradle을 동기화합니다.
  • AndroidManifest.xml 파일에 필요한 권한을 추가합니다.

  • // Ads Kit
    <uses-permission android:name="android.permission.INTERNET" />
    

    개발로 이동하자

    빈 활동으로 Android 스튜디오에서 프로젝트를 생성하여 코딩을 시작하겠습니다.

    MainActivity.kt에서 광고에 대한 비즈니스 로직을 찾을 수 있습니다.

    class MainActivity : AppCompatActivity() {
    
        companion object {
            private const val PLUS_SCORE = 1
            private const val MINUS_SCORE = 5
            private const val RANGE = 2
        }
        private var rewardedTitle: TextView? = null
        private var scoreView: TextView? = null
        private var reStartButton: Button? = null
        private var watchAdButton: Button? = null
        private var rewardedAd: RewardAd? = null
        private var score = 1
        private val defaultScore = 10
    
        override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
            setContentView(R.layout.activity_main)
    
            title = getString(R.string.reward_ad)
            rewardedTitle = findViewById(R.id.text_reward)
            rewardedTitle!!.setText(R.string.reward_ad_title)
    
            // Load a rewarded ad.
            loadRewardAd()
    
            // Load a score view.
            loadScoreView()
    
            // Load the button for watching a rewarded ad.
            loadWatchButton()
    
            // Load the button for starting a game.
            loadPlayButton()
    
        }
    
        // Load a rewarded ad.
        private fun loadRewardAd() {
            if (rewardedAd == null) {
                rewardedAd = RewardAd(this@MainActivity, getString(R.string.ad_id_reward))
            }
            val rewardAdLoadListener: RewardAdLoadListener = object : RewardAdLoadListener() {
                override fun onRewardAdFailedToLoad(errorCode: Int) {
                    showToast("onRewardAdFailedToLoad errorCode is :$errorCode");
                }
                override fun onRewardedLoaded() {
                    showToast("onRewardedLoaded")
                }
            }
            rewardedAd!!.loadAd(AdParam.Builder().build(), rewardAdLoadListener)
        }
    
       // Display a rewarded ad.
        private fun rewardAdShow() {
            if (rewardedAd!!.isLoaded) {
                rewardedAd!!.show(this@MainActivity, object : RewardAdStatusListener() {
                    override fun onRewardAdClosed() {
                        showToast("onRewardAdClosed")
                        loadRewardAd()
                    }
                    override fun onRewardAdFailedToShow(errorCode: Int) {
                        showToast("onRewardAdFailedToShow errorCode is :$errorCode")
                    }
                    override fun onRewardAdOpened() {
                        showToast("onRewardAdOpened")
                    }
                    override fun onRewarded(reward: Reward) {
                        // You are advised to grant a reward immediately and at the same time, check whether the reward
                        // takes effect on the server. If no reward information is configured, grant a reward based on the
                        // actual scenario.
                        val addScore = if (reward.amount == 0) defaultScore else reward.amount
                        showToast("Watch video show finished , add $addScore scores")
                        score += addScore
                        setScore(score)
                        loadRewardAd()
                    }
                })
            }
        }
    
        // Set a Score
        private fun setScore(score: Int) {
            scoreView!!.text = "Score:$score"
        }
    
        // Load the button for watching a rewarded ad
        private fun loadWatchButton() {
            watchAdButton = findViewById(R.id.show_video_button)
            watchAdButton!!.setOnClickListener(View.OnClickListener { rewardAdShow() })
        }
    
        // Load the button for starting a game
        private fun loadPlayButton() {
            reStartButton = findViewById(R.id.play_button)
            reStartButton!!.setOnClickListener(View.OnClickListener { play() })
        }
    
        private fun loadScoreView() {
            scoreView = findViewById(R.id.score_count_text)
            scoreView!!.text = "Score:$score"
        }
    
        // Used to play a game
        private fun play() {
            // If the score is 0, a message is displayed, asking users to watch the ad in exchange for scores.
            if (score == 0) {
                Toast.makeText(this@MainActivity, "Watch video ad to add score", Toast.LENGTH_SHORT).show()
                return
            }
            // The value 0 or 1 is returned randomly. If the value is 1, the score increases by 1. If the value is 0, the
            // score decreases by 5. If the score is a negative number, the score is set to 0.
            val random = Random().nextInt(RANGE)
            if (random == 1) {
                score += PLUS_SCORE
                Toast.makeText(this@MainActivity, "You win!", Toast.LENGTH_SHORT).show()
            } else {
                score -= MINUS_SCORE
                score = if (score < 0) 0 else score
                Toast.makeText(this@MainActivity, "You lose!", Toast.LENGTH_SHORT).show()
            }
            setScore(score)
        }
    
        private fun showToast(text: String) {
            runOnUiThread {
                Toast.makeText(this@MainActivity, text, Toast.LENGTH_SHORT).show()
            }
        }
    
    
    }
    


    activity_main.xml에서 UI 화면을 만들 수 있습니다.

    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context=".MainActivity">
    
        <TextView
            android:id="@+id/text_reward"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="16dp"
            android:textAlignment="center"
            android:textSize="20sp"
            android:text="This is rewarded ads sample"/>
    
        <Button
            android:id="@+id/play_button"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_below="@+id/text_reward"
            android:layout_centerHorizontal="true"
            android:layout_marginTop="20dp"
            android:text="Play" />
    
        <Button
            android:id="@+id/show_video_button"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_below="@+id/play_button"
            android:layout_centerHorizontal="true"
            android:layout_marginTop="20dp"
            android:text="Watch Video" />
    
        <TextView
            android:id="@+id/score_count_text"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_below="@+id/show_video_button"
            android:layout_centerHorizontal="true"
            android:layout_marginTop="30dp"
            android:textAppearance="?android:attr/textAppearanceLarge" />
    
    </RelativeLayout>
    


    데모



    팁과 요령
  • 이미 Huawei 개발자로 등록되어 있는지 확인하십시오.
  • minSDK 버전을 24 이상으로 설정하십시오. 그렇지 않으면 AndriodManifest 병합 문제가 발생합니다.
  • 앱 폴더에 agconnect-services.json 파일을 추가했는지 확인하십시오.
  • 반드시 SHA-256 지문을 추가했는지 확인하십시오.
  • 모든 종속성이 제대로 추가되었는지 확인하십시오.

  • 결론

    이 기사에서는 Huawei Analytics Kit와 Ads Kit를 Book Reading 앱에 통합하는 방법을 배웠습니다. 그래서 저는 이 책 읽기 앱에 대한 일련의 기사를 제공할 것이며, 다음 기사에서는 다른 Huawei 키트를 통합할 것입니다.

    이 기사를 읽으셨기를 바랍니다. 도움이 되셨다면 좋아요와 댓글 부탁드립니다.

    참조

    광고 키트 - Rewarded Ads

    광고 키트 – Training Video

    좋은 웹페이지 즐겨찾기