使用iapp实现QQ登陆 | 金条k的博客

LOADING

加载过慢请开启缓存 浏览器默认开启

若长时间无反应 可刷新后再尝试

使用iapp实现QQ登陆

2023/8/9 原创 iapp

准备的项目与控件

首先在iapp中创建一个项目,创建后点击”可视编程设计”,然后在”可视编程设计”中点击”控件”增加1个按扭控件,2个文本控件,1个图像控件,可以先删掉默认的控件,最后再创建一个名为”qq登陆”的myu界面
1

写入事件

1.按扭的”单击触屏事件”

fn qq登陆.调用QQ登陆("1107961986","iAppQQLoginDemo","all","com.tencent.mobileqq")

2.”界面事件”的”回调结果事件”

注:此代码部分需要更改

f(st_iT==null)
{
  tw("登录取消")
}
else
{
  java(bundle,st_iT,"android.content.Intent.getExtras")
  java(info,bundle,"android.os.BaseBundle.get","String","key_response")
  json(info,info)
  syso(info)
  //openid:QQ授权登陆后返回的用户在该应用的唯一标识
  json(info,"get","openid",openid)
  //access_token:QQ授权登陆后返回的访问令牌
  json(info,"get","access_token",access_token)
  t()
  {
    //腾讯QQ用户信息查询接口
    s url = "https://graph.qq.com/user/get_simple_userinfo"
    s ua = "Mozilla/5.0 (Linux; Android 7.0; MHA-AL00 Build/HUAWEIMHA-AL00; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/43.0.2357.134 Mobile Safari/537.36 LeBrowser/7.4.0"
    ss("appid=1107961986&access_token="+access_token+"&openid="+openid+"&Format=json",data)
    //访问腾讯官方接口获取QQ用户相关个人信息
    hs(url,data,"utf-8",null,"true",ua,back)
    //json解析相关返回参数
    json(back,back)
    syso(back)
    //nickname:用户在QQ空间的昵称
    json(back,"get","nickname",nickname)
    //figureurl:头像
    json(back,"get","figureurl_2",figureurl)
    ufnsui()
    {
      //把用户信息在下面这些控件中显示出来,需要自行更改
      us(文本1,"text",nickname) //QQ名称
      us(文本2,"text",openid) //cookie
      us(图像1,"src",figureurl) //QQ头像
      tw("登录成功")
    }
  }
}

3.编辑”qq登陆”的myu界面内容

fn 调用QQ登陆(app_id,app_name,scope,cmp)
javanew(bundle,"android.os.Bundle")
javanew(params,"android.os.Bundle")
javags(data1,null,"android.os.Build","MODEL")
javags(data2,null,"android.os.Build$VERSION","SDK")
javags(data3,null,"android.os.Build","RELEASE")
java(null,params,"android.os.BaseBundle.putString","String","status_os","String",data3)
java(null,params,"android.os.BaseBundle.putString","String","client_id","String",app_id)
java(null,params,"android.os.BaseBundle.putString","String","format","String","json")
java(null,params,"android.os.BaseBundle.putString","String","status_version","String",data2)
java(null,params,"android.os.BaseBundle.putString","String","oauth_app_name","String",app_name)
java(null,params,"android.os.BaseBundle.putString","String","status_machine","String",data1)
java(null,params,"android.os.BaseBundle.putString","String","pf","String","openmobile_android")
java(null,params,"android.os.BaseBundle.putString","String","sdkp","String","a")
java(null,params,"android.os.BaseBundle.putString","String","sdkv","String","3.3.0.lite")
java(null,params,"android.os.BaseBundle.putString","String","scope","String",scope)
java(null,params,"android.os.BaseBundle.putString","String","need_pay","String","1")
java(null,bundle,"android.os.Bundle.putBundle","String","key_params","android.os.Bundle",params)
java(null,bundle,"android.os.BaseBundle.putString","String","key_action","String","action_login")
java(null,bundle,"android.os.BaseBundle.putString","String","appeid","String",app_id)
java(null,bundle,"android.os.BaseBundle.putString","String","key_request_code","String","11101")
sit(intent,"classname",cmp,"com.tencent.open.agent.AgentActivity")
java(null,intent,"android.content.Intent.putExtras","android.os.Bundle",bundle)
uit(intent, "result", 0)
end fn

完结

全部写入后,可通过”运行”看效果,更多的登入信息可以在”调试”中看效果,最后打包既可

附:项目源码

点击下载