About API Guide
The About Feature was fully integrated with the core code for the AllJoyn™ 14.12 release. Many of the API names were changed to fit more closely with naming used in the core code. The About Feature no longer needs a separate library. The About Feature can access more information. Making it possible to fill in some fields for the developer. If your application is still using the older APIs the legacy API guides can be used as reference.
Common Best Practices
Handling BusListener::BusDisconnected
If you are writing an app intended for a platform that is
running a standalone router (such as OpenWRT or Linux),
it is recommended to register a Bus Listener and implement
BusListener::BusDisconnected to support scenarios when the
connection between the AllJoyn™ app and the AllJoyn router is lost.
This can happen in the following scenarios:
- The standalone router is restarted (manually or otherwise)
- The Onboarding service framework forces a restart of the standalone router after onboarding a device.
After BusListener::BusDisconnected is invoked:
Clear now-obsolete application data such as session IDs.
Shut down any service frameworks being used.
Create a new bus attachment.
Periodically invoke BusAttachment::Connect until it returns successfully.
After the AllJoyn router restarts and the new bus attachment is reconnected, any sessions the old bus attachment was previously a part of must be re-established to resume proper function. Likewise, any service frameworks must be restarted using the reconnected bus attachment.
The process is summarized below:
1. Verify the BusListener implements BusListener::BusDisconnected.
2. When BusListener::BusDisconnected is invoked, make sure to:
1. Clear any now-obsolete application data, such as session IDs.
2. Shut down any service frameworks being used.
3. Create a new bus attachment.
4. Continually try to reconnect the bus attachment.
5. Once reconnected:
1. Set listeners.
2. Bind session ports as needed.
3. Restart service frameworks.
4. Connect to any pre-established sessions as needed.
Best Practices (across all services)
When to call the AboutService Announce() method
When using the About feature, the Announce() method should
be invoked once all AllJoyn interfaces have been registered
and whenever the data structure changes. A few scenarios
for calling the Announce() method follow:
- Some embedded devices have certain functionality enabled
through the device's Settings options. After any change to
activate the AllJoyn interfaces, the
Announce()method should be called again. - Some embedded devices support configuring a name or other
values that a user will enter. Each time there is a change,
a call to
Announce()should be made.
How the AboutProxy receives information
The BusAttachment::RegisterAboutListenerregisters for an AllJoyn Signal and
does not need to poll, creating and then registering the AboutListener
then calling the BusAttachment::WhoImplements method indicating the interfaces
the client is interested in is all that is required. The AboutListener object
should exist the lifetime of the application in order to receive up to date
information. Once an announce signal is received by the
AboutListener::Announced callback an AboutProxy object can be created to
interact with the remote AboutObj.
For more information on AboutListener, refer to the About API Guide
listed at the top of the page for the platform you are targeting.
Generating a unique AppId/unique ID
The About feature has a mandatory AppId field that requires a unique
value be set per the application using.
This unique ID should follow the Internet Engineering Task Force
(IETF) RFC 4122. This means the AppId will always be 128-bits in
length. When setting the value, there is no need to use the "-" hyphen
symbol; use the raw hex value and store it into a byte array.
The generation of the AppId can occur through various online
offerings. Perform a search for "GUID generator" on various
online search engines to aid in the generation of the AppId.
NOTE:If two or more applications use the same AppId, it does
not hinder the AboutObj or its ability to interact with an
AboutProxy. If an application using the AboutProxy relies on
the AppId to display information, it may render incorrect results
due to the non-unique AppIds.
When to send an Icon
Although not required, the About feature can support broadcasting and receiving an icon. The icon can be used by the applications to help visually identify the embedded device.
The recommended size for this icon is 72 x 72 pixels, but can be
larger as long as the total number of bytes is less than the
maximum supported by the AllJoyn framework in a single BusMethod
call (ALLJOYN_MAX_ARRAY_LEN, 131072 bytes). If the icon image
size is larger than ALLJOY_MAX_ARRAY_LEN, provide a valid URL
when initializing the AboutIconObj.
In order for the icon to correctly render, it is important to set the mimeType to the image type as some devices require this to show the icon on a display.
Ping discovered devices
NOTE: The BusAttachment.Ping option is part of the AllSeen Alliance 14.06 release.
It is possible to receive an org.alljoyn.About.Announce signal with
information about a bus name that is stale. Use the BusAttachment::Ping
method to discover if the name is still present before trying
to join a session with the remote bus.
A short timeout can be specified when calling the BusAttachment::Ping
method. This can make applications more responsive since they
will not have to wait as long for a JoinSession timeout failure.