मैं OAuth2.0 खेल के मैदान पर अपने बीकन को पंजीकृत करने की कोशिश कर रहा हूं। जब मैं अपने बीकन को पंजीकृत करने की कोशिश कर रहा हूं, तो यह मुझे निम्नलिखित त्रुटि देता है:
{ "error": {
"status": "INVALID_ARGUMENT",
"message": "Invalid AdvertisedId id bytes length",
"code": 400 }
}
मैं application/json
निम्नलिखित के साथ {{एक्स 1}} अनुरोध {{एक्स 1}} भेज रहा हूं:
{
"advertisedId": {
"type": "EDDYSTONE",
"id": "ZWRkMWViXWFjMDRlNWRlZmEwNTdkMGU3ZDAwMmQ4YmM="
},
"status": "ACTIVE",
}
मैं इसके द्वारा बीकन के advertiseID
की गणना कर रहा हूं:
InstanceID
: e61bdd5c2a9a
Namespace:
edd1ebfac04e5defa017
मैं इस विधि से advertiseId
बना रहा हूं:
[1] संगत करें Namespace+Instance
। = & Gt; {{ X1 }}
[2] निम्नलिखित कोड का उपयोग करके इसे बाइट स्ट्रीम में बदलें:
byte[] message = "edd1ebfac04e5defa017e61bdd5c2a9a".getBytes(StandardCharsets.UTF_8);
[3] फिर निम्नलिखित कोड का उपयोग करके इसे Base64
में परिवर्तित करें:
String encoded = Base64.getEncoder().encodeToString(message);
अब encoded
हमारा advertisedId
है जो ZWRkMWViXWFjMDRlNWRlZmEwNTdkMGU3ZDAwMmQ4YmM=
है
क्या कोई मेरी मदद कर सकता है?
2 जवाब
यह बीकन आईडी के लिए हेक्स मूल्यों और इन के लिए वास्तविक अंतर्निहित द्विआधारी मूल्यों के बीच रूपांतरण के साथ एक सामान्य रूप से आम समस्या है।
बेस 64 स्ट्रिंग {{एक्स 0}} वास्तव में टेक्स्ट हेक्स स्ट्रिंग {{एक्स 1}} का बेस 64 एनकोडिंग है। लेकिन वास्तव में आपको जो करने की आवश्यकता है वह है बेस 64 इस हेक्स स्ट्रिंग को अंतर्निहित बाइनरी मान को एन्कोड करता है।
उदाहरण के लिए, Node.jS में:
var b = Buffer("edd1ebfac04e5defa017e61bdd5c2a9a", "hex");
b.length;
> 16 bytes // The 32 char string above represents 16 bytes!
b.toString("base64");
> '7dHr+sBOXe+gF+Yb3Vwqmg=='
b.toString("base64").length;
> 24
तो, जैसा कि आप देख सकते हैं, आपको एक बेस 64 स्ट्रिंग होना चाहिए जो कि लंबाई में लगभग 24 बाइट्स हो।
इसलिए, आपका रूपांतरण फ़ंक्शन निम्न पंक्तियों के साथ कुछ होना चाहिए:
String convertHexBeaconIDToAdvertisementID(String hex) {
byte[] bytes = ByteString.decodeHex(hex).toByteArray();
return Base64.getEncoder().encodeToString(bytes);
}
यदि किसी को जावा में पूर्ण कार्य उदाहरण की आवश्यकता है :),
import java.util.Base64;
import javax.xml.bind.DatatypeConverter;
public class Eddystone{
public static byte[] toByteArray(String s) {
return DatatypeConverter.parseHexBinary(s);
}
public static String convertHexBeaconIDToAdvertisementID(String hex) {
byte[] encoded = toByteArray(hex);
return Base64.getEncoder().encodeToString(encoded);
}
public static void main(String[] args){
System.out.println("Base64 Eddystone AdvertisementID: " +
convertHexBeaconIDToAdvertisementID("edd1ebfac04e5defa017e61bdd5c2a9a"));
}
}
संबंधित सवाल
नए सवाल
google-beacon-platform
अपने ऐप्स और डिवाइस को समय पर, प्रासंगिक जानकारी प्रदान करके स्मार्ट तरीके से काम करने के लिए दुनिया को चिह्नित करने का एक मंच।