为基于 Ionic 4 Angular 和 Cordova 的 iOS 应用实现应用跟踪透明度

PHP*_*ger 8 ios cordova ionic-framework

我的应用程序更新被苹果拒绝,因为它需要应用程序跟踪透明度,我在我的 ios info.plist 文件中添加了以下几行

<key>NSUserTrackingUsageDescription</key>
<string>Your data will be used to connect external sites to allow you to log-in and track your orders using your email.</string>

我试过这个插件https://github.com/chemerisuk/cordova-plugin-idfa

getInfo(){
    return this.platform
      .ready()
      .then(() => cordova.plugins.idfa.getInfo())
  }
Run Code Online (Sandbox Code Playgroud)

但是当我运行 ionic cordova build iOS 时它显示错误。错误是:在cordova.plugins中找不到idfa属性

是否有任何官方的 ionic cordova 插件来实现应用程序跟踪透明度?或者任何人都有用于此目的的自定义解决方案?请帮忙。

小智 2

我在博客上找到了解决方案

首先,将其添加到位于platforms/ios/appname/appname-Info.plist 的 appname-Info.plist 文件中

<key>NSUserTrackingUsageDescription</key>
<string>Your Description</string>
Run Code Online (Sandbox Code Playgroud)

现在安装 Cordova 插件

cordova 插件添加 cordova-plugin-idfa

npm 我 cordova-plugin-idfa --save

然后将以下内容添加到 app.component 中

askTrackingPermission() {
      if (this.platform.is('ios')) {
        if (window.cordova) {
          //console.log('trying to request permission ');
          window.cordova.exec(win, fail, 'idfa', "requestPermission", []);
        }
      }
      function win(res) {
        //console.log('success ' + JSON.stringify(res));
      }
      function fail(res) {
        //console.log('fail ' + JSON.stringify(res));
      }
  }
 
readTrackingPermission() {
    if (this.platform.is('ios')) {
      if (window.cordova) {
        window.cordova.exec(win, fail, 'idfa', "getInfo", []);
      }
    }
    function win(res) {
      //console.log('success  ' + JSON.stringify(res));
    }
    function fail(res) {
      //console.log('fail ' + JSON.stringify(res));
    }
  }
Run Code Online (Sandbox Code Playgroud)

不要忘记声明窗口,如下所示

声明 let window: any; 导入后

最后从initializeApp函数调用

initializeApp() {
this.platform.ready().then(() => {
if (this.platform.is('ios')) {
this.askTrackingPermission();
this.readTrackingPermission();
}
});
}
Run Code Online (Sandbox Code Playgroud)