我在phonegap应用程序中使用以下插件https://github.com/phonegap/phonegap-plugin-push。我没有在注册活动的ioS版本上获得任何东西。在Android上它100%工作。我请求协助,看看我是否遗漏了任何东西。代码如下。我有证书并启用了推送服务。我创建了一个分发证书,该应用程序在苹果商店。基本上在启动时我有一个自我调用函数并通过http发送注册到我们的服务器,我们没有从ioS获得任何东西。我们使用phonegapbuild构建ioS版本并通过macincloud.com上传。我在这里读了几篇文章,但没有一篇能解决我的问题。
<gap:plugin name="phonegap-plugin-push" source="npm" >
<param name="SENDER_ID" value="15971xxxxxxx" />
</gap:plugin>
我的环境是 Windows 10 Cordova -v 6.0.0 phonegap -v 5.5.0 push plugin -v 1.5.3
这是代码
(function() {
'use strict';
document.addEventListener("deviceready", onDeviceReady, false);
function onDeviceReady() {
var samplePushApp = angular.module('samplePushApp');
samplePushApp.factory('deviceService', deviceService);
deviceService.$inject = ['$http', '$q', '$cordovaDevice', 'messagesSqlLiteService'];
function deviceService($http, $q, $cordovaDevice, messagesSqlLiteService) {
var url = 'http://example.com/api/device/';
console.log("PushNotification Registration");
var push = PushNotification.init({
"android": {"senderID": "15971xxxxxxx"},
"ios": {"alert": "true", "badge": "true", "sound": "true"},
"windows": {} } );
push.on('registration', function(data) {
console.log(data.registrationId);
console.log("data.registrationId");
var model = $cordovaDevice.getModel();
var platform = $cordovaDevice.getPlatform();
var uuID = $cordovaDevice.getUUID();
var version = $cordovaDevice.getVersion();
var data = { "model": model, "platform": platform, "registrationId": data.registrationId, "DeviceId": uuID , "version ": version };
console.log(JSON.stringify(data));
$http.post(
url,
JSON.stringify(data),
{
headers: {
'Content-Type': 'application/json',
'Accept': 'application/json'
}
}
).success(function() {
console.log("Device Info submitted");
}).error(function(data, status) {
console.error('Device Info error', status, data);
});
});
push.on('notification', function(data) {
navigator.notification.alert(data.title+" Message: " + data.message, function(){}, "", "");
messagesSqlLiteService.insert(data);
location.href = '#messages';
});
push.on('error', function(e) {
console.log(e.message);
});
}
// create an injector
var $injector = angular.injector(['samplePushApp']);
$injector.invoke(deviceService);
}
})();
解决
作为更新。事实证明,代码没有任何问题。有两个主要问题。
我最终借用了一台mac(来自macincloud)并使用
构建了该项目phonegap build ios
第一个问题:我收到了这个错误
Build Error
===========
ld: '/Users/user000516/Downloads/my-app - ioS/platforms/ios/samplePush/Plugins/phonegap-plugin-push/GCM/Libraries/libGGLCloudMessaging.a(GGLContext+CloudMessaging.o)' does not contain bitcode. You must rebuild it with bitcode enabled (Xcode setting ENABLE_BITCODE), obtain an updated library from the vendor, or disable bitcode for this target. for architecture arm64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
这意味着推送插件无法在启用bitcode的情况下进行编译。我在xCode中禁用了bitcode,并且项目已成功构建。我不确定这是否是Phonegap Build的构建失败的原因。
第二个问题:我从XCode做的另一件事是获得Capabilities选项卡并启用Push Notification功能。
在这些更改之后,代码按预期工作。
希望这有助于某人
答案 0 :(得分:0)
如果我应该编辑我的问题,或者提供解决方案,则不确定。
解决
作为更新。事实证明,代码没有任何问题。有两个主要问题。
我最终借用了一台mac(来自macincloud)并使用
构建了该项目phonegap build ios
第一个问题:我收到了这个错误
ld: '/Users/user000516/Downloads/my-app - ioS/platforms/ios/samplePush/Plugins/phonegap-plugin-push/GCM/Libraries/libGGLCloudMessaging.a(GGLContext+CloudMessaging.o)' does not contain bitcode. You must rebuild it with bitcode enabled (Xcode setting ENABLE_BITCODE), obtain an updated library from the vendor, or disable bitcode for this target. for architecture arm64
clang:错误:链接器命令失败,退出代码为1(使用-v查看调用)
这意味着推送插件无法在启用bitcode的情况下进行编译。我在xCode中禁用了bitcode,并且项目已成功构建。我不确定这是否是Phonegap Build的构建失败的原因。
第二个问题:我从XCode做的另一件事是获得Capabilities选项卡并启用Push Notification功能。
在这些更改之后,代码按预期工作。
希望这有助于某人