【问题标题】:How to disable admob lib on paid version如何在付费版本上禁用 admob lib
【发布时间】:2014-07-08 02:21:22
【问题描述】:

我的应用有两个版本,一个是免费的,一个是付费的。我对两个不同的目标使用相同的代码,并且我有定义变量的预处理器宏,这样我就可以知道何时加载或不加载广告。

到目前为止一直运行良好,直到今天 Apple 拒绝了我的付费版本,因为它具有 libGoogleAdMobAds.a 使用的广告标识符

我包含该库,但从未在付费版本上使用它,因为没有显示广告,但如果我不显示广告,他们会因此拒绝该应用程序。

我遇到的问题是,当我将这个库包含在我的免费应用程序的几个文件中时,我不知道如何在没有 admob 库的情况下编译我的付费版本。

那么,如何组织我的文件以包含 admob 文件并将它们包含在免费版本中,但在编译付费版本时将它们排除在二进制文件之外并能够编译我的应用程序?

谢谢

快速更新: 这是我如何获取代码的示例:

#import <UIKit/UIKit.h>
#import "GADBannerView.h"
#import "GADBannerViewDelegate.h"

<other imports here>

@interface testController : UITableViewController <GADBannerViewDelegate>{
    GADBannerView *bannerView_;
}

我尝试了以下方法:

#import <UIKit/UIKit.h>

#ifdef FREE_VERSION
#import "GADBannerView.h"
#import "GADBannerViewDelegate.h"
#endif

<other imports here>

@interface testController : UITableViewController <GADBannerViewDelegate>{
    GADBannerView *bannerView_;
}

所以,我不能在那里使用 ifdef,因为如果我在导入时使用它,在“接口”行,我会得到一个未定义的“GADBannerViewDelegate”

【问题讨论】:

    标签: ios admob identifier


    【解决方案1】:

    你有 2 个版本,所以我猜你应该有 2 个不同的目标,1 个是免费应用程序,另一个是付费版本,所以首先你应该只将 admob 库添加到免费应用程序的目标。其次是使用下面的代码仅显示免费版本的 admob

    #ifdef FREE_VERSION
        // #import admob and show ad
    #endif
    

    此 ifdef 条件中的代码将不符合付费版本

    [更新] 您可以使用以下代码进行委托

    #ifdef FREE_VERSION
        #import abmob
        #define ARGS admobDelegate
    #endif
    
    @interface DetailViewController : UIViewController<ARGS>
    

    【讨论】:

    • 是的,谢谢你的回答,你刚刚证实了我的想法,我必须在我导入 lib 的每个文件上执行 lib 的 ifdef,然后在使用 lib 时执行相同的 ifdef .这就是你想说的吗?
    • 嗨,是的,这就是你应该做的。但是您可以通过创建一个类来包装 admob(导入和使用)来更轻松地做到这一点,因此您只需在该类中执行 ifdef。
    • 我明白了,我会在不同的文件上尝试 ifdef,看看是否能解决问题。同时,如果您能给我提供一个如何包装 admob 的示例,那就太好了。 :)
    • 儿子,我编辑了我的帖子以包含一些代码。你能看出我遇到的问题吗?
    • 在寻求帮助之前你应该做一些研究,网上有很多关于ifdef条件的例子。
    【解决方案2】:

    假设您有 2 个不同的目标,一个用于 免费,一个用于 付费,只需从“构建阶段”的“链接二进制文件与库”中删除 libGoogleAdMobAds.a " pay 目标的部分。

    如果您使用的是 CocoaPods,您可以指定每个目标的依赖关系,并且只在 free 目标中包含一个库,如下所示:

    target :free do
      pod 'Google-AdMob-Ads-SDK'
    end
    

    【讨论】:

    • 谢谢,我已经试过了,但它不会编译,因为有很多文件正在导入免费版本的 admob 文件(目前,无论应用程序版本如何,我总是导入 admob )
    • 需要听从@SonNguyen的建议,并且有条件组装只能在免费版本中导入
    猜你喜欢
    • 1970-01-01
    • 2020-08-03
    • 1970-01-01
    • 1970-01-01
    • 2023-03-06
    • 1970-01-01
    • 1970-01-01
    • 2015-09-09
    • 1970-01-01
    相关资源
    最近更新 更多