GVKun编程网logo

如何签署自定义JCE安全提供程序

14

以上就是给各位分享如何签署自定义JCE安全提供程序,同时本文还将给你拓展.net–扩展自定义成员资格提供程序、5.0.0迁移后,使用提供程序的多提供程序失败、android–IQ自定义提供程序无法识别

以上就是给各位分享如何签署自定义JCE安全提供程序,同时本文还将给你拓展.net – 扩展自定义成员资格提供程序、5.0.0 迁移后,使用提供程序的多提供程序失败、android – IQ自定义提供程序无法识别、Android不良做法:缺少Google Play服务更新的安全提供程序补救措施(小时):0.1等相关知识,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

本文目录一览:

如何签署自定义JCE安全提供程序

如何签署自定义JCE安全提供程序

Sun的PKCS11 JCE安全提供程序缺少我们需要的某些功能。
因此,我使用原始资源编写了它的增强版本。

不幸的是,JCE基础结构拒绝新的提供者
“ JCE无法验证提供者”,
因为它没有正确签名。

javax.crypto.JceSecurity.verifyProviderJar(...)抛出。
(呼叫javax.crypto.JarVerifier.verify()

关于如何签署新提供商以使其与JCE一起工作的任何建议?

答案1

小编典典

该过程在文档“如何实现 提供者”中进行了描述。

它涉及到电子邮件 太阳向Oracle提供一些信息(包括您为签名密钥生成的CSR ),然后传真确认文档。让
您签发的证书可能需要一周或更长时间,所以未雨绸缪。

如果提供商提供的服务受到某些(压制性)政府的限制,则仅需要对提供商进行签名。例如,一个Cipher实现是一个受限制的“服务”,而MessageDigest是一个无限制的服务。我假设收到的消息是您正在尝试提供受限服务。

如果提供这些服务中的任何一种,则无法解决:您需要由Sun签发的代码签名证书。(IBM的一个也可能起作用;如果我没
记错的话,他们的代码签名CA也受支持,但是我对他们的发行过程一无所知。)

.net – 扩展自定义成员资格提供程序

.net – 扩展自定义成员资格提供程序

我已经建立了自定义成员资格提供程序并实现了我需要的方法.我现在需要添加一个自己的自定义方法来处理密码.

我添加了一个新方法,但我无法在代码中的任何地方使用它.是否可以向我的自定义成员资格提供程序添加方法,还是在其他地方完成?

解决方法

((YourProviderType)Membership.Provider).YourMethod();

5.0.0 迁移后,使用提供程序的多提供程序失败

5.0.0 迁移后,使用提供程序的多提供程序失败

如何解决5.0.0 迁移后,使用提供程序的多提供程序失败?

我尝试迁移到 provider: ^5.0.0 并停止工作,对之前工作的内容进行采样。

  @override
  Widget build(BuildContext context) {
    WidgetsFlutterBinding.ensureInitialized();
    return MultiProvider(
      providers: [
        ChangeNotifierProvider<ConfigurationProvider>(create: (context) => ConfigurationProvider(preferences: widget.preloadedFs)),ChangeNotifierProvider<ManagerProvider>(create: (context) => ManagerProvider()),],child: Builder(builder: (context) {
        ConfigurationProvider config = Provider.of<ConfigurationProvider>(context);
        ThemeData customTheme;
        ThemeData darkTheme;

        darkTheme = config.blackThemeEnabled ? AppTheme.black(config.accentColor) : AppTheme.dark(config.accentColor);
        customTheme = config.darkThemeEnabled ? darkTheme : AppTheme.white(config.accentColor);
        List<Locale> supportedLocales = [];
        supportedLanguages.forEach((element) => supportedLocales.add(Locale(element.languageCode,'''')));

        return MaterialApp(
          locale: _locale,supportedLocales: supportedLocales,localizationsDelegates: [
            FallbackLocalizationDelegate(),AppLocalizationsDelegate(),GlobalMaterialLocalizations.delegate,GlobalWidgetsLocalizations.delegate,GlobalCupertinoLocalizations.delegate,localeResolutionCallback: (locale,supportedLocales) {
            for (var supportedLocale in supportedLocales) {
              if (supportedLocale?.languageCode == locale?.languageCode && supportedLocale?.countryCode == locale?.countryCode) {
                return supportedLocale;
              }
            }
            return supportedLocales?.first;
          },builder: (context,child) {
            return ScrollConfiguration(
              behavior: CustomScrollBehavior(),child: child,);
          },);
      }),);
  }

错误日志

======== Exception caught by widgets library =======================================================
The following ArgumentError was thrown building Builder(dirty,dependencies: [_InheritedProviderScope<ConfigurationProvider>]):
Invalid argument(s) (value): Must not be null

The relevant error-causing widget was: 
  Builder file:///home/sony/Flutter-sdk/Flutter-app/demo-Flutter/lib/main.dart:109:14
When the exception was thrown,this was the stack: 
#0      ArgumentError.checkNotNull (dart:core/errors.dart:185:27)
#1      SharedPreferences._setValue (package:shared_preferences/shared_preferences.dart:146:19)
#2      SharedPreferences.setString (package:shared_preferences/shared_preferences.dart:132:7)
#3      LegacyPreferences.saveAudioDownloadpath (package:demo/internal/legacyPreferences.dart:127:11)
#4      ConfigurationProvider.audioDownloadpath= (package:demo/provider/configurationProvider.dart:165:17)
...
====================================================================================================

======== Exception caught by widgets library =======================================================
The following StateError was thrown building Builder(dirty,dependencies: [_InheritedProviderScope<ConfigurationProvider>]):
Bad state: Tried to read a provider that threw during the creation of its value.
The exception occurred during the creation of type ConfigurationProvider.

The relevant error-causing widget was: 
  Builder file:///home/sony/Flutter-sdk/Flutter-app/demo-Flutter/lib/main.dart:109:14
When the exception was thrown,this was the stack: 
#0      _CreateInheritedProviderState.value (package:provider/src/inherited_provider.dart:661:7)
#1      _InheritedProviderScopeElement.value (package:provider/src/inherited_provider.dart:544:33)
#2      Provider.of (package:provider/src/provider.dart:289:29)
#3      _MainState.build.<anonymous closure> (package:demo/main.dart:110:49)
#4      Builder.build (package:Flutter/src/widgets/basic.dart:7798:48)
...
====================================================================================================

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

android – IQ自定义提供程序无法识别

android – IQ自定义提供程序无法识别

我在Openfire中使用了一个思科.

经过大量研究后,我发现Openfire不支持消息归档并安装了插件OpenArchive.

现在归档工作正常,所有消息都存储得很好.

现在在客户端,我尝试发送一个IQ节来检索存档的聊天记录.

首先,我添加了一个IQ Provider,如下所示:

pm.addIQProvider(“list”,“urn:xmpp:archive”,new ListIQProvider());

然后我用了:

final IQ iq = new IQ()
{

    @Override public String getChildElementXML()
    {

        return "<list  xmlns=''urn:xmpp:archive'' with=''test@customOpenfire.com''><set xmlns=''http://jabber.org/protocol/rsm''><max xmlns=''http://jabber.org/protocol/rsm''>30</max></set> </list>";

    }
};

iq.setType(IQ.Type.GET);
iq.setPacketID("987654321");

xmppConnection.sendPacket(iq);

它工作正常,我收到了答复.

<iq id="987654321" to="admin@customOpenfire.com/Smack" type="result">
<list xmlns="urn:xmpp:archive">
    <chat with="test@customOpenfire.com" start="2014-04-06T12:11:28.674Z"/>
    <chat with="test@customOpenfire.com" start="2014-04-03T16:55:59.523Z"/>
    <chat with="test@customOpenfire.com" start="2014-04-05T16:33:03.377Z"/>
    <chat with="test@customOpenfire.com" start="2014-04-02T14:32:10.499Z"/>
    <chat with="test@customOpenfire.com" start="2014-04-06T12:47:52.961Z"/>
    <chat with="test@customOpenfire.com" start="2014-04-03T14:46:24.877Z"/>
    <chat with="test@customOpenfire.com" start="2014-04-06T12:37:14.608Z"/>
    <chat with="test@customOpenfire.com" start="2014-04-03T15:48:46.642Z"/>
    <chat with="test@customOpenfire.com" start="2014-04-02T13:46:07.750Z"/>
    <chat with="test@customOpenfire.com" start="2014-04-04T18:25:57.968Z"/>
    <chat with="test@customOpenfire.com" start="2014-04-03T19:08:45.238Z"/>
    <chat with="test@customOpenfire.com" start="2014-04-04T18:47:19.067Z"/>
    <chat with="test@customOpenfire.com" start="2014-04-04T19:34:27.819Z"/>
    <chat with="test@customOpenfire.com" start="2014-04-02T15:09:13.140Z"/>
    <chat with="test@customOpenfire.com" start="2014-04-03T18:30:36.804Z"/>
    <chat with="test@customOpenfire.com" start="2014-04-05T14:09:34.973Z"/>
    <chat with="test@customOpenfire.com" start="2014-04-04T22:47:54.363Z"/>
    <chat with="test@customOpenfire.com" start="2014-04-02T15:32:44.540Z"/>
    <chat with="test@customOpenfire.com" start="2014-04-03T17:18:37.940Z"/>
    <chat with="test@customOpenfire.com" start="2014-04-03T13:37:15.630Z"/>
    <chat with="test@customOpenfire.com" start="2014-04-04T17:10:39.116Z"/>

    <set xmlns="http://jabber.org/protocol/rsm">
        <first index="0">66</first>
        <last>139</last>
        <count>21</count>
    </set>
</list>
</iq>

然后我想检索实际的消息,所以我发送了这个IQ节:

final IQ iq = new IQ()
{

    @Override public String getChildElementXML()
    {

        return "<retrieve  xmlns=''urn:xmpp:archive'' with=''test@customOpenfire.com''><set xmlns=''http://jabber.org/protocol/rsm''><max xmlns=''http://jabber.org/protocol/rsm''>30</max></set> </retrieve>";

    }
};

iq.setType(IQ.Type.GET);
iq.setPacketID("987654321");

xmppConnection.sendPacket(iq);

当然,在我创建自定义提供程序后,如下所示添加它:

pm.addIQProvider("retrieve","urn:xmpp:archive",new ChatIQProvider());

我应该收到类似的东西:

<iq xmlns="jabber:client" type="result" id="hgfg" to="admin@customOpenfire.com/7dd0f2fc">
<chat xmlns="urn:xmpp:archive" with="test@customOpenfire.com" start="2014-04-02T13:46:07.750Z">
    <from secs="0" jid="test@customOpenfire.com">
        <body>hello</body>
    </from>
    <to secs="2">
        <body>hey</body>
    </to>
    <from secs="5" jid="test@customOpenfire.com">
        <body>test</body>
    </from>
    <set xmlns="http://jabber.org/protocol/rsm">
        <first index="0">0</first>
        <last>2</last>
        <count>3</count>
    </set>
</chat>

但是在我的数据包侦听器中,结果未被解析,并且如果我删除ListIQProvider(),就像处理list节一样对待它.

这是我的自定义类:

ChatIQ:

public class ChatIQ extends IQ {


private String xmlns;
private String with;
private String start;

private List<From> froms;
private Set set;

public ChatIQ()
{
    this.froms = new ArrayList<ChatIQ.From>();
}

public String getXmlns()
{
    return xmlns;
}

public void setXmlns(String xmlns)
{
    this.xmlns = xmlns;
}

public String getWith()
{
    return with;
}

public void setWith(String with)
{
    this.with = with;
}

public String getStart()
{
    return start;
}

public void setStart(String start)
{
    this.start = start;
}



public void addFrom(From from)
 {
    froms.add(from);
 }

 public List<From> getFroms()
 {
    return froms;
 }

public Set getSet()
 {
    return set;
 }

 public void setSet(Set set)
 {
    this.set = set;
 }

 @Override
 public String getChildElementXML()
 {
     StringBuilder builder = new StringBuilder("<chat xmlns=\"urn:xmpp:archive\"");
        builder.append("with=\"").append(with).append("\"");
        builder.append(" start=\"");
        builder.append(start);
        builder.append("\">");
        for(From from : froms)
        {
            builder.append(from.toXml());
        }
        builder.append(set.toXml());
        builder.append("</chat>");
        return builder.toString();
 }

 public static class From 
 {
     private String secs;
     private String jid;

     private Body body;

     public String getSecs()
    {
        return secs;
    }


    public void setSecs(String secs)
    {
        this.secs = secs;
    }


    public String getJid()
    {
        return jid;
    }


    public void setJid(String jid)
    {
        this.jid = jid;
    }


    public Body getBody()
    {
        return body;
    }


    public void setBody(Body body)
    {
        this.body = body;
    }


    public String toXml()
    {
        StringBuilder builder = new StringBuilder("<from ");
        builder.append("secs=\"").append(secs).append("\" ");
        builder.append("jid=\"").append(jid).append("\" >");
        builder.append(body.toXml());
        builder.append("</from>");
        return builder.toString();
    }
 }

 public static class Body 
 {
     private String message;

    public Body(String message)
    {
        this.message = message;
    }

    public String getMessage()
    {
        return message;
    }

    public void setMessage(String message)
    {
        this.message = message;
    }

    public Object toXml()
    {
        StringBuilder builder = new StringBuilder("<body>");
        builder.append(message);
        builder.append("</body>");
        return builder.toString();
    }
 }

 public static class Set {
    private int last;
    private int count;
    private int indexAtt;
    private int first;

    public Set()
    {
    }

    public int getLast()
    {
        return last;
    }

    public void setLast(int last)
    {
        this.last = last;
    }

    public int getCount()
    {
        return count;
    }

    public void setCount(int count)
    {
        this.count = count;
    }

    public int getIndexAtt()
    {
        return indexAtt;
    }

    public void setIndexAtt(int indexAtt)
    {
        this.indexAtt = indexAtt;
    }

    public int getFirst()
    {
        return first;
    }

    public void setFirst(int first)
    {
        this.first = first;
    }

    public String toXml()
    {
        StringBuilder builder = new StringBuilder("<set xmlns=\"http://jabber.org/protocol/rsm\">");
        builder.append("<first index=\"").append(indexAtt).append("\">").append(first).append("</first>");
        builder.append("<last>").append(last).append("</last>");
        builder.append("<count>").append(count).append("</count>");
        builder.append("</set>");
        return builder.toString();
    }
 }

}

ChatIQProvider:

public class ChatIQProvider implements IQProvider {

 public ChatIQProvider()
 {
 }

 @Override
 public IQ parseIQ(XmlPullParser parser) throws Exception
 {
    Log.d("CHAT IQ PROVIDER",String.format("Received iq packet,namespace[%s],name[%s]",parser.getNamespace(),parser.getName()));
    ChatIQ iq = new ChatIQ();
    ChatIQ.Set set = new Set();
    boolean done = false;

    From from = new From();
    String secs = "",jid = "";
    while (!done)
    {
        int eventType = parser.next();
        if (eventType == XmlPullParser.START_TAG)
        {
            if (parser.getName().equals("from"))
            {
                secs = parser.getAttributeValue("","secs");
                jid = parser.getAttributeValue("","jid");

                from = new From();

                iq.addFrom(from);
            }
            else if(parser.getName().equals("body") && from.getBody()==null)
            {
                ChatIQ.Body body = new Body(parser.nextText());
                from.setBody(body);
            }
            else if (parser.getName().equals("first"))
            {
                int index = parseInt(parser.getAttributeValue("","index"));
                set.setIndexAtt(index);
                int first = parseInt(parser.nextText());
                set.setFirst(first);
            }
            else if (parser.getName().equals("last"))
            {
                int last = parseInt(parser.nextText());
                set.setLast(last);
            }
            else if (parser.getName().equals("count"))
            {
                int count = parseInt(parser.nextText());
                set.setCount(count);
            }
        }
        else if (eventType == XmlPullParser.END_TAG)
        {
            if (parser.getName().equals("chat"))
            {
                iq.setSet(set);
                done = true;
            }
        }
    }

    return iq;
 }

 private int parseInt(String integer)
 {
    return Integer.parseInt((integer != null ? integer : "0"));
 }
}

我的问题如下:

>为什么我的自定义IQProvider不被识别?
>我可以获取收到的XML并解析它而无需通过IQproviders吗?
>是否有更简单的方法从服务器检索存档的消息?知道消息存在并且我确实在客户端接收它们,我就找不到获取内容并解析它的方法.

谢谢.

解决方法

我解决了这个问题,我忘了在这里为其他可能遇到同样问题的人发布答案.
无论如何,修复非常简单.代替:

pm.addIQProvider("retrieve",new ChatIQProvider());

我应该用过:

pm.addIQProvider("chat",new ChatIQProvider());

我必须注册IQ响应的子标记的名称而不是请求,因此“聊天”而不是“检索”.

希望这会有所帮助,因为我在android smack api中找不到任何关于使用自定义IQ的例子.

由于评论太长,我在这里添加了它.

干得好:

ListIQProvider:

public class ListIQProvider implements IQProvider {

 public ListIQProvider()
 {
 }

 @Override
 public IQ parseIQ(XmlPullParser parser) throws Exception
 {
    ListIQ iq = new ListIQ();
    ListIQ.Set set = new Set();
    boolean done = false;

    String with = "",start = "";
    while (!done)
    {
        int eventType = parser.next();
        if (eventType == XmlPullParser.START_TAG)
        {
            if (parser.getName().equals("chat"))
            {
                with = parser.getAttributeValue("","with");
                start = parser.getAttributeValue("","start");
                iq.addChat(new Chat(with,start));
            }
            else if (parser.getName().equals("first"))
            {
                int index = parseInt(parser.getAttributeValue("","index"));
                set.setIndexAtt(index);
                int first = parseInt(parser.nextText());
                set.setFirst(first);
            }
            else if (parser.getName().equals("last"))
            {
                int last = parseInt(parser.nextText());
                set.setLast(last);
            }
            else if (parser.getName().equals("count"))
            {
                int count = parseInt(parser.nextText());
                set.setCount(count);
            }
        }
        else if (eventType == XmlPullParser.END_TAG)
        {
            if (parser.getName().equals("list"))
            {
                iq.setSet(set);
                done = true;
            }
        }
    }

    return iq;
 }

 private int parseInt(String integer)
 {
    return Integer.parseInt((integer != null ? integer : "0"));
 }

}

ListIQ:

public class ListIQ extends IQ {

 private List<Chat> chats;

 private Set set;

 public ListIQ()
 {
    this.chats = new ArrayList<ListIQ.Chat>();
 }

 public Set getSet()
 {
    return set;
 }

 public void setSet(Set set)
 {
    this.set = set;
 }

 public void addChat(Chat chat)
 {
    chats.add(chat);
 }

 public List<Chat> getChats()
 {
    return chats;
 }

 @Override
 public String getChildElementXML()
 {
    StringBuilder builder = new StringBuilder("<list xmlns=\"urn:xmpp:archive\">");
    for (Chat chat : chats)
    {
        builder.append(chat.toXml());
    }
    builder.append(set.toXml());
    builder.append("</list>");
    return builder.toString();
 }

 public static class Chat {
    private String with;
    private String start;

    public Chat()
    {
    }

    public Chat(String with,String start)
    {
        this.with = with;
        this.start = start;
    }

    public String getWith()
    {
        return with;
    }

    public void setWith(String with)
    {
        this.with = with;
    }

    public String getStart()
    {
        return start;
    }

    public void setStart(String start)
    {
        this.start = start;
    }

    public String toXml()
    {
        StringBuilder builder = new StringBuilder("<chat with=\"");
        builder.append(with).append("\"");
        builder.append(" start=\"");
        builder.append(start);
        builder.append("\"/>");
        return builder.toString();
    }

 }

 public static class Set {
    private int last;
    private int count;
    private int indexAtt;
    private int first;

    public Set()
    {
    }

    public int getLast()
    {
        return last;
    }

    public void setLast(int last)
    {
        this.last = last;
    }

    public int getCount()
    {
        return count;
    }

    public void setCount(int count)
    {
        this.count = count;
    }

    public int getIndexAtt()
    {
        return indexAtt;
    }

    public void setIndexAtt(int indexAtt)
    {
        this.indexAtt = indexAtt;
    }

    public int getFirst()
    {
        return first;
    }

    public void setFirst(int first)
    {
        this.first = first;
    }

    public String toXml()
    {
        StringBuilder builder = new StringBuilder("<set xmlns=\"http://jabber.org/protocol/rsm\">");
        builder.append("<first index=\"").append(indexAtt).append("\">").append(first).append("</first>");
        builder.append("<last>").append(last).append("</last>");
        builder.append("<count>").append(count).append("</count>");
        builder.append("</set>");
        return builder.toString();
    }
 }

}

我只是使用这个类来调用ServiceProviders.Register_Providers(ProviderManager.getInstance());在连接Xmpp连接之后.

服务供应商:

public class ServiceProviders
{
    public static void Register_Providers(ProviderManager pm)
    {
        Log.e("PROVIDER","START");
        // Private Data Storage
        pm.addIQProvider("query","jabber:iq:private",new PrivateDataManager.PrivateDataIQProvider());

        // Time
        try
        {
            pm.addIQProvider("query","jabber:iq:time",Class.forName("org.jivesoftware.smackx.packet.Time"));
        }
        catch (ClassNotFoundException e)
        {
            Log.w("TestClient","Can''t load class for org.jivesoftware.smackx.packet.Time");
        }

        // Roster Exchange
        pm.addExtensionProvider("x","jabber:x:roster",new RosterExchangeProvider());

        // Message Events
        pm.addExtensionProvider("x","jabber:x:event",new MessageEventProvider());

        // Chat State
        pm.addExtensionProvider("active","http://jabber.org/protocol/chatstates",new ChatStateExtension.Provider());

        pm.addExtensionProvider("composing",new ChatStateExtension.Provider());

        pm.addExtensionProvider("paused",new ChatStateExtension.Provider());

        pm.addExtensionProvider("inactive",new ChatStateExtension.Provider());

        pm.addExtensionProvider("gone",new ChatStateExtension.Provider());

        // XHTML
        pm.addExtensionProvider("html","http://jabber.org/protocol/xhtml-im",new XHTMLExtensionProvider());

        // Group Chat Invitations
        pm.addExtensionProvider("x","jabber:x:conference",new GroupChatInvitation.Provider());

        // Service discovery # Items
        pm.addIQProvider("query","http://jabber.org/protocol/disco#items",new discoverItemsProvider());

        // Service discovery # Info
        pm.addIQProvider("query","http://jabber.org/protocol/disco#info",new discoverInfoProvider());

        // Data Forms
        pm.addExtensionProvider("x","jabber:x:data",new DataFormProvider());

        // MUC User
        pm.addExtensionProvider("x","http://jabber.org/protocol/muc#user",new MUCUserProvider());

        // MUC Admin
        pm.addIQProvider("query","http://jabber.org/protocol/muc#admin",new MUCAdminProvider());

        // MUC Owner
        pm.addIQProvider("query","http://jabber.org/protocol/muc#owner",new MUCOwnerProvider());

        // Delayed Delivery
        pm.addExtensionProvider("x","jabber:x:delay",new DelayinformationProvider());

        // Version
        try
        {
            pm.addIQProvider("query","jabber:iq:version",Class.forName("org.jivesoftware.smackx.packet.Version"));
        }
        catch (ClassNotFoundException e)
        {
            // Not sure what''s happening here.
        }

        // VCard
        pm.addIQProvider("vCard","vcard-temp",new VCardProvider());

        // Offline Message Requests
        pm.addIQProvider("offline","http://jabber.org/protocol/offline",new OfflineMessageRequest.Provider());

        // Offline Message Indicator
        pm.addExtensionProvider("offline",new OfflineMessageInfo.Provider());

        // Last Activity
        pm.addIQProvider("query","jabber:iq:last",new LastActivity.Provider());

        // User Search
        pm.addIQProvider("query","jabber:iq:search",new UserSearch.Provider());

        // SharedGroupsInfo
        pm.addIQProvider("sharedgroup","http://www.jivesoftware.org/protocol/sharedgroup",new SharedGroupsInfo.Provider());

        // JEP-33: Extended Stanza Addressing
        pm.addExtensionProvider("addresses","http://jabber.org/protocol/address",new MultipleAddressesProvider());

        // FileTransfer
        pm.addIQProvider("si","http://jabber.org/protocol/si",new StreamInitiationProvider());

        pm.addIQProvider("query","http://jabber.org/protocol/bytestreams",new BytestreamsProvider());

        // Privacy
        pm.addIQProvider("query","jabber:iq:privacy",new PrivacyProvider());

        pm.addIQProvider("command","http://jabber.org/protocol/commands",new AdHocCommandDataProvider());
        pm.addExtensionProvider("malformed-action",new AdHocCommandDataProvider.MalformedActionError());
        pm.addExtensionProvider("bad-locale",new AdHocCommandDataProvider.BadLocaleError());
        pm.addExtensionProvider("bad-payload",new AdHocCommandDataProvider.BadPayloadError());
        pm.addExtensionProvider("bad-sessionid",new AdHocCommandDataProvider.BadSessionIDError());
        pm.addExtensionProvider("session-expired",new AdHocCommandDataProvider.SessionExpiredError());

        pm.addIQProvider("query",new discoverInfoProvider());

        pm.addExtensionProvider("x",new DataFormProvider());

        // archive
        pm.addIQProvider("list",new ListIQProvider());

        pm.addIQProvider("chat",new ChatIQProvider());

    }
}

@HirenPatel

首先,您需要将存档插件添加到Openfire.
然后在客户端中的Xmpp连接之后,您必须注册您的提供程序,包括帮助检索聊天消息的提供程序:

pm.addIQProvider("list",new ListIQProvider());
pm.addIQProvider("chat",new ChatIQProvider());

然后你需要发送一个IQ节,如下所示:

final IQ iq = new IQ()
{

    @Override public String getChildElementXML()
    {

        return "<retrieve  xmlns=''urn:xmpp:archive'' with=''test@customOpenfire.com''><set xmlns=''http://jabber.org/protocol/rsm''><max xmlns=''http://jabber.org/protocol/rsm''>30</max></set> </retrieve>";

    }
};

iq.setType(IQ.Type.GET);
iq.setPacketID("987654321");

xmppConnection.sendPacket(iq);

Android不良做法:缺少Google Play服务更新的安全提供程序补救措施(小时):0.1

Android不良做法:缺少Google Play服务更新的安全提供程序补救措施(小时):0.1

如何解决Android不良做法:缺少Google Play服务更新的安全提供程序补救措施(小时):0.1?

清单文件中的第31行出现错误:

    android:name="com.assurant.inservice.ReassureApplication"
    android:hardwareAccelerated="true"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:largeHeap="true"
    android:launchMode="singleTask"
    android:roundIcon="@mipmap/ic_launcher"
    android:supportsRtl="true"
    android:theme="@style/AppTheme"
    android:networkSecurityConfig="@xml/network_security_config">-----**line no 31**

//内部网络安全配置

<base-config cleartextTrafficPermitted="true">
    <trust-anchors>
        <certificates src="system" />
    </trust-anchors>
</base-config>

build.gradle文件(应用程序级别)

依赖性{

implementation filetree(dir: ''libs'',include: [''*.jar''])
implementation ''androidx.appcompat:appcompat:1.2.0''
implementation ''androidx.constraintlayout:constraintlayout:2.0.1''
implementation ''androidx.legacy:legacy-support-v4:1.0.0''
implementation ''net.gotev:uploadservice:2.1''
implementation ''de.hdodenhof:circleimageview:2.2.0''
implementation ''com.google.android.material:material:1.0.0''
implementation ''androidx.annotation:annotation:1.1.0''
implementation ''androidx.lifecycle:lifecycle-extensions:2.2.0''
implementation ''com.google.firebase:firebase-analytics:17.5.0''
testImplementation ''junit:junit:4.12''
androidTestImplementation ''androidx.test.ext:junit:1.1.2''
androidTestImplementation ''androidx.test.espresso:espresso-core:3.3.0''
implementation ''com.intuit.sdp:sdp-android:1.0.3''
//noinspection GradleCompatible
implementation "com.android.support:cardview-v7:28.0.0"
//noinspection GradleCompatible
implementation ''com.android.support:recyclerview-v7:28.0.0''
implementation ''com.github.bumptech.glide:glide:4.8.0''
annotationProcessor ''com.github.bumptech.glide:compiler:4.4.0''
implementation ''org.jsoup:jsoup:1.11.3''
implementation "com.squareup.retrofit2:retrofit:2.4.0"
implementation "com.squareup.retrofit2:adapter-rxjava2:2.3.0"
implementation "com.squareup.retrofit2:converter-gson:2.4.0"
implementation "io.reactivex.rxjava2:rxandroid:2.1.1"
implementation "io.reactivex.rxjava2:rxandroid:2.1.1"
implementation ''com.squareup.okhttp3:logging-interceptor:4.8.1''
implementation ''com.jakewharton.retrofit:retrofit2-kotlin-coroutines-experimental-adapter:1.0.0''
implementation ''io.reactivex.rxjava2:rxjava:2.2.11''
implementation ''io.reactivex.rxjava2:rxandroid:2.1.1''
implementation ''com.google.code.ksoap2-android:ksoap2-android:3.6.0''
implementation ''com.davemorrissey.labs:subsampling-scale-image-view:3.10.0''
implementation ''com.toptoche.searchablespinner:searchablespinnerlibrary:1.3.1''
implementation ''com.google.firebase:firebase-crashlytics:17.2.1''
implementation "com.google.android.gms:play-services-base:17.4.0"
implementation "com.google.android.gms:play-services-vision:20.1.2"

//实现''com.google.android.gms:play-services:12.0.1'' 实施项目(路径:“:library”)

}

构建Gradle类级别:

依赖性{

    classpath ''com.android.tools.build:gradle:3.6.4''
    classpath ''com.google.firebase:firebase-crashlytics-gradle:2.2.1''
    classpath ''com.google.gms:google-services:4.3.3''

}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

我们今天的关于如何签署自定义JCE安全提供程序的分享已经告一段落,感谢您的关注,如果您想了解更多关于.net – 扩展自定义成员资格提供程序、5.0.0 迁移后,使用提供程序的多提供程序失败、android – IQ自定义提供程序无法识别、Android不良做法:缺少Google Play服务更新的安全提供程序补救措施(小时):0.1的相关信息,请在本站查询。

本文标签: