diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..58c51ec --- /dev/null +++ b/.gitignore @@ -0,0 +1,62 @@ +# Xcode +# +# gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore + +## Build generated +build/ +DerivedData/ + +## Various settings +*.pbxuser +!default.pbxuser +*.mode1v3 +!default.mode1v3 +*.mode2v3 +!default.mode2v3 +*.perspectivev3 +!default.perspectivev3 +xcuserdata/ + +## Other +*.moved-aside +*.xcuserstate + +## Obj-C/Swift specific +*.hmap +*.ipa +*.dSYM.zip +*.dSYM + +# CocoaPods +# +# We recommend against adding the Pods directory to your .gitignore. However +# you should judge for yourself, the pros and cons are mentioned at: +# https://guides.cocoapods.org/using/using-cocoapods.html#should-i-check-the-pods-directory-into-source-control +# +# Pods/ + +# Carthage +# +# Add this line if you want to avoid checking in source code from Carthage dependencies. +# Carthage/Checkouts + +Carthage/Build + +# fastlane +# +# It is recommended to not store the screenshots in the git repo. Instead, use fastlane to re-generate the +# screenshots whenever they are needed. +# For more information about the recommended setup visit: +# https://github.com/fastlane/fastlane/blob/master/fastlane/docs/Gitignore.md + +fastlane/report.xml +fastlane/Preview.html +fastlane/screenshots +fastlane/test_output + +# Code Injection +# +# After new code Injection tools there's a generated folder /iOSInjectionProject +# https://github.com/johnno1962/injectionforxcode + +iOSInjectionProject/ diff --git a/Maio.framework/Headers/Maio.h b/Maio.framework/Headers/Maio.h new file mode 100644 index 0000000..2926b67 --- /dev/null +++ b/Maio.framework/Headers/Maio.h @@ -0,0 +1,99 @@ +// +// Maio.h +// Maio +// +// +// +#import +#import +#import +#import +#import +#import +#if __IPHONE_OS_VERSION_MAX_ALLOWED > __IPHONE_5_0 +#import // idfaの取得 用 +#endif +#import + +@class MaioInstance; + +@interface Maio: NSObject + +/** + * maio SDK のバージョンを返します。 + */ ++ (NSString *)sdkVersion; + +/** + * 広告の配信テストを行うかどうかを設定します。 + * + * @param adTestMode 広告のテスト配信を行う場合には YES、それ以外なら NO。アプリ開発中は YES にし、ストアに提出する際には NO にして下さい(既定値は NO)。 + */ ++ (void)setAdTestMode:(BOOL)adTestMode +#ifndef DEBUG +__attribute__((deprecated("Deprecated on Release build"))) +#endif +; + +/// maio SDK からの通知を受け取るデリゲート ++ (id)delegate; +/// maio SDK からの通知を受け取るデリゲートをセットします。 ++ (void)setDelegate:(id)delegate; + +/** + * SDK のセットアップを開始します。 + * + * @param mediaId 管理画面にて発行されるアプリ識別子 + * @param delegate SDK からの通知を受け取るデリゲート。通知を受け取る必要がない場合は nil を渡します。 + */ ++ (void)startWithMediaId:(NSString *)mediaId delegate:(id)delegate; + +/** + * 既定のゾーンの広告表示準備が整っていれば YES、そうでなければ NO を返します。 + */ ++ (BOOL)canShow; + +/** + * 指定したゾーンの広告表示準備が整っていれば YES、そうでなければ NO を返します。 + * + * @param zoneId 広告の表示準備が整っているか確認したいゾーンの識別子 + */ ++ (BOOL)canShowAtZoneId:(NSString *)zoneId; + +/** + * 既定のゾーンの広告を表示します。 + */ ++ (void)show; + +/** + * 指定したゾーンの広告を表示します。 + * + * @param zoneId 広告を表示したいゾーンの識別子 + */ ++ (void)showAtZoneId:(NSString *)zoneId; + + ++ (void)showWithViewController:(UIViewController *)vc; ++ (void)showAtZoneId:(NSString *)zoneEid vc:(UIViewController *)vc; + ++ (MaioInstance *)startWithNonDefaultMediaId:(NSString *)mediaEid delegate:(id)delegate; + +@end + + +@interface MaioInstance : NSObject + +@property (nonatomic, readonly) NSString *mediaId; +@property (nonatomic) BOOL adTestMode; +@property (nonatomic) id delegate; + +- (BOOL)canShow; +- (BOOL)canShowAtZoneId:(NSString *)zoneId; +- (void)show; +- (void)showAtZoneId:(NSString *)zoneId; + +- (void)showWithViewController:(UIViewController *)vc; +- (void)showAtZoneId:(NSString *)zoneEid vc:(UIViewController *)vc; + +@end + diff --git a/Maio.framework/Headers/MaioDelegate.h b/Maio.framework/Headers/MaioDelegate.h new file mode 100644 index 0000000..6c0340b --- /dev/null +++ b/Maio.framework/Headers/MaioDelegate.h @@ -0,0 +1,92 @@ +// +// MaioDelegate.h +// Maio +// +// +// + +/** + * maio SDK のエラー種別(アプリ側への通知内容) + */ +typedef NS_ENUM(NSInteger, MaioFailReason) { + /// 不明なエラー + MaioFailReasonUnknown = 0, + /// 広告在庫切れ + MaioFailReasonAdStockOut, + /// ネットワーク接続エラー + MaioFailReasonNetworkConnection, + /// HTTP status 4xx クライアントエラー + MaioFailReasonNetworkClient, + /// HTTP status 5xx サーバーエラー + MaioFailReasonNetworkServer, + /// SDK エラー + MaioFailReasonSdk, + /// クリエイティブダウンロードのキャンセル + MaioFailReasonDownloadCancelled, + /// 動画再生エラー + MaioFailReasonVideoPlayback, +}; + + +/** + * maio SDK からの通知を受け取るデリゲート + */ +@protocol MaioDelegate + +@optional + +/** + * 全てのゾーンの広告表示準備が完了したら呼ばれます。 + */ +- (void)maioDidInitialize; + +/** + * 広告の配信可能状態が変更されたら呼ばれます。 + * + * @param zoneId 広告の配信可能状態が変更されたゾーンの識別子 + * @param newValue 変更後のゾーンの状態。YES なら配信可能 + */ +- (void)maioDidChangeCanShow:(NSString *)zoneId newValue:(BOOL)newValue; + +/** + * 広告が再生される直前に呼ばれます。 + * 最初の再生開始の直前にのみ呼ばれ、リプレイ再生の直前には呼ばれません。 + * + * @param zoneId 広告が表示されるゾーンの識別子 + */ +- (void)maioWillStartAd:(NSString *)zoneId; + +/** + * 広告の再生が終了したら呼ばれます。 + * 最初の再生終了時にのみ呼ばれ、リプレイ再生の終了時には呼ばれません。 + * + * @param zoneId 広告を表示したゾーンの識別子 + * @param playtime 動画の再生時間(秒) + * @param skipped 動画がスキップされていたら YES、それ以外なら NO + * @param rewardParam ゾーンがリワード型に設定されている場合、予め管理画面にて設定してある任意の文字列パラメータが渡されます。それ以外の場合は nil + */ +- (void)maioDidFinishAd:(NSString *)zoneId playtime:(NSInteger)playtime skipped:(BOOL)skipped rewardParam:(NSString *)rewardParam; + +/** + * 広告がクリックされ、ストアや外部リンクへ遷移した時に呼ばれます。 + * + * @param zoneId 広告がクリックされたゾーンの識別子 + */ +- (void)maioDidClickAd:(NSString *)zoneId; + +/** + * 広告が閉じられた際に呼ばれます。 + * + * @param zoneId 広告が閉じられたゾーンの識別子 + */ +- (void)maioDidCloseAd:(NSString *)zoneId; + +/** + * SDK でエラーが生じた際に呼ばれます。 + * + * @param zoneId エラーに関連するゾーンの識別子 + * @param reason エラーの理由を示す列挙値 + */ +- (void)maioDidFail:(NSString *)zoneId reason:(MaioFailReason)reason; + +@end diff --git a/Maio.framework/Info.plist b/Maio.framework/Info.plist new file mode 100644 index 0000000..2ae05f2 Binary files /dev/null and b/Maio.framework/Info.plist differ diff --git a/Maio.framework/Maio b/Maio.framework/Maio new file mode 100644 index 0000000..212e64b Binary files /dev/null and b/Maio.framework/Maio differ diff --git a/Maio.framework/Modules/module.modulemap b/Maio.framework/Modules/module.modulemap new file mode 100644 index 0000000..b3040f6 --- /dev/null +++ b/Maio.framework/Modules/module.modulemap @@ -0,0 +1,6 @@ +framework module Maio { + umbrella header "Maio.h" + + export * + module * { export * } +} diff --git a/MaioSample.xcodeproj/project.pbxproj b/MaioSample.xcodeproj/project.pbxproj new file mode 100644 index 0000000..8cfec8e --- /dev/null +++ b/MaioSample.xcodeproj/project.pbxproj @@ -0,0 +1,325 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 46; + objects = { + +/* Begin PBXBuildFile section */ + 2A5C30221D6C0B54002D5DA9 /* Maio.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2A5C30211D6C0B54002D5DA9 /* Maio.framework */; }; + 2AE4FF601B86DFBD004FEF88 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 2AE4FF5F1B86DFBD004FEF88 /* main.m */; }; + 2AE4FF631B86DFBD004FEF88 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 2AE4FF621B86DFBD004FEF88 /* AppDelegate.m */; }; + 2AE4FF661B86DFBD004FEF88 /* ViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2AE4FF651B86DFBD004FEF88 /* ViewController.m */; }; + 2AE4FF691B86DFBD004FEF88 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 2AE4FF671B86DFBD004FEF88 /* Main.storyboard */; }; + 2AE4FF6B1B86DFBD004FEF88 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 2AE4FF6A1B86DFBD004FEF88 /* Images.xcassets */; }; + 2AE4FF6E1B86DFBD004FEF88 /* LaunchScreen.xib in Resources */ = {isa = PBXBuildFile; fileRef = 2AE4FF6C1B86DFBD004FEF88 /* LaunchScreen.xib */; }; +/* End PBXBuildFile section */ + +/* Begin PBXFileReference section */ + 2A5C30211D6C0B54002D5DA9 /* Maio.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = Maio.framework; sourceTree = SOURCE_ROOT; }; + 2AE4FF5A1B86DFBD004FEF88 /* MaioSample.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = MaioSample.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 2AE4FF5E1B86DFBD004FEF88 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 2AE4FF5F1B86DFBD004FEF88 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; + 2AE4FF611B86DFBD004FEF88 /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = ""; }; + 2AE4FF621B86DFBD004FEF88 /* AppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = ""; }; + 2AE4FF641B86DFBD004FEF88 /* ViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ViewController.h; sourceTree = ""; }; + 2AE4FF651B86DFBD004FEF88 /* ViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ViewController.m; sourceTree = ""; }; + 2AE4FF681B86DFBD004FEF88 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; + 2AE4FF6A1B86DFBD004FEF88 /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Images.xcassets; sourceTree = ""; }; + 2AE4FF6D1B86DFBD004FEF88 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/LaunchScreen.xib; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 2AE4FF571B86DFBD004FEF88 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 2A5C30221D6C0B54002D5DA9 /* Maio.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 2AE4FF511B86DFBD004FEF88 = { + isa = PBXGroup; + children = ( + 2AE4FF851B86E00F004FEF88 /* Frameworks */, + 2AE4FF5C1B86DFBD004FEF88 /* MaioSample */, + 2AE4FF5B1B86DFBD004FEF88 /* Products */, + ); + sourceTree = ""; + }; + 2AE4FF5B1B86DFBD004FEF88 /* Products */ = { + isa = PBXGroup; + children = ( + 2AE4FF5A1B86DFBD004FEF88 /* MaioSample.app */, + ); + name = Products; + sourceTree = ""; + }; + 2AE4FF5C1B86DFBD004FEF88 /* MaioSample */ = { + isa = PBXGroup; + children = ( + 2AE4FF611B86DFBD004FEF88 /* AppDelegate.h */, + 2AE4FF621B86DFBD004FEF88 /* AppDelegate.m */, + 2AE4FF641B86DFBD004FEF88 /* ViewController.h */, + 2AE4FF651B86DFBD004FEF88 /* ViewController.m */, + 2AE4FF671B86DFBD004FEF88 /* Main.storyboard */, + 2AE4FF6A1B86DFBD004FEF88 /* Images.xcassets */, + 2AE4FF6C1B86DFBD004FEF88 /* LaunchScreen.xib */, + 2AE4FF5D1B86DFBD004FEF88 /* Supporting Files */, + ); + path = MaioSample; + sourceTree = ""; + }; + 2AE4FF5D1B86DFBD004FEF88 /* Supporting Files */ = { + isa = PBXGroup; + children = ( + 2AE4FF5E1B86DFBD004FEF88 /* Info.plist */, + 2AE4FF5F1B86DFBD004FEF88 /* main.m */, + ); + name = "Supporting Files"; + sourceTree = ""; + }; + 2AE4FF851B86E00F004FEF88 /* Frameworks */ = { + isa = PBXGroup; + children = ( + 2A5C30211D6C0B54002D5DA9 /* Maio.framework */, + ); + name = Frameworks; + path = MaioSample/Frameworks; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 2AE4FF591B86DFBD004FEF88 /* MaioSample */ = { + isa = PBXNativeTarget; + buildConfigurationList = 2AE4FF7D1B86DFBD004FEF88 /* Build configuration list for PBXNativeTarget "MaioSample" */; + buildPhases = ( + 2AE4FF561B86DFBD004FEF88 /* Sources */, + 2AE4FF571B86DFBD004FEF88 /* Frameworks */, + 2AE4FF581B86DFBD004FEF88 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = MaioSample; + productName = MaioSample; + productReference = 2AE4FF5A1B86DFBD004FEF88 /* MaioSample.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 2AE4FF521B86DFBD004FEF88 /* Project object */ = { + isa = PBXProject; + attributes = { + LastUpgradeCheck = 0630; + ORGANIZATIONNAME = maio; + TargetAttributes = { + 2AE4FF591B86DFBD004FEF88 = { + CreatedOnToolsVersion = 6.3.2; + }; + }; + }; + buildConfigurationList = 2AE4FF551B86DFBD004FEF88 /* Build configuration list for PBXProject "MaioSample" */; + compatibilityVersion = "Xcode 3.2"; + developmentRegion = English; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = 2AE4FF511B86DFBD004FEF88; + productRefGroup = 2AE4FF5B1B86DFBD004FEF88 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 2AE4FF591B86DFBD004FEF88 /* MaioSample */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 2AE4FF581B86DFBD004FEF88 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 2AE4FF691B86DFBD004FEF88 /* Main.storyboard in Resources */, + 2AE4FF6E1B86DFBD004FEF88 /* LaunchScreen.xib in Resources */, + 2AE4FF6B1B86DFBD004FEF88 /* Images.xcassets in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 2AE4FF561B86DFBD004FEF88 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 2AE4FF661B86DFBD004FEF88 /* ViewController.m in Sources */, + 2AE4FF631B86DFBD004FEF88 /* AppDelegate.m in Sources */, + 2AE4FF601B86DFBD004FEF88 /* main.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXVariantGroup section */ + 2AE4FF671B86DFBD004FEF88 /* Main.storyboard */ = { + isa = PBXVariantGroup; + children = ( + 2AE4FF681B86DFBD004FEF88 /* Base */, + ); + name = Main.storyboard; + sourceTree = ""; + }; + 2AE4FF6C1B86DFBD004FEF88 /* LaunchScreen.xib */ = { + isa = PBXVariantGroup; + children = ( + 2AE4FF6D1B86DFBD004FEF88 /* Base */, + ); + name = LaunchScreen.xib; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + 2AE4FF7B1B86DFBD004FEF88 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_SYMBOLS_PRIVATE_EXTERN = NO; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + MTL_ENABLE_DEBUG_INFO = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + }; + name = Debug; + }; + 2AE4FF7C1B86DFBD004FEF88 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = iphoneos; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + 2AE4FF7E1B86DFBD004FEF88 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)", + ); + INFOPLIST_FILE = MaioSample/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Debug; + }; + 2AE4FF7F1B86DFBD004FEF88 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)", + ); + INFOPLIST_FILE = MaioSample/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 2AE4FF551B86DFBD004FEF88 /* Build configuration list for PBXProject "MaioSample" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 2AE4FF7B1B86DFBD004FEF88 /* Debug */, + 2AE4FF7C1B86DFBD004FEF88 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 2AE4FF7D1B86DFBD004FEF88 /* Build configuration list for PBXNativeTarget "MaioSample" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 2AE4FF7E1B86DFBD004FEF88 /* Debug */, + 2AE4FF7F1B86DFBD004FEF88 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 2AE4FF521B86DFBD004FEF88 /* Project object */; +} diff --git a/MaioSample.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/MaioSample.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..919434a --- /dev/null +++ b/MaioSample.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/MaioSample/AppDelegate.h b/MaioSample/AppDelegate.h new file mode 100644 index 0000000..58fcf53 --- /dev/null +++ b/MaioSample/AppDelegate.h @@ -0,0 +1,17 @@ +// +// AppDelegate.h +// MaioSample +// +// Copyright (c) 2015年 maio. All rights reserved. +// + +#import +#import + +@interface AppDelegate : UIResponder + +@property (strong, nonatomic) UIWindow *window; + + +@end + diff --git a/MaioSample/AppDelegate.m b/MaioSample/AppDelegate.m new file mode 100644 index 0000000..3f76dd7 --- /dev/null +++ b/MaioSample/AppDelegate.m @@ -0,0 +1,35 @@ +// +// AppDelegate.m +// MaioSample +// +// Copyright (c) 2015年 maio. All rights reserved. +// + +#import "AppDelegate.h" +#import "ViewController.h" + +@interface AppDelegate () + +@end + +@implementation AppDelegate + +/// maio から発行されるメディアIDに差し替えてください。 +NSString * const MAIO_MEDIA_ID = @"DemoPublisherMedia"; + + +- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { + // ログ表示 + ViewController *viewController = (ViewController *)self.window.rootViewController; + [viewController appendLog:@"[Maio startWithMediaId:delegate:]"]; + + // 広告の配信テスト設定を行います。アプリをリリースする際にはコメントアウトして下さい。 + [Maio setAdTestMode:YES]; + + // SDK のセットアップを開始します。 + [Maio startWithMediaId:MAIO_MEDIA_ID delegate:viewController]; + + return YES; +} + +@end diff --git a/MaioSample/Base.lproj/LaunchScreen.xib b/MaioSample/Base.lproj/LaunchScreen.xib new file mode 100644 index 0000000..a42cc22 --- /dev/null +++ b/MaioSample/Base.lproj/LaunchScreen.xib @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/MaioSample/Base.lproj/Main.storyboard b/MaioSample/Base.lproj/Main.storyboard new file mode 100644 index 0000000..d4b2d94 --- /dev/null +++ b/MaioSample/Base.lproj/Main.storyboard @@ -0,0 +1,68 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/MaioSample/Images.xcassets/AppIcon.appiconset/Contents.json b/MaioSample/Images.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 0000000..118c98f --- /dev/null +++ b/MaioSample/Images.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,38 @@ +{ + "images" : [ + { + "idiom" : "iphone", + "size" : "29x29", + "scale" : "2x" + }, + { + "idiom" : "iphone", + "size" : "29x29", + "scale" : "3x" + }, + { + "idiom" : "iphone", + "size" : "40x40", + "scale" : "2x" + }, + { + "idiom" : "iphone", + "size" : "40x40", + "scale" : "3x" + }, + { + "idiom" : "iphone", + "size" : "60x60", + "scale" : "2x" + }, + { + "idiom" : "iphone", + "size" : "60x60", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/MaioSample/Info.plist b/MaioSample/Info.plist new file mode 100644 index 0000000..8601b37 --- /dev/null +++ b/MaioSample/Info.plist @@ -0,0 +1,40 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + jp.maio.$(PRODUCT_NAME:rfc1034identifier) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + APPL + CFBundleShortVersionString + 1.0 + CFBundleSignature + ???? + CFBundleVersion + 1 + LSRequiresIPhoneOS + + UILaunchStoryboardName + LaunchScreen + UIMainStoryboardFile + Main + UIRequiredDeviceCapabilities + + armv7 + + UISupportedInterfaceOrientations + + UIInterfaceOrientationPortrait + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + + diff --git a/MaioSample/ViewController.h b/MaioSample/ViewController.h new file mode 100644 index 0000000..bf6f249 --- /dev/null +++ b/MaioSample/ViewController.h @@ -0,0 +1,24 @@ +// +// ViewController.h +// MaioSample +// +// Copyright (c) 2015年 maio. All rights reserved. +// + +#import +#import +#import + +@interface ViewController : UIViewController + +/// SDK のセットアップ開始日時 +@property (nonatomic) NSDate *startDate; + +/// 表示ログに追記します。 +- (void)appendLog:(NSString *)log; + + +@property (nonatomic) AVAudioPlayer *audioPlayer; + +@end + diff --git a/MaioSample/ViewController.m b/MaioSample/ViewController.m new file mode 100644 index 0000000..bc5af9e --- /dev/null +++ b/MaioSample/ViewController.m @@ -0,0 +1,179 @@ +// +// ViewController.m +// MaioSample +// +// Copyright (c) 2015年 maio. All rights reserved. +// + +#import "ViewController.h" + +@interface ViewController () { + NSMutableArray *_outputs; +} +@property (weak, nonatomic) IBOutlet UIButton *openAd; +@property (weak, nonatomic) IBOutlet UILabel *logLabel; +@end + +@implementation ViewController + +- (id)initWithCoder:(NSCoder *)aDecoder { + self = [super initWithCoder:aDecoder]; + if (self) { + // ログリストの初期化 + _outputs = [NSMutableArray new]; + [self appendLog:[NSString stringWithFormat:@"version %@", [Maio sdkVersion]]]; + } + return self; +} + +- (void)viewDidLoad { + [super viewDidLoad]; + + // ログラベルを更新 + [self updateLabel]; +} + +- (void)didReceiveMemoryWarning { + [super didReceiveMemoryWarning]; +} + +/** + * 動画広告の再生を開始するイベントハンドラ + */ +- (IBAction)onOpenAd:(id)sender { + // 動画広告を表示 + if ([Maio canShow]) { + [Maio show]; + } +} + + +#pragma mark MaioDelegate + +/** + * 全てのゾーンの広告表示準備が完了したら呼ばれます。 + */ +- (void)maioDidInitialize { + // ログ表示 + [self appendLog:@(__FUNCTION__)]; +} + +/** + * 広告の配信可能状態が変更されたら呼ばれます。 + * + * @param zoneId 広告の配信可能状態が変更されたゾーンの識別子 + * @param newValue 変更後のゾーンの状態。YES なら配信可能 + */ +- (void)maioDidChangeCanShow:(NSString *)zoneId newValue:(BOOL)newValue { + // ログ表示 + [self appendLog:[NSString stringWithFormat:@"%@: %@ newValue: %@", @(__FUNCTION__), zoneId, newValue? @"YES": @"NO"]]; + + // 広告が表示可能ならトリガーを有効化 + self.openAd.enabled = newValue; +} + +/** + * 広告が再生される直前に呼ばれます。 + * 最初の再生開始の直前にのみ呼ばれ、リプレイ再生の直前には呼ばれません。 + * + * @param zoneId 広告が表示されるゾーンの識別子 + */ +- (void)maioWillStartAd:(NSString *)zoneId { + // ログ表示 + [self appendLog:[NSString stringWithFormat:@"%@: %@", @(__FUNCTION__), zoneId]]; +} + +/** + * 広告の再生が終了したら呼ばれます。 + * 最初の再生終了時にのみ呼ばれ、リプレイ再生の終了時には呼ばれません。 + * + * @param zoneId 広告を表示したゾーンの識別子 + * @param playtime 動画の再生時間(秒) + * @param skipped 動画がスキップされていたら YES、それ以外なら NO + * @param rewardParam ゾーンがリワード型に設定されている場合、予め管理画面にて設定してある任意の文字列パラメータが渡されます。それ以外の場合は nil + */ +- (void)maioDidFinishAd:(NSString *)zoneId playtime:(NSInteger)playtime skipped:(BOOL)skipped rewardParam:(NSString *)rewardParam { + // ログ表示 + [self appendLog:[NSString stringWithFormat:@"%@: %@ playtime: %zd skipped: %@ rewardParam: %@", @(__FUNCTION__), zoneId, playtime, skipped? @"YES": @"NO", rewardParam]]; +} + +/** + * 広告がクリックされ、ストアや外部リンクへ遷移した時に呼ばれます。 + * + * @param zoneId 広告を表示したゾーンの識別子 + */ +- (void)maioDidClickAd:(NSString *)zoneId { + // ログ表示 + [self appendLog:[NSString stringWithFormat:@"%@: %@", @(__FUNCTION__), zoneId]]; +} + +/** + * 広告が閉じられた際に呼ばれます。 + * + * @param zoneId 広告を表示したゾーンの識別子 + */ +- (void)maioDidCloseAd:(NSString *)zoneId { + // ログ表示 + [self appendLog:[NSString stringWithFormat:@"%@: %@", @(__FUNCTION__), zoneId]]; + +// [self.audioPlayer play]; +} + +/** + * SDK でエラーが生じた際に呼ばれます。 + * + * @param zoneId エラーに関連するゾーンの識別子 + * @param reason エラーの理由を示す列挙値 + */ +- (void)maioDidFail:(NSString *)zoneId reason:(MaioFailReason)reason { + // ログ表示 + [self appendLog:[NSString stringWithFormat:@"%@: %@ reason: %@", @(__FUNCTION__), zoneId, [self stringFromFailReason:reason]]]; +} + + +#pragma mark - private methods + +/** + * ログを追加します。 + */ +- (void)appendLog:(NSString *)log { + if (!_startDate) { + _startDate = [NSDate date]; + } + [_outputs addObject:[NSString stringWithFormat:@"%.1f: %@", [[NSDate date] timeIntervalSinceDate:_startDate],log]]; + [self updateLabel]; +} +/** + * 出力ラベルを更新します。 + */ +- (void)updateLabel { + if (self.logLabel) { + self.logLabel.text = [_outputs componentsJoinedByString:@"\n"]; + } +} + +/** + * MaioFailReason の文字列表記を取得します。 + */ +- (NSString *)stringFromFailReason:(MaioFailReason)failReason { + switch (failReason) { + case MaioFailReasonUnknown: + return @"Unknown"; + case MaioFailReasonNetworkConnection: + return @"NetworkConnection"; + case MaioFailReasonNetworkServer: + return @"NetworkServer"; + case MaioFailReasonNetworkClient: + return @"NetworkClient"; + case MaioFailReasonSdk: + return @"Sdk"; + case MaioFailReasonDownloadCancelled: + return @"DownloadCancelled"; + case MaioFailReasonAdStockOut: + return @"AdStockOut"; + case MaioFailReasonVideoPlayback: + return @"VideoPlayback"; + } +} + +@end diff --git a/MaioSample/main.m b/MaioSample/main.m new file mode 100644 index 0000000..56a7d47 --- /dev/null +++ b/MaioSample/main.m @@ -0,0 +1,15 @@ +// +// main.m +// MaioSample +// +// Copyright (c) 2015年 maio. All rights reserved. +// + +#import +#import "AppDelegate.h" + +int main(int argc, char * argv[]) { + @autoreleasepool { + return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); + } +} diff --git a/README.md b/README.md index b1b4560..4c4e609 100644 --- a/README.md +++ b/README.md @@ -1,9 +1,9 @@ ![](https://github.com/imobile-maio/maio-iOS-SDK/blob/wiki/doc/images/logo.png) # maio iOS SDK -- SDK Version: 1.1.6 -- Released: 2016/08/25 -- 対応 iOS Version: 6.0 以降 +- Version: 1.1.7 +- Released: 2016/11/09 +- Supported: iOS 6.0+ ## What is maio? [maio](https://maio.jp/) はこれまでのバナー広告に加え、新たな広告収益の機会を得ることが可能な動画広告プラットフォームです。 @@ -13,16 +13,16 @@ 今までユーザーが離脱していたポイントに `動画広告 + リワード` を入れる事で、ユーザーのストレスを解消しアクティブ率を向上させる事も可能です。 ## Download -maio パートナーページから SDK をダウンロードできます。 +[releases](https://github.com/imobile-maio/maio-iOS-SDK/releases) から最新のリリースバージョンをダウンロードして下さい。 ## Get Started -https://github.com/imobile-maio/maio-iOS-SDK/wiki/Get-Started +[wiki/Get-Started](https://github.com/imobile-maio/maio-iOS-SDK/wiki/Get-Started) ## API Reference -https://github.com/imobile-maio/maio-iOS-SDK/wiki/API-Reference +[wiki/API-Reference](https://github.com/imobile-maio/maio-iOS-SDK/wiki/API-Reference) ## FAQ -https://github.com/imobile-maio/maio-iOS-SDK/wiki/FAQ +[wiki/FAQ](https://github.com/imobile-maio/maio-iOS-SDK/wiki/FAQ) ## Contact Us - General diff --git a/release-notes.md b/release-notes.md new file mode 100644 index 0000000..b71d5c6 --- /dev/null +++ b/release-notes.md @@ -0,0 +1,77 @@ +# Release Notes + +## v1.1.7 (2016-11-09) +- UINavigationController 等から広告を表示すると、広告クローズ時に正しい InterfaceOrientation に戻れない場合があるので、これが端末向きとなるよう修正。 +- 同一メディアに多数のゾーンが存在する場合、SDK の初期化に必要以上の時間がかかる事があるので、これを修正。 +- [Maio showAtZoneId:vc:] メソッドの vc に渡された値が、v1.1.3 以降 使用されていなかった不具合を修正。 + +## v1.1.6 (2016-08-25) +- ビルド時に「warning: /var/folders/xxx: No such file or directory」が大量に生じる問題を修正。 +- SDK のファイルサイズを最適化。 + +## v1.1.5 (2016-08-03) +- HTTP ステータス 503 などで無効なメディア情報をダウンロードすると、ダウンロードマネージャの最大同時リクエスト数設定が 0 となり配信サーバへのリクエストが行われなくなる場合があるので、これを修正。 +- 動画画面を閉じた後も dealloc が呼ばれず、直ぐに関連リソースが解放されない場合があるので、明示的に解放するよう修正。 +- アプリを再起動しないとメモリ上にキャッシュしたメディア情報を使い続ける不具合を修正。 +- 一部処理の最適化と、軽微な不具合の修正。 + +## v1.1.4 (2016-07-28) +- cocos2d-x-3.12 未満では AppDelegate に window プロパティが実装されていない為、"[AppController window]: unrecognized selector" となりクラッシュするので、それを回避。 +https://github.com/cocos2d/cocos2d-x/issues/13285 + +## v1.1.3 (2016-07-15) +- Unity 経由で maio の動画広告を再生完了させた際、アプリをバックグラウンド→フォアグラウンドで遷移させると、エンドカードの裏側で勝手に動画が再開されてしまう不具合を修正。 +- UIViewController の存在しない、または window ヒエラルキーに存在しない UIWindow から [Maio show] 系メソッドを呼び出すと、動画広告に遷移できない不具合を修正。(e.g. UIAlertView) +- テスト配信モード(adTestMode=YES)時、SDK セットアップが完了する前に [MaioInstance canShow:] を呼び出すと例外となる不具合を修正。 + +## v1.1.2 (2016-05-18) +- Apple/Reachability を IPv6 に対応した v5.0 に更新。 +- [Test for IPv6 DNS64/NAT64 Compatibility Regularly]に従って動作確認。 +- 動画広告の再生準備中に着信割込み等でアプリが非アクティブになると、動画が再生されず操作できなくなってしまう不具合を修正。 +- バックグラウンド時に行っていた動画の一時停止処理を非アクティブ時に行うよう修正。 +- 動画広告表示中にアプリがバックグラウンドに遷移した際、広告が閉じられるよう制御するオプション機能を実装。 + +## v1.1.1 (2016-05-06) +- bitcode を含めるよう対応。 + +## v1.1.0 (2016-05-06) +- 複数の maio Media ID を設定できるよう、クラス構造をリファクタリングし対応。 +- 動画再生準備完了時に、次のクリエイティブをプリロードするよう対応。 +- 何らかの事由で動画広告が一時停止された際に、画面に再生ボタンを表示するよう対応。 +- その他内部挙動・軽微なバグの微修正。 + +## v1.0.7 (2016-04-29) +- 動画制御 UI ファイルが破損していた場合に、動画が停止し操作できなくなってしまうので、速やかにエラー通知しアプリに戻るよう修正。 +- MD5 ハッシュ値によるクリエイティブ検証処理を追加。 +- 動画再生中に Siri により割り込まれた後、動画が停止してしまう不具合を修正。 +- SDK のバージョンを返すメソッドを追加。 + +## v1.0.6 (2016-04-15) +- 動画が破損等により再生途中で停止した場合に、再生エラーとして処理されなかった不具合を修正。 +- ダウンロードしたクリエイティブリソースが破損していた場合にリトライするよう修正。 +- オフラインとオンラインが頻繁に切り替わると、クリエイティブのダウンロードが一時的に停止してしまう不具合を修正。 + +## v1.0.5 (2016-02-04) +- 動画再生エラー時に動画広告が閉じない不具合を修正。 +- info.plist の CFBundleShortVersionString が無い状態で SDK をセットアップするとクラッシュする不具合を修正。 + +## v1.0.4 (2015-11-25) +- 一枚画像のエンドカード時にオリエンテーションが固定されるよう修正 +- iOS9 以降のデバイスから canOpenUrl が呼ばれた際にエラーログが出力されないよう修正 +- メインスレッド外から動画広告を再生するとエラーとなる不具合を修正 + +## v1.0.3 (2015-10-21) +- 動画再生後に、AudioSession の設定が初期化されてしまう不具合を修正 +- 回転検出時、UIDeviceOrientationUnknown を正常に処理できていなかったので対応。 +- iOS9 から supportedInterfaceOrientations の返値の型が微妙に変わったので修正。 + +## v1.0.2 (2015-09-01) +- アクティブなクリエイティブキャッシュまで削除されてしまう不具合を修正 +- 動画再生毎にメモリリークしてしまう不具合を修正 + +## v1.0.1 (2015-08-27) +- window.rootViewController 以外の UIViewController から [Maio show] をコールするとエラーとなり広告が表示されない不具合を修正 +- 配信優先度の高いキャンペーンが、キャッシュアウトされても優先的に選ばれてしまい、広告が表示されない不具合を修正 +- アプリ起動中に動画キャッシュファイルがシステムによって削除されてしまった場合、暫くの間広告表示が行えなくなる不具合を修正 + +## v1.0.0 (2015-08-21)