我尝试了requestWhenInUseAuthorization和 requestAlwaysAuthorization。
我在info.plist中添加了NSLocationAlwaysUsageDescription和NSLocationWhenInUseUsageDescription键
我的代码就是这样,它可以在android设备上运行
import { Injectable } from '@angular/core';
import { Platform, Events } from 'ionic-angular';
import { IBeacon } from "@ionic-native/ibeacon";
@Injectable()
export class BeaconProvider {
delegate: any;
region: any;
constructor(
public platform: Platform,
public events: Events,
private iBeacon: IBeacon
) {
this.initialise();
}
initialise(): any {
let promise = new Promise((resolve, reject) => {
if (this.platform.is("cordova")) {
this.iBeacon.requestAlwaysAuthorization();
// ALSO try this one too this.iBeacon.requestWhenInUseAuthorization();
this.delegate = this.iBeacon.Delegate();
this.delegate.didRangeBeaconsInRegion().subscribe(
data => {
this.events.publish("didRangeBeaconsInRegion", data);
//console.log("didRangebeacons__" + JSON.stringify(data)); // empty beacons array
},
error => console.error()
);
this.region = this.iBeacon.BeaconRegion("deskBeacon", "e2c56db5-dffb-48d2-b060-d0f5a71096e0");
this.iBeacon
.startRangingBeaconsInRegion(this.region)
.then(
() => {
resolve(true);
},
error => {
console.error("Failed to begin monitoring: ", error);
resolve(false);
}
);
} else {
resolve(false);
}
});
return promise;
}
}
编辑 我的定位服务处于启用状态,并且我在ios或android中使用相同的uuid(离子,相同代码)。通过我尝试通过市场上的某个应用程序将iphone用作信标发送器,其他iphone会将其视为信标。 这是信标范围应用
的屏幕截图答案 0 :(得分:2)
在iOS上需要检查的几件事:
编辑:更多步骤
确保iOS的“设置”(不是仅针对您的应用,是整体设置)中打开了“位置”设置->隐私->位置服务
由于您可以在Android上检测到,但无法在iOS上检测到,因此请仔细检查在Android上看到的UUID,并确保它与您在iOS上输入的内容完全匹配。
如果配置中的UUID匹配,但仍然无法检测到,请验证该信标实际上是在发送iBeacon帧,而不是AltBeacon或默认情况下不会看到iPhone的某种格式。如果您将Beacon Scope app用于Android,它将告诉您帧类型。