广告平台对接第三方插件集成指引

此文档是针对使用了 渠道统计 功能中的 广告渠道 效果监测功能而提供的补充性文档。

1. apiCloud

注意:为了兼容iOS的idfa获取以及android的imei权限获取,从openinstall模块1.3.0版本开始,必须添加模块初始化方法,升级的用户请注意添加

对于iOS平台,获取idfa使用的是apicloud官方模块iAd,需要用户主动添加,iAd模块

openinstall模块初始化代码如下:

apiready = function() {
        var openinstall = api.require('openinstall');
        if (api.systemType == "ios") {
            //需要用到idfa时,先获取idfa,再初始化
            var iAd = api.require('iAd');//引入iAd模块
               var iAd = iAd.getIDFA({
                  lowerCase: false
            }, function(ret) {
                    openinstall.init({
                            deviceId:ret.IDFA
                        });
            });
        } else if (api.systemType == "android") {
            //申请权限并初始化
                var permissions = [];
                permissions.push('phone-r');
                var result = api.hasPermission({
                       list: permissions
                });
                if(result && result[0] && !result[0].granted){
                    //没有权限,去申请
                    api.requestPermission({
                        list: permissions,
                        code: 100
                    }, function(ret, err){
                        //不管是否申请到权限都要调用初始化
                        openinstall.init();
                    });
                }else{
                      openinstall.init();
                }
        }

 };

2. dcloud

2.1 uni-App

Android平台

(1) 在manifest.json中声明权限,在 “App模块权限配置” 的 “Android打包权限配置” 勾选上<uses-permission android:name="android.permission.READ_PHONE_STATE"/>

(2)在manifest.json中设置,关闭uni-app自动获取android.permission.READ_PHONE_STATE权限

{
    "app-plus" : {
        "distribute" : {
            "android" : {
                "permissionPhoneState" : {
                    "request" : "none",
                    "prompt" : ""
                },
            }
        }
    }
}

(3)在App.vueonLaunch方法中进行初始化,在初始化之前申请权限

if (plus.os.name == "Android") {
    plus.android.requestPermissions(["android.permission.READ_PHONE_STATE"], function(event) {
        if(event.granted){
            console.log(event.granted);
        }
        if(event.deniedPresent){
            console.log(event.deniedPresent);
        }
        if(event.deniedAlways){
            console.log(event.deniedAlways);
        }
        // 权限申请成功,不管用户是否同意,都需要做初始化
        // openinstall.init();
        openinstall.registerWakeUp(function(result){
            console.log('getWakeup : channel=' + result.channelCode + ', data=' + result.bindData);
        });
    }, function(event) {
        // 权限申请错误
    })
}

iOS平台

(1)需在manifest.json的 “App常用其它设置” 中配置勾选 “使用广告标识(IDFA)”

(2)下载官方插件iOS平台获取idfa,并保存到目录下,如js_sdk/dc-idfa/idfa.js

(3)在App.vue中引用此模块,如下:

import idfa from "@/js_sdk/dc-idfa/idfa.js"

(4)在App.vueonLaunch方法中进行初始化,如下:

if('iOS' == plus.os.name){
    var fid = "";
    fid = idfa.value();//如果需要idfa则开启
    openinstall.init(fid);
    console.log(fid);
};

2.2 hbuilder

Android

第二个参数表示是否需要申请权限

// 需要申请权限
plus.openinstall.registerWakeUpHandler(wakeup, true);

iOS

(1)方式一,将iOS/OpenInstallApiManager.m文件替换为ad-track/OpenInstallApiManager.m文件

(2)方式二,修改iOS/OpenInstallApiManager.m文件代码,添加系统广告头文件和openinstall初始化代码:

#import <AdSupport/AdSupport.h>//使用idfa时引入(可选)

找到onAppStarted初始化方法,使用新API接口替换掉原先的初始化方法[OpenInstallSDK initWithDelegate:self];,替换后方法如下:

-(void)onAppStarted:(NSDictionary*)options{    
    NSString *idfaStr = [[[ASIdentifierManager sharedManager] advertisingIdentifier] UUIDString];
    [OpenInstallSDK initWithDelegate:self advertisingId:idfaStr];
}

3. react-native

Android 平台

(1)声明权限
openinstall-react-native已经在AndroidMainfest.xml配置文件中添加了需要申请的权限

(2)申请权限
导入包

import { PermissionsAndroid } from 'react-native'

App.jscomponentDidMount方法中初始化,并且在初始化之前申请权限

this.receiveWakeupListener = map => {    
    Alert.alert('拉起回调',JSON.stringify(map)) 
} 
var permission = PermissionsAndroid.PERMISSIONS.READ_PHONE_STATE;
PermissionsAndroid.request(permission)
    .then(granted => {
        if (granted === PermissionsAndroid.RESULTS.GRANTED){
            //权限获取成功
        }else{
            //权限获取失败
        }
        // openinstall.init();
        OpeninstallModule.addWakeUpListener(this.receiveWakeupListener)
    })

iOS 平台

(1)自动集成

使用自动集成脚本集成代码,如下:

npm run openinstall <yourAppKey> <yourScheme> iosIDFA
  • yourAppKey指的是你在openinstall官方账号后台,创建应用后分配的AppKey
  • yourScheme指的是你在openinstall官方账号后台,创建应用后分配的scheme
    (scheme详细获取位置:openinstall应用控制台->Android集成->Android应用配置,iOS同理)

举例:

npm run openinstall e7iomw rc8tey iosIDFA

(2)手动集成

用Xcode打开iOS工程,pod集成的打开xcworkspace类型文件,找到AppDelegate.h文件,添加头文件

#import <AdSupport/AdSupport.h>//需要使用idfa时引入

#import <RCTOpenInstall/RCTOpenInstall.h>
//通过cocoapod安装插件头文件路径不一样,如下
#import <openinstall-react-native/RCTOpenInstall.h>

AppDelegate.mdidFinishLaunchingWithOptions方法里引用如下初始化方法,传入idfa字符串

NSString *idfaStr = [[[ASIdentifierManager sharedManager] advertisingIdentifier] UUIDString];
[OpenInstallSDK initWithDelegate:self advertisingId:idfaStr];

4. unity3d

使用广告渠道统计,请升级到最新插件版本,广告渠道效果监测功能在SDK version >= 2.4.0下可用。

Android平台

AndroidMainfest.xml的参考文件替换,使用sample/Android/ad-track/AndroidManifest.xml

iOS平台

Openinstall.unitypackage中的CustomAppController.mm文件替换,使用sample/iOS/ad-track/CustomAppController.mm

  • 如果发生编译错误,可能需要手动添加 AdSupport.framework 库

5. cordova

使用广告渠道统计,请升级到最新插件版本,广告渠道效果监测功能在SDK version >= 2.4.0下可用。

Android平台

iOS平台

6. flutter

使用广告渠道统计,请升级到最新插件版本,广告渠道效果监测功能在SDK version >= 2.4.0下可用。

Android平台

(1)声明权限
openinstall-flutter-plugin已经在AndroidMainfest.xml配置文件中添加了需要申请的权限

(2)可使用插件提供的 api 进行权限申请,调用初始化 api,第二个参数permission=true表示插件进行权限申请

_openinstallFlutterPlugin.init(wakeupHandler, true);

(3)也可在Flutter自行进行权限申请,只需要确保在初始化之前申请权限,例如

// 使用 permission_handler
if (await Permission.phone.request().isGranted) {
  // 获取到了权限
}
_openinstallFlutterPlugin.init(wakeupHandler);

iOS平台

(1)方式一,将ios/Classes/OpeninstallFlutterPlugin.m文件替换为example/ad-track/OpeninstallFlutterPlugin.m文件

(2)方式二,修改ios/Classes/OpeninstallFlutterPlugin.m代码,添加系统广告头文件和openinstall初始化代码:

#import <AdSupport/AdSupport.h>//使用idfa时引入(可选)

找到init初始化方法,使用新API接口替换掉原先的初始化方法[OpenInstallSDK initWithDelegate:self];,替换后方法如下:

- (instancetype)init {
    self = [super init];
    if (self) {
        [self initData];
    //使用新的初始化方法,该方法在SDK>=2.4.0可用
        NSString *idfaStr = [[[ASIdentifierManager sharedManager] advertisingIdentifier] UUIDString];
        [OpenInstallSDK initWithDelegate:self advertisingId:idfaStr];
    }
    return self;
}

7. cocos2d-x

7.1 cocos2d-c++

使用广告渠道统计,请升级到最新插件版本,广告渠道效果监测功能在SDK version >= 2.4.0下可用。

Android平台
AndroidMainfest.xml配置文件中添加了需要申请的权限

<uses-permission android:name="android.permission.READ_PHONE_STATE"/>

调用init方法时传入一个参数,表示是否是广告平台需要请求权限

openInstall2dx::OpenInstall::init(true);

iOS平台

(1)在AppController.mm文件中引入系统广告头文件等,如下:

#import <AdSupport/AdSupport.h>
#import "OpenInstallSDK.h"
#import "CPOpenInstallDelegate.h"

(2)在didFinishLaunchingWithOptions方法中添加以下方法:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    //请在最开始时调用
    NSString *idfaStr = [[[ASIdentifierManager sharedManager] advertisingIdentifier] UUIDString];
    [OpenInstallSDK initWithDelegate:[CPOpenInstallDelegate defaultManager] advertisingId:idfaStr];

    // Initialize the GLView attributes
    // ...其它代码

    return YES;
}

7.2 cocos2d-js

使用广告渠道统计,请升级到最新插件版本,广告渠道效果监测功能在SDK version >= 2.4.0下可用。

Android平台

AndroidMainfest.xml配置文件中添加了需要申请的权限

<uses-permission android:name="android.permission.READ_PHONE_STATE"/>

使用OpenInstallActivityAd替换OpenInstallActivity

iOS平台

(1)在AppController.mm中增加系统广告头文件的引用

#import <AdSupport/AdSupport.h>
#import "Openinstall.h"

(2)在AppController.mm中替换掉老的初始化方法init,使用新的初始化方法,传入idfa字符串:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
  //尽量早的去调用
  NSString *idfaStr = [[[ASIdentifierManager sharedManager] advertisingIdentifier] UUIDString];
  [Openinstall initWithAdvertisingId:idfaStr];

  //其他代码
  return YES;
}
  • 如果发生编译错误,可能需要手动添加 AdSupport.framework 库

7.3 cocos2d-lua

使用广告渠道统计,请升级到最新插件版本,广告渠道效果监测功能在SDK version >= 2.4.0下可用。

Android平台
AndroidMainfest.xml配置文件中添加了需要申请的权限

<uses-permission android:name="android.permission.READ_PHONE_STATE"/>

使用OpenInstallActivityAd替换OpenInstallActivity

iOS平台

(1)在AppController.mm文件中引入系统广告头文件

#import <AdSupport/AdSupport.h>

(2)替换老的初始化方法:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    //[Openinstall init];//老的初始化方法,不需要idfa时使用

    NSString *idfaStr = [[[ASIdentifierManager sharedManager] advertisingIdentifier] UUIDString];
    [Openinstall initWithAdvertisingId:idfaStr];

    return YES;
}