25届即将毕业,月薪15K,凭什么!!

150 阅读6分钟

前提

小伙伴们大家好,我是青蓝逐码的云杰,我们的组织域名很快就要下来啦,即将跟大家见面!

image.png 废话不多说,小伙伴们应该都很好奇,“月薪15k”骗人的吧,现在工作都比较难找,凭什么月薪15k,他肯定是985,211的。首先我是25届毕业生,前段时间才参加完我的毕业答辩;

image.png

其次,月薪15k不骗人,“大学生从来不骗人”哈哈哈,我也只是一个普通一本的学生,下面展示我的offer和我的出差记录; image.png

飞机上的风景也不错哈哈哈!

image.png

从2021年进入大学以来,仔细想想其实我接触前端已经快三年了,开发鸿蒙已经快两年了,这应该算是对自己大学生涯的一个回顾和总结吧。从接触鸿蒙-->学习框架-->做项目-->熟悉前辈源码-->沉淀-->准备面试-->面试-->工作-->现在主动打造鸿蒙生态,在之前的沉淀过程中,我也上架了多款应用和元服务,也拿到了华为的激励奖励(真香哈哈哈);如果鸿蒙生态是一片星空,那我就是那颗努力闪烁的小恒星(虽然还不够亮,但正在发光发热中)

在4月份以来,我们上架了两款元服务,其中我们也接入了华为的广告服务,下面介绍一下广告接入的流程吧~

image.png

广告流程

商业上架前需进行广告的测试验证,包括媒体自测和鲸鸿动能验收两个步骤。

image.png

自测

自测阶段请使用测试ID,并对照《APK广告位信息表》交付件中的“转测自检项”核对检查;

  1. SDK自助测试工具

    您可以通过SDK自助测试工具检测自己的App是否正确集成了SDK、广告请求和广告返回是否成功、广告展示是否正常以及广告事件是否正常上报。如果广告请求异常或未正确获取广告,SDK自助测试工具会提供相应的解决建议。具体详情请扫描下方二维码或点击链接下载APK。

    类型二维码APK下载
    APK下载
  2. 极速开屏无需自测,直接提交鲸鸿动能测试验收,但需填写信息表。

  3. 请务必检查确认关于用户隐私声明的要求,媒体需以自身的名义发布用户隐私声明,禁止以华为或鲸鸿动能等名义发布用户隐私声明,详情参考《业务规范》- 《隐私声明》的要求;

  4. 各广告位规则:请参照《业务规范》-《广告规范》

  5. 自测完成后,填写《APK广告位信息表》和《RPK广告位信息表》,其中涉及广告位信息和转测自检项,保证清晰描述广告位调用逻辑,转测自检项全部通过。

鲸鸿动能验收

在自测没有问题之后,我们要交予鲸鸿动能验收,联系人工客服,拉群进行验收(一家公司有一个群就行了)

一般就是1-2个工作日哈

image.png

image.png

运营配置广告

在测试验收通过之后,他们会联系运营进行配置广告,一般这个过程也需要一日

image.png

image.png

商品上架

在上方的步骤全部结束之后,我们就可以更换广告正式位ID,然后上架

广告开发流程

请求广告。

请求单广告位广告,需要创建一个AdLoader对象,通过AdLoader的loadAd方法请求广告,最后通过AdLoadListener,来监听广告的加载状态。

请求广告关键参数如下所示:

请求广告参数名类型必填说明
adTypenumber请求广告类型,原生广告类型为3。
adIdstring广告位ID。
  • 如果仅调测广告,可使用测试广告位ID:testy63txaom86(原生视频),testu7m3hc4gvm(原生大图),testb65czjivt9(原生小图),testr6w14o0hqz(原生三图)。

  • 如果要接入正式广告,则需要申请正式的广告位ID。可在应用发布前进入流量变现官网,点击“开始变现”,登录鲸鸿动能媒体服务平台进行申请,具体操作详情请参见展示位创建

展示广告

  • 说明 用户关闭广告或点负反馈,需要处理AD_CLOSED回调。在您的页面中使用AdComponent组件展示原生广告

封装之后的代码

请求广告的类

NativeAdUtil.ets

import { advertising } from '@kit.AdsKit';
import { router } from '@kit.ArkUI';
import { common } from '@kit.AbilityKit';
import { hilog } from '@kit.PerformanceAnalysisKit';
import { emitter } from '@kit.BasicServicesKit';

export class NativeAdUtil {
  private ads: Array<advertising.Advertisement> = [];
  private context: common.UIAbilityContext = getContext(this) as common.UIAbilityContext;

  requestAd() {
    // 广告展示参数
    const adDisplayOptions: advertising.AdDisplayOptions = {
      // 是否静音,默认不静音
      mute: false
    }
    // 原生广告配置
    const adOptions: advertising.AdOptions = {
      // 设置是否请求非个性化广告
      nonPersonalizedAd: 1,
      // 是否允许流量下载0:不允许,1:允许,不设置以广告主设置为准
      allowMobileTraffic: 0,
      // 是否希望根据 COPPA 的规定将您的内容视为面向儿童的内容: -1默认值,不确定 0不希望 1希望
      tagForChildProtection: -1,
      // 是否希望按适合未达到法定承诺年龄的欧洲经济区 (EEA) 用户的方式处理该广告请求: -1默认值,不确定 0不希望 1希望
      tagForUnderAgeOfPromise: -1,
      // 设置广告内容分级上限: W: 3+,所有受众 PI: 7+,家长指导 J:12+,青少年 A: 16+/18+,成人受众
      adContentClassification: 'A'
    }
    // 原生广告请求参数
    const nativeVideoAdReqParams: advertising.AdRequestParams = {
      // 'testu7m3hc4gvm'为测试专用的广告位ID,应用正式发布时需要改为正式的广告位ID
      //正式广告位  s3z1eig5n2
      adId: 's3z1eig5n2',
      adType: 3,
      adCount: 1,
      // 原生广告自定义扩展参数。等所有广告素材下载完后再回调
      enableDirectReturnVideoAd: true
    }
    // 广告请求回调监听
    const adLoaderListener: advertising.AdLoadListener = {
      // 广告请求失败回调
      onAdLoadFailure: (errorCode: number, errorMsg: string) => {
        hilog.error(0x0000, 'testTag', '%{public}s',
          `Failed to request ad, message: ${errorMsg}, error code: ${errorCode}`);
      },
      // 广告请求成功回调
      onAdLoadSuccess: (ads: Array<advertising.Advertisement>) => {
        hilog.info(0x0000, 'testTag', '%{public}s', `Succeeded in requesting ad`);
        // 调用原生广告展示页面
        emitter.emit('NativeAdPage',
          { data: { 'ads': ads, 'adDisplayOptions': adDisplayOptions } })
      }
    };
    // 创建AdLoader广告对象
    const load: advertising.AdLoader = new advertising.AdLoader(this.context);
    // 调用广告请求接口
    load.loadAd(nativeVideoAdReqParams, adOptions, adLoaderListener);
  }
}

export const nativeAdUtil = new NativeAdUtil()

广告展示组件

import { AdComponent, advertising } from '@kit.AdsKit';
import { emitter } from '@kit.BasicServicesKit';
import { nativeAdUtil } from '../utils/NativeAdUtil';


@Component
export struct NativeAdPage {
  // 广告内容
  private ads: Array<advertising.Advertisement> = [];
  private adDisplayOptions: advertising.AdDisplayOptions = {
    // 是否静音,默认不静音
    mute: false
  };
  @State isShow: boolean = false

  aboutToAppear() {
    emitter.on('NativeAdPage', (eventData: emitter.EventData) => {
      const data = eventData.data as Record<string, object>
      this.ads = data['ads'] as Array<advertising.Advertisement>
      this.adDisplayOptions = data['adDisplayOptions'] as advertising.AdDisplayOptions
      this.isShow = true
    })
    nativeAdUtil.requestAd()
  }

  build() {
    if (this.isShow) {
      AdComponent({
        ads: this.ads,
        displayOptions: this.adDisplayOptions,
        interactionListener: {
          onStatusChanged: (status: string, ad: advertising.Advertisement, data: string) => {
            switch (status) {
              case AdStatus.AD_OPEN:
                break;
              case AdStatus.AD_CLICKED:
                break;
              case AdStatus.AD_CLOSED:
                break;
              default:
            }
          }
        }
      })
        .width('100%')
    }

  }
}

enum AdStatus {
  AD_OPEN = 'onAdOpen',
  AD_CLICKED = 'onAdClick',
  AD_CLOSED = 'onAdClose'
}

测试位ID效果

image.png

总结

本篇简单介绍了一下广告服务,后续我们也将对自然壁纸出一个教程解析,对鸿蒙感兴趣的小伙伴可以关注一下我们的组织也可以私信我加入我们团队的v群,欢迎大家~