Laya ios接入goole广告,开始接入 2

news2024/12/24 6:25:37

开始使用  |  iOS  |  Google for Developers

谷歌广告的官网,需要搭梯子,API你说详细吧,也就那样,主要是没接过

一步步来吧

0.laya导包

前端出包原生 screenorientation 全部 portrait,我这个是竖屏的

注意这个,不需要,否则会862,至于862是啥,自己可以试试就知道了~!~

创建吧

1.使用 CocoaPods。请打开项目的 Podfile 文件

Podfile 文件,创建一个记事本文件,取名Podfile,删除后缀。

我说这样写的,仓库不需要,屏蔽,platform是必须的,没用target,workspace就是必须的了。

没有太研究CocoaPods这个东西,也不知道这样写会不会有问题。

2.然后使用命令行运行以下命令,工程下的上一层目录,右键如下操作,进入中终端:

pod install --repo-update

3.下载google的包,导入

4.导入Swift,依次前往 File(文件)> Add Packages(添加软件包),安装 Google 移动广告 Swift 软件包

https://github.com/googleads/swift-package-manager-google-mobile-ads.git

5.Embed & Sign

6.在项目的 build settings 中:

将 /usr/lib/swift 路径添加到 Runpath Search Paths。

将 -ObjC 链接器标志添加到 Other Linker Flags。

注意:Excludes Architectures中填入arm64,这样的话就使用模拟器不会报错了。

7.更新应用的 Info.plist 文件

按照谷歌API那样写就行,权限是肯定要加的,ios的api看的脑壳乱,单机的也没加啥权限,主要是也不太懂这个privacy。

8.开屏广告 不需要布局文件,主要是后天切前台才会触发,这一点始终让我有点迷糊,改了的话,直接调用[AppOpenAdManager.sharedInstance loadAd]的话,就会一直的重复显示,就按照官方的api,没做修改。

.mm官方给了,我就不写了,.h可以这样搬过去,也没必要写一些其它的方法。


#import <GoogleMobileAds/GoogleMobileAds.h>
#import <UIKit/UIKit.h>

@protocol AppOpenAdManagerDelegate <NSObject>
- (void)adDidComplete;
@end

@interface AppOpenAdManager : NSObject <GADFullScreenContentDelegate>

@property (nonatomic, weak) id <AppOpenAdManagerDelegate> _Nullable delegate;

+ (nonnull AppOpenAdManager *)sharedInstance;
- (void)loadAd;
- (void)showAdIfAvailable;

@end

9.横幅广告 布局文件.storyboard,这里直接用了Main.storyboard,主要是这个

10.视频与插屏广告都差不多,按照API来就行,原生的没看懂,就没用,后面再说吧。

11.双通js-->objectivec,objectivec-->js

这个就有点想骂娘,每次都给干错了,呵呵,改成下面这样用吧,去你的Laya.PlatformClass.createClass

showInsertAdToIOS() { 
    console.log("告诉 iOS 显示 插页式广告");
    if (Laya.Browser.onIOS) {//类  方法  参数
        window.PlatformClass.createClass("ViewController").call("showInsertAd:", "");
    } else if (Laya.Browser.onAndroid) { 
        window.PlatformClass.createClass("demo.MainActivity").call("showInsertAd", "");
    }
}

Objective-c接收 记住是+,不是-,我也是在这里晕乎了好长的时间。

至于调用广告,直接发通知吧,不然还得实例化一下,没法弄。

通知怎么用,百度一下,教程很多。

+ (void)ShowRewardAd:(NSString*)str {
//注册通知
    [[NSNotificationCenter defaultCenter] postNotificationName:@"notifyRewardAds" object:str];
}

Objective-c--JS 拼接方法参数

dispatch_async(dispatch_get_main_queue(), ^{
    NSString *str1 = @"rewardFail('";
    NSString *str2 = str;
    NSString *str3 = @"')";
    NSString *combinedString = [NSString stringWithFormat:@"%@%@%@", str1, str2, str3];
    [[conchRuntime GetIOSConchRuntime] runJS:combinedString];
});

JS 接收

window['rewardFail'] = function(json){
    console.log("观看视频失败: " + json);
}.bind(this);

走一个obc中具体的广告流程吧,省着大家不知道怎么用

//1.注册通知

- (void)viewDidLoad
{
    [super viewDidLoad];
......
//拉取插屏广告,方法实现用的官方API的,就不写了。
[self loadInterstitialAd];
//Observer:需要传观察者;
//selector:接收通知后执行方法;
//name:发布通知的标题,或者名称;
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(showInterAds:) name:@"notifyInterAds" object:nil];
}

//2.发起通知

//发起通知 带参
+ (void)ShowInterAd:(NSString*) str {
    [[NSNotificationCenter defaultCenter] postNotificationName:@"notifyInterAds" object:str];
}

//3.执行通知,显示广告

- (void)showInterAds:(NSString*) str {
    if (self.interstitial) {
        [self.interstitial presentFromRootViewController:nil];
    } else {
        NSLog(@"Ad wasn't ready");
    }
}

//4.注意一点,插屏与视频广告,显示完成后需要重新拉取

[self loadInterstitialAd];

//5.关于bannerAd的显示与隐藏,用于js传递过来的都带着参数obc中也就带着参数了。

- (void)showBannerAds:(NSString *)str {
    self.bannerView.alpha = 1;
}
- (void)hideBannerAds:(NSString *)str {
    self.bannerView.alpha = 0;
}

//6.解析通知中的这个参数,我用的string的,具体是那种类型的,在乎你们自己吧

- (void)showRewardAds:(NSNotification*) notification {
    NSString *str = notification.object;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2264577.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

详解js柯里化原理及用法,探究柯里化在Redux Selector 的场景模拟、构建复杂的数据流管道、优化深度嵌套函数中的精妙应用

目录 详解js柯里化原理及用法&#xff0c;探究柯里化在Redux Selector 的场景模拟、构建复杂的数据流管道、优化深度嵌套函数中的精妙应用 一、什么是柯里化&#xff1f; 1、原理解析 2、一个直观的例子 二、如何实现柯里化&#xff1f; 1、底层实现 2、工作原理解析 3…

EDGE浏览器每次关闭时再次打开保存的密码就消失如何解决

文章目录 EDGE浏览器每次重启的时候保存的密码都消失如何解决&#xff1f; 打开EDGE浏览器点击三个点 点击设置 点击隐私、搜索和服务 找到选择每次关闭浏览器时要清除的内容 将开启的关闭即可

数据流图和流程图的区别

在结构化建模中&#xff0c;数据流图和流程图都是非常重要的工具&#xff0c;它们为开发人员提供了强大的手段来分析和设计系统。尽管两者在表面上看起来有些相似&#xff0c;但它们在功能、用途和表达方式上存在显著的区别。本文将详细探讨数据流图和流程图的区别&#xff0c;…

云计算中的容器技术(如Docker)是什么?

今天想和大家聊聊容器技术&#xff0c;特别是Docker这个大家可能经常听到的名词。记得我刚接触容器技术时也觉得挺抽象的&#xff0c;让我用简单的比喻来说明吧。 想象一下你在搬家。传统方式是把所有家具、电器分散装车&#xff0c;到了新家还要重新组装、调试。这就像我们以…

《Opencv》基础操作详解(2)

接上篇&#xff1a;《Opencv》基础操作详解&#xff08;1&#xff09;-CSDN博客 目录 Opencv基础操作 11、B、G、R颜色通道提取 12、显示单个通道颜色 13、 合并颜色通道 14、图像添加马赛克 15、图片区域替换 16、图片的缩放&#xff08;常用&#xff09; 17、图像运算…

STM32——“SPI Flash”

引入 在给单片机写程序的时候&#xff0c;有时会用到显示屏&#xff0c;就拿市面上的0.96寸单色显示器来说&#xff0c;一张全屏的图片就占用8x1281024个字节&#xff0c;即1kb的空间&#xff0c;这对于单片机来说确实有点奢侈&#xff0c;于是我买了一个8Mb的SPI Flash&#x…

深入浅出:AWT的基本组件及其应用

目录 前言 1. AWT简介 2. AWT基本组件 2.1 Button&#xff1a;按钮 2.2 Label&#xff1a;标签 ​编辑 2.3 TextField&#xff1a;文本框 2.4 Checkbox&#xff1a;复选框 2.5 Choice&#xff1a;下拉菜单 2.6 List&#xff1a;列表 综合案例 注意 3. AWT事件处理 …

Flutter组件————PageView

PageView 可以创建滑动页面效果的widget&#xff0c;它允许用户通过水平或垂直滑动手势在多个子页面&#xff08;child widgets&#xff09;之间切换。每个子页面通常占据屏幕的全部空间。 参数 参数名类型描述childrenList<Widget>包含在 PageView 中的所有子部件&am…

三种电子画册制作方法

今天教大家三种电子画册的制作方法&#xff0c;很容易上手&#xff0c;需要的赶紧收藏起来 一、 利用在线平台--FLBOOK 1.注册并登录在线平台。 2.选择喜欢的模板&#xff0c;根据需求进行修改 3.批量上传PDF文件一键转换H5翻页电子画册 4.添加图片、文字等元素&#xff0c…

以太坊账户详解

文章目录 一、账户基本概念1.1 外部账户1.2 合约账户1.3 差异对比 二、帐户创建2.1 外部账户创建2.2 合约账户创建 三、账户数据结构3.1 账户状态3.2 账户状态结构 对比比特币的 “UTXO” 余额模型&#xff0c;以太坊使用“账户”余额模型。 以太坊丰富了账户内容&#xff0c;除…

AWS Transfer 系列:简化文件传输与管理的云服务

在数字化转型的今天&#xff0c;企业对文件传输、存储和管理的需求日益增长。尤其是对于需要大量数据交换的行业&#xff0c;如何高效、可靠地传输数据成为了一大挑战。为了解决这一难题&#xff0c;AWS 提供了一系列的文件传输服务&#xff0c;统称为 AWS Transfer 系列。这些…

基础I/O -> 如何谈文件与文件系统?

文件的基础理解 空文件也要在磁盘上占据空间。文件 文件内容文件属性。文件操作 对内容的操作 对属性的操作或者是对内容和属性的操作。标定一个文件&#xff0c;必须使用&#xff1a;文件路径 文件名&#xff08;具有唯一性&#xff09;。如果没有指明对应的文件路径&…

网络安全检测

实验目的与要求 (1) 帮助学生掌握木马和入侵的防护和检测方法、提高学习能力、应用能力和解决实际问题的能力。 (2) 要求学生掌握方法, 学会应用软件的安装和使用方法, 并能将应用结果展示出来。 实验原理与内容 入侵检测是通过对计算机网络或计算机系统中若干关键点收集信…

谷歌浏览器的资源管理功能详解

谷歌浏览器作为一款广受欢迎的网页浏览器&#xff0c;不仅以其快速、简洁和易用著称&#xff0c;还提供了强大的资源管理功能。本文将详细介绍如何在Chrome浏览器中进行资源管理&#xff0c;包括查看网页的渲染性能、禁用标签页的背景更新以及管理正在下载的文件。&#xff08;…

ARM异常处理 M33

1. ARMv8-M异常类型及其详细解释 ARMv8-M Exception分为两类&#xff1a;预定义系统异常(015)和外部中断(1616N)。 各种异常的状态可以通过Status bit查看&#xff0c;获取更信息的异常原因&#xff1a; CFSR是由UFSR、BFSR和MMFSR组成&#xff1a; 下面列举HFSR、MMFSR、…

Unity2021.3.16f1可以正常打开,但是Unity2017.3.0f3却常常打开闪退或者Unity2017编辑器运行起来就闪退掉

遇到问题&#xff1a; 从今年开始&#xff0c;不知道咋回事&#xff0c;电脑上的Unity2017像是变了个人似得&#xff0c;突然特别爱闪退掉&#xff0c;有时候还次次闪退&#xff0c;真是让人无语&#xff0c;一直以来我都怀疑是不是电脑上安装了什么别的软件了&#xff0c;导致…

SpringBoot核心:自动配置

有使用过SSM框架的&#xff0c;还记得曾经在spring-mybatis.xml配置了多少内容吗&#xff1f;数据源、连接池、会话工厂、事务管理&#xff0c;而现在Spring Boot告诉你这些都不需要了&#xff0c;简单的几个注解统统搞定&#xff0c;是不是很方便&#xff01; 前言 SpringBoo…

重温设计模式--享元模式

文章目录 享元模式&#xff08;Flyweight Pattern&#xff09;概述享元模式的结构C 代码示例1应用场景C示例代码2 享元模式&#xff08;Flyweight Pattern&#xff09;概述 定义&#xff1a; 运用共享技术有效地支持大量细粒度的对象。 享元模式是一种结构型设计模式&#xff0…

Taro小程序开发性能优化实践

我们团队在利用Taro进行秒送频道小程序的同时&#xff0c;一直在探索性能优化的最佳实践。随着需求的不断迭代&#xff0c;项目中的性能问题难免日积月累&#xff0c;逐渐暴露出来影响用户体验。适逢双十一大促&#xff0c;我们趁着这个机会统一进行了Taro性能优化实践&#xf…

纯血鸿蒙APP实战开发——textOverflow长文本省略

介绍 本示例实现了回复评论时&#xff0c;当回复人的昵称与被回复人的昵称长度都过长时&#xff0c;使用textOverflow和maxLines()实现昵称的长文本省略展示的功能。 效果图预览 使用说明 点击评论中的"回复"&#xff0c;在输入框中输入回复内容&#xff0c;点击发…