[SalesForce] How to use ConnectApi.ChatterFeeds class if Chatter is disabled

I have the following problem: my code uses ConnectApi.ChatterFeeds.postFeedElement and ConnectApi.ChatterFeeds.postFeedElementBatch methods to operate feed items. That works properly is Chatter is enabled for the org, but … if it's disabled I can't even install my package because of Invalid class ChatterFeeds exception coming from my unit tests. I realize that some Chatter object aren't accessible when Chatter is disabled (for example FeedItem), but you can always write

SObjectType token = Schema.getGlobalDescribe().get('FeedItem');
SObject objPost = token.newSObject();

instead of

FeedItem f = new FeedItem();

Does anyone know if there is a workaround like that for ChatterFeeds class methods? Or I have to get rid of ConnectApi and rewrite my Chatter logic somehow else?

UPDATE (Sep 29 2015)

Salesforce team just confirmed it is a known behavior: ConnectApi expects Chatter to be enabled and that's a runtime check which can't be avoided.

UPDATE (Nov 10 2015)

Fixed by Salesforce in Winter'16 Patch 11.0 (already deployed to the most org).
Details are here

Best Answer

You can use Connect API to detect the features your org is enabled

if(ConnectApi.Organization.getSettings().features.chatter) {
     //Logic here
 }

Reference links

https://developer.salesforce.com/docs/atlas.en-us.apexcode.meta/apexcode/apex_connectapi_output_features.htm

Related Topic