我尝试在appcelerator项目中使用Google-Mobile-Ads-SDK,因为ti.admob(https://github.com/appcelerator-modules/ti.admob)似乎不支持奖励广告。所以我在顶部项目目录中创建了一个Podfile:
install! 'cocoapods',
:integrate_targets => false
platform :ios, '7.0'
target 'my app' do
use_frameworks!
pod 'Google-Mobile-Ads-SDK', '7.15'
end
(我无法使用最新版本的pod,Xcode保留了一些类型声明问题 - 这个编译得很好。)
然后我使用了这个库:
var GADRequest = require('GoogleMobileAds/GADRequest');
var GADRewardBasedVideoAd = require('GoogleMobileAds/GADRewardBasedVideoAd');
var instance = GADRewardBasedVideoAd.sharedInstance();
if (!instance.isReady()) {
var request = new GADRequest();
instance.loadRequest(request, Alloy.CFG.rewardedadid);
}
代码失败并出现错误:
TypeError: undefined is not a function
(evaluating 'instance.loadRequest(request, Alloy.CFG.rewardedadid)')
查看./build/hyperloop/ios/js/googlemobileads/gadrewardbasedvideoad.js
处对应的生成的.js文件,我注意到GADRewardBasedVideoAd.h
除了loadRequest()
之外的所有内容都会生成函数签名。 loadRequest()
的标头条目为:
- (void)loadRequest:(GADRequest *)request withAdUnitID:(NSString *)adUnitID;
唯一明显的区别是它使用了一个命名参数。这种方法有什么特别之处吗?我做错了什么或者Hyperloop还没有支持这样的功能吗?
答案 0 :(得分:0)
这里的问题是您没有包含完整签名(缺少withAdUnitID:
选择器)。要修复它,只需在Hyperloop中连接参数,如下所示:
// Compiles to native "loadRequest:withAdUnitID:"
instance.loadRequestWithAdUnitID(request, Alloy.CFG.rewardedadid);
Named Methods的Hyperloop Programming Guide部分记录了这一点。
提示:还有open source example在Hyperloop上使用Google移动广告Android库,试试吧!