无法使用cordova-plugin-fcm插件向iOS制作添加推送通知权利

时间:2017-08-28 18:50:03

标签: cordova cordova-plugins visual-studio-cordova taco

我正在尝试使用Visual Studio 2017在空白的Cordova应用程序中安装cordova-plugin-fcm插件。 我安装插件并添加google-plist文件等。 在我的Mac上我有xcode 7.2.1。

当我从visual studio构建ipa时,它会生成一个IPA,但它没有启用推送通知。 我已将所有源代码(包括插件文件夹)添加到bitbucket。下方链接; https://bitbucket.org/quintonn/pushnotificationtest

我在iphone上启用推送通知时缺少什么? 仅供参考,我可以很容易地在android上使用它。

我不想打开xcode来启用推送通知。我知道可以使用hook或xcconfig或config.xml直接从Visual Studio中获取它。但是我无法让它发挥作用,而且我已经花了大约3个星期的时间才能完成这项工作。我只是在黑暗中感受,因为所有在线阅读材料都是针对不同版本的cordova,或者是Visual studio,或者xcode,或者是手机或者离子或其他什么。

1 个答案:

答案 0 :(得分:1)

我在这个问题上花了很多很多很多小时。

我想出了一个解决我在XCode 7和8上的问题的cordova after_prepare 挂钩。 这是......

"use strict";

var fs = require('fs');
var path = require('path');
var xcode = require('xcode');

module.exports = function (context)
{
    var encoding = 'utf-8';
    var plist = fs.readFileSync(path.resolve(__dirname, "../GoogleService-Info.plist"), encoding);


    fs.writeFileSync(path.resolve(__dirname, "../platforms/ios/GoogleService-Info.plist"), plist, encoding);

    var projectPath = path.resolve(__dirname, "../platforms/ios/APP NAME.xcodeproj/project.pbxproj");
    var pbxFile = fs.readFileSync(projectPath, encoding);

    var proj = new xcode.project(projectPath);

    proj = proj.parseSync();

    var pbxGroupKey = proj.findPBXGroupKey({
        name: "Resources"
    });
    proj.removeResourceFile('GoogleService-Info.plist', {}, pbxGroupKey);
    proj.addResourceFile('GoogleService-Info.plist', {}, pbxGroupKey);

    proj.addBuildProperty('"CODE_SIGN_IDENTITY[sdk=iphoneos*]"', '"iPhone Distribution"', 'Release');
    proj.addBuildProperty('DEVELOPMENT_TEAM', 'XXXXXXXX', 'Release');

    proj.addBuildProperty('PROVISIONING_PROFILE', "XXXXXXXX-XXXXXXXX-XXXX-XXXX-XXXXXXXX", 'Release');
    proj.addBuildProperty('PROVISIONING_PROFILE_SPECIFIER', '"NAME OF PROFILE"', 'Release');
    proj.addBuildProperty('TARGETED_DEVICE_FAMILY', '"1,2"', 'Release');

    proj.addTargetAttribute("DevelopmentTeam", "XXXXXXXX");
    var pushEntitlement = "{com.apple.Push ={enabled = 1;};}";
    proj.addTargetAttribute("SystemCapabilities", pushEntitlement);

    /*var attributes = proj.getFirstProject()['firstProject']['attributes'];
    if (attributes['TargetAttributes'] === undefined)
    {
        attributes['TargetAttributes'] = {};
    }
    var target = proj.getFirstTarget();
    if (attributes['TargetAttributes'][target.uuid] === undefined)
    {
        attributes['TargetAttributes'][target.uuid] = {};
    }
    attributes['TargetAttributes'][target.uuid]["SystemCapabilities"] = "{com.apple.Push ={enabled = 1;};}";
    */
    fs.writeFileSync(projectPath, proj.writeSync());

    fs.writeFileSync(path.resolve(__dirname, "../platforms/ios/APP NAME/Resources/GoogleService-Info.plist"), plist, encoding);
    fs.writeFileSync(path.resolve(__dirname, "../platforms/ios/APP NAME/Resources/Resources/GoogleService-Info.plist"), plist, encoding);
};

请记住更新您的APP名称,配置个人资料名称和团队ID。