PocketMediaNativeAds 1.0.1

PocketMediaNativeAds 1.0.1

测试已测试
Lang语言 SwiftSwift
许可 MIT
发布上次发布2017年1月
SwiftSwift 版本3.0
SPM支持 SPM

Adrián Moreno Peña | Pocket Media 维护。




PocketMedia: iOS 本地广告库

Code Climate Build Status

这个开源(Swift/Objective-c)库允许开发者在他们的应用中轻松地展示 PocketMedia 提供的广告。传统的在移动应用中进行广告推广的方式通常会在自然用户流程中打断来显示广告(插屏广告、横幅等),而这一本地解决方案则允许将广告集成到它们将被显示的上下文中。这反过来使用户体验更为顺畅。

该库包括标准的广告单元(显示广告的方式)。鼓励您将它们扩展/复制到项目中,并根据您的喜好进行自定义,特别是要与您的应用外观和感觉相匹配。这种方法称为使用广告流 - 且只需要几行代码即可开始使用。

另一种解决方案是使用库来仅执行网络调用,并使用 NativeAd(类)模型。使用这些核心功能,您能够编写自己定制的广告单元,并以任何适合您应用的方式对它们进行操作。这种方法称为手动集成。

要求

为了使用库并且有货币化跟踪,您需要从 Pocket Media 获取广告商令牌。您可以在我们的注册页面上在线获取。

LandingPage 2016-02-15 10-19-32.png

构建演示

要运行示例项目,请克隆仓库,然后运行 pod install,然后打开工作空间并运行示例方案。

该项目是用 Swift 开发的,但包含桥接头,也可以与 Objective-C 一起使用。

示例项目

在项目中,您有一个本地广告演示项目,我们还已经在 这个 HackerNews 客户端 中集成了本地广告,并且只需要不到 5 行代码 就能实现

安装

PocketMediaNativeAds可以通过CocoaPods获得。要安装它,只需将以下行添加到您的Podfile中

pod "PocketMediaNativeAds"

然后在您的终端中运行以下命令

pod install

故障排除

安装pod时出现问题。

尝试以下方法

  • gem install bundler
  • 进入项目文件目录
  • bundle install

现在再次尝试。如果问题依然存在,请联系我们

用法

有几种方法可以将原生广告集成到您的应用程序中。首先,有AdStream,它会在UITableView中为您处理集成,因为广告在这里天然地作为内容单元格。然而,为了最大的可定制性,您始终可以选择手动使用自定义视图集成NativeAds,这样您就可以在您的应用程序中以任何您能想到的方式塑造和放置广告。

两种方法使用的参数

  • 放置令牌,在用户仪表板生成
  • 委托,用于接收广告准备就绪的事件回调

API文档可在网页版和代码中查看。

AdStream

Adstream允许您轻松地在UITableView和或UICollectionView中显示原生广告。您可以指定位置,通过提供一个包含固定位置或频率的数组。只需在您的UIViewController中添加以下代码,您的广告就会自动加载到视图中。

AdStream - 广告边距

    stream = NativeAdStream(controller: self, view: self.tableView, adPlacementToken: "894d2357e086434a383a1c29868a0432958a3165", adPosition: MarginAdPosition(margin: 2, adPositionOffset: 0)) /* replace with your own token!! */
    stream?.requestAds(10)//Add 10 ads

AdStream - 固定位置

    stream = NativeAdStream(controller: self, view: self.tableView, adPlacementToken: "894d2357e086434a383a1c29868a0432958a3165", adPosition: PredefinedAdPosition(positions: [1, 3, 8], adPositionOffset: 0)) /* replace with your own token!! */
    stream?.requestAds(10)//Add 10 ads

您还可以传递一个自定义的XIB,这必须是或是对应的抽象广告单元的子类,例如AbstractAdUnitTableViewCell。别忘了将连接到您的xib的输出口连接起来!

手动集成

您还可以选择仅使用库来执行网络请求并手动集成广告。要做到这一点,创建一个新的委托类,实现NativeAdsConnectionDelegate并调用NativeAdsRequest来启动广告请求调用。

    let adRequest = NativeAdsRequest(adPlacementToken: "PLACEMENT_TOKEN", delegate: self) /* replace with your own token!! */
    adRequest.retrieveAds(5)//The amount of ads you want to receive.

接收结果

重要:用于下载广告的服务器是getnative.pocketmedia.mobi。此端点是https兼容的,因此您不需要在您的应用程序PLIST中添加任何特定值。自库的0.4.2版本起,进行了此更改。

请求开始请求广告后,将调用以下三个方法来通知委托类(宿主应用程序)广告的状态

  • didRecieveError:强制方法,在检索广告出现错误时调用。这可能是由于网络条件、系统错误、解析错误等原因导致。
  • didRecieveResults:当库获取JSON,解析并将其传递到您的应用程序时,您将收到一个NativeAd对象的数组通知。这是您可以显示广告的时候。
  • didUpdateNativeAd:旧方法,不再使用。

显示广告

这是当广告可用时调用的协议方法。在我们的示例中,我们将广告添加到数据源中并显示它

    func didRecieveResults(nativeAds: [NativeAd]){
        self.nativeAds = nativeAds
        if itemsTable.count > 0 {
            for ad in nativeAds {
                itemsTable.insert(ad, atIndex: Int(arc4random_uniform(UInt32(itemsTable.count))))
            }
            tableView.reloadData()
        }
    }

与显示表单元格的方法一起

    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        switch itemsTable[indexPath.row] {
        case let item as ItemTableView :
            let cell = tableView.dequeueReusableCellWithIdentifier("ItemCell", forIndexPath:indexPath) as! ItemCell
            cell.name.text = item.title
            cell.descriptionItem.text = item.descriptionItem
            loadImageAsynchronouslyFromUrl(item.imageURL, imageView: cell.artworkImageView)
            return cell
        case let ad as NativeAd :
            let cell = tableView.dequeueReusableCellWithIdentifier("AdCell", forIndexPath:indexPath) as! AdCell
            cell.campaignNameLabel.text = ad.campaignName
            cell.campaignDescriptionLabel.text = ad.campaignDescription

            if(ad.campaignImage != nil){
            loadImageAsynchronouslyFromUrl(ad.campaignImage, imageView: cell.campaignImageView)
            }

            return cell
        default:
            return UITableViewCell()
        }
    }

打开URL

当用户点击其中一个广告时,它将打开一个第三方链接。在其他广告解决方案中,这通常会导致用户获得糟糕的体验。然而,这个库提供了一个解决方案来规避这种体验并避免用户点击离开。每个NativeAd实例都有名为 openAdUrl 的方法,该方法使用FullscreenBrowser打开程序创建平滑的过渡到发布者。

    override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
        if let ad = itemsTable[indexPath.row] as? NativeAd{
            print("Opening url: \(ad.clickURL.absoluteString)")
            // This method will take of opening the ad inside of the app, until we have an iTunes url
            ad.openAdUrl(FullscreenBrowser(parentViewController: self))
        }
        tableView.deselectRowAtIndexPath(indexPath, animated: true)
    }

或者您可以使用 openAdUrlInForeground 来直接在浏览器中打开URL。

外观

这些项目的主要目标之一是创建一个易于使用的库,允许广告完全可定制。HackerNews仓库中包含了这个示例。您只需提供一个现有的UITableView和位置令牌,就要开始工作了!

Alt text

作者

Pocket Media 技术团队,[email protected]。欢迎就任何建议改进、疑虑或问题与我们联系。我们还将协助您的实施。

我们为您服务,我们希望您能够在5分钟内实现广告,并开始通过完全原生和定制化的体验来盈利您的受众!告诉我们您缺少了什么,您还需要我们的库为您做什么 - 它就会发生。

贡献

如果您想为此项目做出贡献。请随时将其克隆并作为拉取请求的形式上传您的更改。请注意,任何文件结构的更改都需要您执行 pod install

本地运行项目

  • 克隆仓库。
  • 安装coacapods。
  • pod install
  • 打开工作空间文件。

许可

PocketMediaNativeAds 在MIT许可下提供。有关更多信息,请参阅LICENSE文件。