月別アーカイブ: 2016年11月

【Swift3】と【cocoaPods】と【Firebase】と【adMob】

Swift3でFirebaseのadMobを入れます。

以前に書いた記事、
adMobがFirebaseとやらになっとる! | iPhoneアプリ備忘録
と、
FirebaseのadMobのページを参考にします。
スタートガイド  |  Firebase

まずはcocoaPodsで関連ファイルをインストール

前々回作ったポッドファイルに
source ‘https://github.com/CocoaPods/Specs.git’
pod ‘Firebase/Core’
pod ‘Firebase/AdMob’
を追記。

source 'https://github.com/CocoaPods/Specs.git'

# Uncomment this line to define a global platform for your project
platform :ios, ’8.0’
# Uncomment this line if you're using Swift
# use_frameworks!

target 'FirstSwift' do
pod 'Google/Analytics'
pod 'Firebase/Core'
pod 'Firebase/AdMob'
end

target 'FirstSwiftTests' do

end

target 'FirstSwiftUITests' do

end

保存をしてターミナルを起動。
アプリのディレクトリに移動してから
$ pod update を実行。

あ、一応xcodeを終了しておこう。

$ pod update
Update all pods
Updating local specs repositories

CocoaPods 1.2.0.beta.1 is available.
To update use: `gem install cocoapods --pre`
[!] This is a test version we'd love you to try.

For more information see http://blog.cocoapods.org
and the CHANGELOG for this version http://git.io/BaH8pQ.

Analyzing dependencies
Downloading dependencies
Installing Firebase (3.8.0)
Using FirebaseAnalytics (3.5.1)
Using FirebaseCore (3.4.4)
Using FirebaseInstanceID (1.0.8)
Using Google (3.0.3)
Installing Google-Mobile-Ads-SDK (7.13.0)
Using GoogleAnalytics (3.17.0)
Using GoogleInterchangeUtilities (1.2.2)
Using GoogleSymbolUtilities (1.1.2)
Using GoogleToolboxForMac (2.1.0)
Generating Pods project
Integrating client project
Sending stats
Pod installation complete! There are 3 dependencies from the Podfile and 10
total pods installed.

[!] Your Podfile has had smart quotes sanitised. To avoid issues in the future, you should not use TextEdit for editing it. If you are not using TextEdit, you should turn off smart quotes in your editor of choice.

なんか色々[!]が付いてるけど(゚ε゚)キニシナイ!!(^_^;)

続いて、xcodeの作業に移ります。
「.xcodeproj」ファイルではなく「.xcworkspace」ファイルを開きましょう。

バナーViewを作るところまでは昔の記事を参照。
adMobがFirebaseとやらになっとる! | iPhoneアプリ備忘録

FirebaseのadMobのページを参考にGoogleMobileAdsをインポートし、bannerViewをアウトレット接続します。
スタートガイド | Firebase

import UIKit
import GoogleMobileAds

class ViewController: UIViewController {

  @IBOutlet weak var bannerView: GADBannerView!

続いてバナーを表示するコードを入力します。

override func viewDidLoad() {
  super.viewDidLoad()

  print("Google Mobile Ads SDK version: " + GADRequest.sdkVersion())
  bannerView.adUnitID = "ca-app-pub-3940256099942544/2934735716"
  bannerView.rootViewController = self
  bannerView.loadRequest(GADRequest())
}

と入力した所、.loadRequestが.loadだよとxcodeに直されました。

        //Firebase adMob
        print("Google Mobile Ads SDK version: " + GADRequest.sdkVersion())
        bannerView.adUnitID = "ca-app-pub-3940256099942544/2934735716"
        bannerView.rootViewController = self
        bannerView.load(GADRequest())

これで問題なくテストバナーが表示されました。ヽ(^。^)ノ

続いて広告ユニットを作成します。
参考はこちら
広告ユニットを作成する – AdMob ヘルプ

まずはadMobにログインします。
https://apps.admob.com

ホームに「+新しいアプリを収益化」とあるのでクリック。
%e3%82%b9%e3%82%af%e3%83%aa%e3%83%bc%e3%83%b3%e3%82%b7%e3%83%a7%e3%83%83%e3%83%88-2016-11-02-12-20-01

アプリを選択します。
まだアプリを作っている段階ではappstoreに上げてないと思うのでアプリを手動で追加を選びます。
%e3%82%b9%e3%82%af%e3%83%aa%e3%83%bc%e3%83%b3%e3%82%b7%e3%83%a7%e3%83%83%e3%83%88-2016-11-02-12-27-20
アプリ名は適応にプラットフォームは当然iOS.
で、アプリを追加。

次に広告フォーマットの選択と広告ユニット名の設定。
%e3%82%b9%e3%82%af%e3%83%aa%e3%83%bc%e3%83%b3%e3%82%b7%e3%83%a7%e3%83%83%e3%83%88-2016-11-02-12-28-47
とりあえず、バナーでテキストと画像。更新頻度は30秒にしています。
広告ユニット名は、アプリ名、表示するビュー、場所、などを入れています。
んで保存。

Firebase Analyticsとの連携はよくわからんのでスルー。

作成できると
ca-app-pub-3450075938507904/1623054513
といったユニットIDが作成されるので、それをアプリに組み込みます。

        //Firebase adMob
        print("Google Mobile Ads SDK version: " + GADRequest.sdkVersion())
        bannerView.adUnitID = "ca-app-pub-3450075938507904/1623054513"
        bannerView.rootViewController = self
        bannerView.load(GADRequest())

ちなみに、広告ユニットIDを作成してから実際に広告が配信されるまで時間がかかる場合があるようで、数時間経ってもbannerViewが真っ白なままなんて場合もあります。
広告が表示されない!と悩む前に暫く時間を置いてみましょう。
また、インターネットにつながっていない場合も広告が表示されないので、広告が表示されない場合の画面の状態も考えてみたほうが良いかもしれません。

あと、スマートバナーについては何度か取り上げましたがよくわかりません。(^_^;)
オートレイアウトでbannerViewのサイズが可変でスマートバナーのサイズに即していればスマートバナーとして認識されているようです。

こちらでは
バナー広告  |  Firebase
「スマートバナーを使用するには、以下のように定数 kGADAdSizeSmartBannerPortrait または kGADAdSizeSmartBannerLandscape を使用する必要があります。」って書いてあるんですけどね。

// Use kGADAdSizeSmartBannerLandscape if your app is running in landscape.
let bannerView = GADBannerView(adSize: kGADAdSizeSmartBannerPortrait)

オートレイアウトでsmartBanner対応のビューを作るのはこちらの過去記事を参考にして下さい。
adMobがFirebaseとやらになっとる! | iPhoneアプリ備忘録

2019年3月28日 追記
Swift4で似たような記事書きました。
【Swift4】【Firebase】【AdMob】と【Analytics】(1) SDKを【cocoaPods】でインストール | iPhoneアプリ備忘録

【Swift3】【cocoapods】【googleアナリティクス】その2

前回からの続きです。

以前の記事
【cocoapods】でGoogleAnalyticsを導入 その1 | iPhoneアプリ備忘録
を参考に、
設定ファイルを取得する
こちらのページでGoogleService-Info.plist ファイルを作ってダウンロードします。

次はxcodeで作業です。
前回、cocoapodsでgoogleAnalyticsをインストールしたので「.xcworkspace」ファイルを開きます。

ダウンロードしたGoogleService-Info.plist ファイルを Xcode プロジェクトのルートにドラッグして、必要なターゲットに追加します。
スクリーンショット 2016-06-11 11.24.34

んで、アプリ用にアナリティクスを初期化する。
まず AppDelegate にアナリティクスを追加します。

#import <Google/Analytics.h>

と入力すると、エラー。あれ?なんか書き方変わった?

#import <Google/Analytics.h>
import <Google/Analytics.h>
import Google/Analytics.h
import Analytics.h
import Analytics
import google

いろいろ試しても全然通らない。(#^ω^)ビキビキ

色々検索して参考になったのがこちら。
Implement Google Analytics in ios swift – Stack Overflow

import Google

これでええんか(^_^;)。
ええとこまで推理できてたのになあ。(笑)

まあ良いかと続けてコード入力

import UIKit
import Google

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {

    var window: UIWindow?

    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
        
        //ぐーぐるアナリティクス。
// Configure tracker from GoogleService-Info.plist.
var configureError:NSError?
GGLContext.sharedInstance().configureWithError(&configureError)
assert(configureError == nil, "Error configuring Google services: \(configureError)")

// Optional: configure GAI options.
let gai = GAI.sharedInstance()
gai.trackUncaughtExceptions = true  // report uncaught exceptions
gai.logger.logLevel = GAILogLevel.Verbose  // remove before app release

以下略

んがっ、またつまづいた。orz
GAIなんて知らんよ〜とエラー。

なんかいろいろいろと調べてたらBridging Headerとやらを作ると良いとか。
参考
xcode – Use of unresolved identifier GGLContext and GAI – Stack Overflow

だんだんややこしくなってくる。
Bridging Headerの作り方はこちらを参考にした。

Swift: Bridging-Header 作成・設定方法(Xcode 7.2 対応) | siro:chro

ただこちらのサイトの通りに
$(SRCROOT)/$(PRODUCT)/Bridging-Header.h
と書くと何故かフルパスがおかしくなったので
$(SRCROOT)/アプリのフォルダ名/Bridging-Header.h
としたらうまく行った。

Bridging-Header.hの中身はこうした。

#ifndef Bridging_Header_h
#define Bridging_Header_h

#import "GAI.h"
#import "GAIDictionaryBuilder.h"
#import "GAIEcommerceFields.h"
#import "GAIEcommerceProduct.h"
#import "GAIEcommerceProductAction.h"
#import "GAIEcommercePromotion.h"
#import "GAIFields.h"
#import "GAILogger.h"
#import "GAITrackedViewController.h"
#import "GAITracker.h"

#endif /* Bridging_Header_h */

んで再度ビルドしようとすると、gaiに?を付けてくれ、ってのと、.VerboseのVを小文字にしてくれと言われたので変更。
これで一応ビルドできるまでになった。

AppDelegate.swiftはこんな感じ。

import UIKit
import Google

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {

    var window: UIWindow?


    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
        
        //ぐーぐるアナリティクス。
        // Configure tracker from GoogleService-Info.plist.
        var configureError:NSError?
        GGLContext.sharedInstance().configureWithError(&configureError)
        assert(configureError == nil, "Error configuring Google services: \(configureError)")
        
        // Optional: configure GAI options.
        let gai = GAI.sharedInstance()
        gai?.trackUncaughtExceptions = true  // report uncaught exceptions
        gai?.logger.logLevel = GAILogLevel.verbose  // remove before app release
        

        // Override point for customization after application launch.
        return true
    }

続いてviewController.swiftでスクリーントラッキングをしこむ。
これが呼ばれたらアナリティクスにピコーンと知らされる。

純正は

let tracker = GAI.sharedInstance().defaultTracker
tracker.set(kGAIScreenName, value: "トラッキングの名前")

let builder = GAIDictionaryBuilder.createScreenView()
tracker.send(builder.build() as [NSObject : AnyObject])

となっていたが、色々と修正が加わって

        let tracker = GAI.sharedInstance().defaultTracker
        tracker?.set(kGAIScreenName, value: "トラッキングの名前")
        
        let builder = GAIDictionaryBuilder.createScreenView()
        tracker?.send(builder?.build() as [NSObject : AnyObject]!)

こうなった。
特に[NSObject : AnyObject]の部分はSwift3で変わったという話だったが色々と変更してもうまく行かず、
後ろに!を付けることでなんとかなったようだ。

今後もアナリティクス入れるたびにこういう処理をしないといかんと思うとめんどくさいねー。orz

【Swift3】【cocoapods】【googleアナリティクス】その1

googleが提供するAnalyticsには、「Firebase Analytics」と「Google アナリティクス」があるらしい。
下記サイトによると、Firebase Analyticsはアプリのみ、Google アナリティクスはWebページとアプリ、って使い分けるらしい。
今すでにWebページもアプリもGoogle アナリティクスでやってるので引き続きGoogle アナリティクスでやってみる。

参考サイト
Firebase Analytics を iOS / Android アプリに導入する手順のまとめ | Developers.IO

Firebase Analytics
iOS アプリにアナリティクスを追加する  |  iOS 向けアナリティクス  |  Google Developers

以前にもgoogleアナリティクスを導入する記事を書いたが、
【cocoapods】でGoogleAnalyticsを導入 その1 | iPhoneアプリ備忘録
改めて書いてみる。

まずは昔の記事
超初心者向け【cocoapods】の始め方。 | iPhoneアプリ備忘録
を見直して

$ pod setup

ターミナルを最新版に?してみる。
ながーいログのあと、

Checking out files: 100% (4782/4782), done.

CocoaPods 1.2.0.beta.1 is available.
To update use: `gem install cocoapods --pre`
[!] This is a test version we'd love you to try.

For more information see http://blog.cocoapods.org
and the CHANGELOG for this version http://git.io/BaH8pQ.

Setup completed

と表示されてcocoaPodsが無事にアップデートされたようだ。

次いで、ターミナルをアプリの有るディレクトリに移動してから、

$ pod init

ポッドファイルを作成し、中身を下記のように書き換えて、

# Uncomment this line to define a global platform for your project
platform :ios, ’10.0’
# Uncomment this line if you're using Swift
# use_frameworks!

target 'FirstSwift' do
pod 'Google/Analytics'
end

target 'FirstSwiftTests' do

end

target 'FirstSwiftUITests' do

end

ターミナルから実行↓

$ pod install
Updating local specs repositories

CocoaPods 1.2.0.beta.1 is available.
To update use: `gem install cocoapods --pre`
[!] This is a test version we'd love you to try.

For more information see http://blog.cocoapods.org
and the CHANGELOG for this version http://git.io/BaH8pQ.

Analyzing dependencies
Downloading dependencies
Installing FirebaseAnalytics (3.5.1)
Installing FirebaseCore (3.4.4)
Installing FirebaseInstanceID (1.0.8)
Installing Google (3.0.3)
Installing GoogleAnalytics (3.17.0)
Installing GoogleInterchangeUtilities (1.2.2)
Installing GoogleSymbolUtilities (1.1.2)
Installing GoogleToolboxForMac (2.1.0)
Generating Pods project
Integrating client project

[!] Please close any current Xcode sessions and use `FirstSwift.xcworkspace` for this project from now on.
Sending stats
Pod installation complete! There is 1 dependency from the Podfile and 8 total
pods installed.

[!] Your Podfile has had smart quotes sanitised. To avoid issues in the future, you should not use TextEdit for editing it. If you are not using TextEdit, you should turn off smart quotes in your editor of choice.
appleharikyu:FirstSwift ____$ 

インストール完了。

インストール後、開くのは「プロジェクト名.xcodeproj」ではなく「プロジェクト名.xcworkspace」のようだ。
気をつけないとね。

次は設定に続く。