はじめまして。ADN事業部 アプリ側、主にiOS担当の e です。
今回は、iOSアプリケーション内で、nendSDKを使わずにnend広告を表示する方法について書きたいと思います。
これからの nendSDK は ”Base SDK“ が SDK6 以上に。
2013年4月現在、nend.net にて公開している iOS 向け nendSDKのバージョンはver1.3.2です。公開準備中の、SDK ver2.0(次バージョン)では、組込み時にiOS SDK6 以上の環境を必要とします。つまり、iOS SDK 5.1以下を利用してnendSDKを組込んでいるアプリについては、nendSDK ver2.0が利用出来ないことになります。
追記:あくまで「開発時のBaseSDKがiOS SDK6以上でないといけない」という意味なので、iOS6未満で動かないということではありません。デバイス側のiOSバージョンは4.3以上をサポートします。 ※2013年9月現在はver2.2.x 公開中となります。
5/1以降、iPhone5未対応(未最適化)アプリはapp storeヘ申請してもリジェクトされるようになる
そして、先日appleからも発表がありましたが、2013/5/1から、iPhone5対応(最適化)されていないアプリ、UDIDを利用しているアプリをapp storeへ申請してもリジェクトされることになりました。これらの点をクリアしない限り、アップデート版が公開できなくなります。
追記:UDIDを参照しているアプリについては審査前に連絡が来るようです。(2013年5月現在) 追記の追記:最新のiOS 7 SDK では UDID([[UIDevice currentDevice] uniqueIdentifier])は参照出来ない上に、iOS 7 上で既存のアプリなどがUDIDを参照しようとするとVendorIDもしくはIDFV([[UIDevice currentDevice] identifierForVendor])と同一の値が返されるようです。(2013年10月現在)
Make Your Apps Look Great on the Retina Display and iPhone 5 https://developer.apple.com/news/index.php?id=3212013b
Using Identifiers in Your Apps https://developer.apple.com/news/index.php?id=3212013a
iPhone5対応(最適化)を行うには、基本的にはXcode4.5 & iOS SDK6 以上の環境を必要としますので、これは「iOS SDK6以上を使いiPhone5対応(最適化)を行わなければ、アプリのアップデートはできなくなる」ということを意味しています。
対応作業したくないけど、どちらかの対応作業を選択せざるを得ないというジレンマ
と言うわけで、稀なケースではあるとは思いますが 「iPhone5対応(最適化)は難しいけれど、旧バージョンのnendSDKを利用したままで広告配信を止められてしまうのは困る!でも入れ替えのためにiPhone5対応(最適化)までやるのは厳しい!」 という場合の回避方法として、nendSDKを利用するのではなく「UIWebViewと広告コード(JavaScript)を使ってアプリにnend広告を貼る」という方法があります。また、この方法であれば、Objective-Cで開発していないアプリも、SDKを使わなくてもUIWebViewを利用して広告を貼り付けることが可能です。
ここで言う広告コード(JavaScript)とは?
管理画面>広告枠の管理>広告枠>広告コード>広告コードの取得 で確認できる、広告コードのことです。 例)https://www.nend.net/m/adspot/code/xxxx
ただ、UIWebVIew+広告コード(JavaScript)の欠点は、nendSDKとは違い 【在庫切れや受信エラーなどの広告が表示できない場合の検知が出来ない】 【管理画面で指定できるリフレッシュの設定は反映されない】 という点です。
それを念頭に入れて、iOS SDK6以上を利用して新しいnendSDKに入れ替えるか、UIWebView+広告コード(JavaScript)に置き換えるかを状況に応じて判断して頂きたいと思います。
それでは改めて、UIWebView+広告コード(JavaScript)について、実装方法を解説しておきたいと思います。
【iOSで広告コード(JavaScript)を利用してUIWebView広告を貼る。】
1)広告コード(JavaScript)を記述するhtmlを用意します。 projectフォルダ内に下記の内容を記述した任意の.html ファイルを配置するか、任意のサーバ上に配置する方法でもかまいません。広告バナー画像の周囲の余白をなくすため、bodyタグ style属性にmargin:0px は必ず指定してください。
nendjs.html - 広告コード(JavaScript)を記述したhtmlファイルサンプル [html] <html> <head> <meta http-equiv="Content-Type"content="text/html; charset=Shift_JIS" > </head> <body style="width:320px;height:50px;margin:0px;background-color:#000000" > <!--// 下記はサンプル用IDです。アプリごとの「広告コード」を管理画面から入手してください --> <!--// ここから --> <script type="text/javascript" > var nend_params = {"media":82,"site":2425,"spot":3172,"type":1,"oriented":2}; </script> <script type="text/javascript"src="">http://js1.nend.net/js/nendAdLoader.js"> <!--// ここまで --> </body> </html>
[/html]
2)objective-C側での実装を追加します。
YourAppViewController.h - ヘッダファイル [objc] @interface YourAppViewController : UIViewController <UIWebViewDelegate> @end [/objc]
YourAppViewController.m - 実装ファイル [objc]
import "YourAppViewController.h"
@interface YourAppViewController ()
@property (nonatomic,retain) UIWebView* nendWebView;
@end
@implementation YourAppViewController
//@synthesize nendWebView = nendWebView_;
pragma mark - View読み込時
(void)viewDidLoad { [superviewDidLoad];
// ここから:広告用WebViewを配置 self.nendWebView = [[UIWebViewalloc]initWithFrame:CGRectMake(0, 0, 320, 50)]; [self.nendWebView setDelegate:self];
// 背景色を透明にする場合 [self.nendWebView setOpaque:NO]; [self.nendWebView setBackgroundColor:[UIColor clearColor]];
// ローカルのhtmlを開く NSString path = [[NSBundle mainBundle] pathForResource:@"nendjs"ofType:@"html"]; NSURL url = [NSURL fileURLWithPath:path]; NSURLRequest *req = [NSURLRequest requestWithURL:url]; [self.nendWebView loadRequest:req];
[self.view addSubview:self.nendWebView]; // ここまで
}
pragma mark - View解放時
-(void)dealloc { // 非ARCの場合は適宜release&nilセットする [UIApplication sharedApplication].networkActivityIndicatorVisible=NO; if (self.nendWebView.loading) { [self.nendWebView stopLoading]; } [self.nendWebView setDelegate:nil]; }
pragma mark - UIWebViewDelegate Request開始時
- (BOOL)webView:(UIWebView)webView shouldStartLoadWithRequest:(NSURLRequest )request navigationType:(UIWebViewNavigationType)navigationType { if( navigationType == UIWebViewNavigationTypeLinkClicked ){ // UIWebViewNavigationTypeLinkClicked if( [[UIApplication sharedApplication] canOpenURL:[request URL]]){ // Browser open. [[UIApplication sharedApplication] openURL:[request URL]]; return NO; } } return YES; }
// 注:他メソッド省略
@end [/objc]
広告コード(JavaScript)利用時の注意点
htmlに広告コード(JavaScript)を貼り付けてアプリ内に広告を表示する方法は、PhoneGapなどのObjective-Cを利用しない開発環境でアプリを作成する際にも応用が可能です。ただし、ひとつのhtml内に、同一のspotIDを持つ広告コード(JavaScript)が複数存在しているとそのうちの一つしか広告を表示することが出来ません。
たとえば、jQueryMobileなどを利用して複数ページを1ファイルで動的に生成している場合にはこの点にご注意ください。
最後に
今回はあまり技術的な話ではありませんでしたが、今後は徐々に色々な話を書きたいと思っています。また、逆に質問や訂正などありましたらお寄せ頂けると嬉しいです。
では、またADN Lab's Blogでお会いしましょう。