6.8-1 微博第三方授权,摘录 《自己研究了两天的》

Gemini 3.1 Pro网页版:打开即用的生产级AI工作流 AI工具的‘网页版’常被简化为功能阉割的体验入口,而真正意义上的网页原生AI应具备完整能力交付、零配置交互与多模态协同执行能力。其核心在于统一推理网关、内置可信工具链、百万级上下文动态管理及客户端智能渲染四大技术支柱,共同降低用户意图到AI响应之间的语义损耗。这类设计使模型不再停留于文本生成,而是深度融入文档分析、音视频理解、代码执行与创意生产等真实工程场景。Gemini 3.1 Pro网页版正是这一理念的落地代表——它将复杂AI能力封装为URL直达、登录即用、拖放即析的极简界面,让非技术人员也能调用函数调 阅读详情
新浪微博Android SDK为开发者提供了Oauth2.0授权认证,并集成SSO登录功能,


2.3 登录/注销按钮
微博SDK目前提供了两类登录按钮:一种是一键登陆按钮,一种是登陆/注销按钮,两者都是调用SSO登录接口。






1: 有用的网址:
weibo 开发者平台: http://open.weibo.com/
SDK 下载地址和文档 https://github.com/kodulf/weibo_android_sdk
填写应用的详细内容 http://open.weibo.com/apps/835613722/info/basic
主要的参考文档:   https://github.com/kodulf/weibo_android_sdk/blob/master/%E5%BE%AE%E5%8D%9AAndroid%E5%B9%B3%E5%8F%B0SDK%E6%96%87%E6%A1%A3V3.1.2.docx
移动过客户端接入: http://open.weibo.com/wiki/%E7%A7%BB%E5%8A%A8%E5%AE%A2%E6%88%B7%E7%AB%AF%E6%8E%A5%E5%85%A5


2:先从https://github.com/kodulf/weibo_android_sdk这里把工程下载下来


3:然后将weiboSDK导入进来,
第一步:在工程app/libs目录下放入weiboSDKCore_3.1.2.jar包,
在src/main/目录下新建jniLibs目录,放入weibo_android_sdk-master\demo-src\WeiboSDKDemo\libs目录下的所有的包含了so文件的目录 
第二步:导入jar包。菜单栏选择File->Project Structor->Modules->Dependencies,点击+号,选择File dependency,选择jar包导入。 


4:签名要注意


Build->Generate Signed Apk->Create
生成在工程目录下面,放在app下面,
起一个名字weibo,
确定密码
android


要求一点运行,就使用这个签名报
点击F4,app->Signing
KeyAlias->android
KeyPassword->android
Store File->写相对路劲,因为放在app下面的。所以直接qswiki.jks
Store Password->android


BuildTypes-》debug、release 都选择刚才的配置作为签名配置。


5:安装https://github.com/sinaweibosdk/weibo_android_sdk
然后在安装我们的项目,
输入Android包名 com.gp7.gp.hellogp7
这样就得到签名了:Android签名:83b9e385d67d6aebc206605b38443119,


6:修改weibo 上面应用的参数,输入上面的包名和签名以及应用地址:http://47.88.30.198/


7:在清单文件添加
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />


8:参考Demo里面的内容,
先写Contants
然后写AccessTokenKeeper,在这里,可以用来存储AccessToken,获取AccessToken
再然后写WBAuthActivity,




------------------------------------------
清单文件:
        <activity
            android:name="com.sina.weibo.sdk.component.WeiboSdkBrowser"
            android:configChanges="keyboardHidden|orientation"
            android:windowSoftInputMode="adjustResize"
            android:exported="false" >
        </activity>
<activity android:name=".WBAuthActivity"></activity>


------------------------------------------
public interface Constants {
    public static final String APP_KEY      = "835613722";  // 应用的APP_KEY
    public static final String REDIRECT_URL = "https://api.weibo.com/oauth2/default.html";// 应用的回调页
    public static final String SCOPE =   // 应用申请的高级权限
            "email,direct_messages_read,direct_messages_write,"
                    + "friendships_groups_read,friendships_groups_write,statuses_to_me_read,"
                    + "follow_app_official_microblog," + "invitation_write";
}


------------------------------------------
AccessTokenKeeper:
public class AccessTokenKeeper {
    private static final String PREFERENCES_NAME = "com_weibo_sdk_android";


    private static final String KEY_UID           = "uid";
    private static final String KEY_ACCESS_TOKEN  = "access_token";
    private static final String KEY_EXPIRES_IN    = "expires_in";
    private static final String KEY_REFRESH_TOKEN    = "refresh_token";








    /**
     * 保存 Token 对象到 SharedPreferences。
     *
     * @param context 应用程序上下文环境
     * @param token   Token 对象
     */
    public static void writeAccessToken(Context context, Oauth2AccessToken token) {
        if (null == context || null == token) {
            return;
        }


        SharedPreferences pref = context.getSharedPreferences(PREFERENCES_NAME, Context.MODE_APPEND);
        SharedPreferences.Editor editor = pref.edit();
        editor.putString(KEY_UID, token.getUid());
        editor.putString(KEY_ACCESS_TOKEN, token.getToken());
        editor.putString(KEY_REFRESH_TOKEN, token.getRefreshToken());
        editor.putLong(KEY_EXPIRES_IN, token.getExpiresTime());
        editor.commit();
    }


    /**
     * 从 SharedPreferences 读取 Token 信息。
     *
     * @param context 应用程序上下文环境
     *
     * @return 返回 Token 对象
     */
    public static Oauth2AccessToken readAccessToken(Context context) {
        if (null == context) {
            return null;
        }


        Oauth2AccessToken token = new Oauth2AccessToken();
        SharedPreferences pref = context.getSharedPreferences(PREFERENCES_NAME, Context.MODE_APPEND);
        token.setUid(pref.getString(KEY_UID, ""));
        token.setToken(pref.getString(KEY_ACCESS_TOKEN, ""));
        token.setRefreshToken(pref.getString(KEY_REFRESH_TOKEN, ""));
        token.setExpiresTime(pref.getLong(KEY_EXPIRES_IN, 0));


        return token;
    }


    /**
     * 清空 SharedPreferences 中 Token信息。
     *
     * @param context 应用程序上下文环境
     */
    public static void clear(Context context) {
        if (null == context) {
            return;
        }


        SharedPreferences pref = context.getSharedPreferences(PREFERENCES_NAME, Context.MODE_APPEND);
        SharedPreferences.Editor editor = pref.edit();
        editor.clear();
        editor.commit();
    }
}
--------------------------------------------------
package com.gp7.gp.hellogp7;


import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.os.PersistableBundle;
import android.text.TextUtils;
import android.text.method.ScrollingMovementMethod;
import android.view.View;
import android.widget.TextView;
import android.widget.Toast;


import com.sina.weibo.sdk.auth.AuthInfo;
import com.sina.weibo.sdk.auth.Oauth2AccessToken;
import com.sina.weibo.sdk.auth.WeiboAuthListener;
import com.sina.weibo.sdk.auth.sso.SsoHandler;
import com.sina.weibo.sdk.exception.WeiboException;


import org.w3c.dom.Text;


import java.text.SimpleDateFormat;


/**
 * Created by XUE on 2016/1/18.
 */
public class WBAuthActivity extends Activity {


    private static final String TAG = "weibosdk";


    /** 显示认证后的信息,如 AccessToken */
    private TextView mTokenText;


    private AuthInfo mAuthInfo;


    /** 封装了 "access_token","expires_in","refresh_token",并提供了他们的管理功能  */
    private Oauth2AccessToken mAccessToken;


    /** 注意:SsoHandler 仅当 SDK 支持 SSO 时有效 */
    private SsoHandler mSsoHandler;


    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_auth);


        // 获取 Token View,并让提示 View 的内容可滚动(小屏幕可能显示不全)
        mTokenText = (TextView) findViewById(R.id.token_text_view);
        TextView hintView = (TextView) findViewById(R.id.obtain_token_hint);
        hintView.setMovementMethod(new ScrollingMovementMethod());


        // 创建微博实例
        //mWeiboAuth = new WeiboAuth(this, Constants.APP_KEY, Constants.REDIRECT_URL, Constants.SCOPE);
        // 快速授权时,请不要传入 SCOPE,否则可能会授权不成功
        mAuthInfo = new AuthInfo(this, Constants.APP_KEY, Constants.REDIRECT_URL, Constants.SCOPE);
        mSsoHandler = new SsoHandler(WBAuthActivity.this, mAuthInfo);


        findViewById(R.id.obtain_token_via_sso).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {


                mSsoHandler.authorizeClientSso(new AuthListener());
            }
        });


        // 手机短信授权
        //  title 短信注册页面title,可选,不传时默认为""验证码登录""。此处WeiboAuthListener 对象 listener
        //可以是和sso 同一个 listener   回调对象 也可以是不同的。开发者根据需要选择
        findViewById(R.id.obtain_token_via_mobile).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                mSsoHandler.registerOrLoginByMobile("验证码登录",new AuthListener());
            }
        });




        // SSO 授权, 仅Web
        findViewById(R.id.obtain_token_via_web).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                mSsoHandler.authorizeWeb(new AuthListener());
            }
        });


        // SSO 授权, ALL IN ONE   如果手机安装了微博客户端则使用客户端授权,没有则进行网页授权
        findViewById(R.id.obtain_token_via_signature).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                mSsoHandler.authorize(new AuthListener());
            }
        });




        // 用户登出
        findViewById(R.id.logout).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                AccessTokenKeeper.clear(getApplicationContext());
                mAccessToken = new Oauth2AccessToken();
                updateTokenView(false);
            }
        });




        // 从 SharedPreferences 中读取上次已保存好 AccessToken 等信息,
        // 第一次启动本应用,AccessToken 不可用
        mAccessToken = AccessTokenKeeper.readAccessToken(this);
        if (mAccessToken.isSessionValid()) {
            updateTokenView(true);
        }


    }






    class AuthListener implements WeiboAuthListener {


        @Override
        public void onComplete(Bundle values) {
            // 从 Bundle 中解析 Token
            mAccessToken = Oauth2AccessToken.parseAccessToken(values);
            //从这里获取用户输入的 电话号码信息
            String  phoneNum =  mAccessToken.getPhoneNum();
            if (mAccessToken.isSessionValid()) {
                // 显示 Token
                updateTokenView(false);


                // 保存 Token 到 SharedPreferences
                AccessTokenKeeper.writeAccessToken(WBAuthActivity.this, mAccessToken);
                Toast.makeText(WBAuthActivity.this,
                        R.string.weibosdk_demo_toast_auth_success, Toast.LENGTH_SHORT).show();
            } else {
                // 以下几种情况,您会收到 Code:
                // 1. 当您未在平台上注册的应用程序的包名与签名时;
                // 2. 当您注册的应用程序包名与签名不正确时;
                // 3. 当您在平台上注册的包名和签名与您当前测试的应用的包名和签名不匹配时。
                String code = values.getString("code");
                String message = getString(R.string.weibosdk_demo_toast_auth_failed);
                if (!TextUtils.isEmpty(code)) {
                    message = message + "\nObtained the code: " + code;
                }
                Toast.makeText(WBAuthActivity.this, message, Toast.LENGTH_LONG).show();
            }
        }


        @Override
        public void onCancel() {
            Toast.makeText(WBAuthActivity.this,
                    R.string.weibosdk_demo_toast_auth_canceled, Toast.LENGTH_LONG).show();
        }


        @Override
        public void onWeiboException(WeiboException e) {
            Toast.makeText(WBAuthActivity.this,
                    "Auth exception : " + e.getMessage(), Toast.LENGTH_LONG).show();
        }
    }


    /**
     * 显示当前 Token 信息。
     *
     * @param hasExisted 配置文件中是否已存在 token 信息并且合法
     */
    private void updateTokenView(boolean hasExisted) {
        String date = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss").format(
                new java.util.Date(mAccessToken.getExpiresTime()));
        String format = getString(R.string.weibosdk_demo_token_to_string_format_1);
        mTokenText.setText(String.format(format, mAccessToken.getToken(), date));


        String message = String.format(format, mAccessToken.getToken(), date);
        if (hasExisted) {
            message = getString(R.string.weibosdk_demo_token_has_existed) + "\n" + message;
        }
        mTokenText.setText(message);
    }


}
-----------------------------------------------------------


<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".WBAuthActivity" >
    
    <Button
        android:id="@+id/obtain_token_via_sso"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="left|center_vertical"
        android:text="@string/weibosdk_demo_obtain_token_via_sso" />
    
    <Button
        android:id="@+id/obtain_token_via_web"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="10dp"
        android:gravity="left|center_vertical"
        android:text="@string/weibosdk_demo_obtain_token_via_web" />
    
    <Button
        android:id="@+id/obtain_token_via_signature"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="10dp"
        android:gravity="left|center_vertical"
        android:text="@string/weibosdk_demo_obtain_token_via_sso_all_in_one" />
    
    <Button
        android:id="@+id/logout"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="10dp"
        android:gravity="left|center_vertical"
        android:text="@string/weibosdk_demo_obtain_token_logout" />
    
    <Button
        android:id="@+id/obtain_token_via_code"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="10dp"
        android:gravity="left|center_vertical"
        android:visibility="gone"
        android:text="@string/weibosdk_demo_obtain_token_via_code" />    
    
    <Button
        android:id="@+id/obtain_token_via_mobile"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="left|center_vertical"
        android:layout_marginTop="10dip"
        android:text="@string/weibosdk_demo_obtain_token_via_mobile" />
    
    
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="10dp"
        android:textSize="16sp"
        android:textStyle="bold"
        android:text="@string/weibosdk_demo_token_info" />


    <TextView
        android:id="@+id/token_text_view"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:textSize="12sp" />
    


    <TextView
        android:id="@+id/obtain_token_hint"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="20dp"
        android:layout_marginBottom="10dp"
        android:textSize="12sp"
        android:scrollbars="vertical"
        android:maxLines="1000"
        android:text="@string/weibosdk_demo_obtain_token_hint" />


    <ImageView
        android:id="@+id/user_icon"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/ic_logo" />


</LinearLayout>


-----------------------------------------------
<resources>
    <string name="app_name">HelloGP7</string>


    <!-- 功能列表 -->
    <string name="weibosdk_demo_feature_oauth">微博授权</string>
    <string name="weibosdk_demo_feature_share">分享到微博</string>
    <string name="weibosdk_demo_feature_pay">微博支付</string>
    <string name="weibosdk_demo_social_component">社会化组件</string>
    <string name="weibosdk_demo_feature_login_logout">登录注销按钮</string>
    <string name="weibosdk_demo_feature_nick_name_login">昵称登录</string>
    <string name="weibosdk_demo_feature_open_api">开放接口(Open API)</string>
    <string name="weibosdk_demo_feature_open_device_id">获取设备 ID</string>
    <string name="weibosdk_demo_feature_scheme_page">scheme 调用微博指定页面</string>


    <string name="weibosdk_demo_feature_game_page">游戏接口 </string>


    <!-- 获取 Token -->
    <string name="weibosdk_demo_obtain_token_via_sso_all_in_one">SSO 授权(ALL IN ONE)</string>
    <string name="weibosdk_demo_obtain_token_via_web">SSO 授权(Web)</string>
    <string name="weibosdk_demo_obtain_token_via_sso">SSO 授权(仅客户端)</string>
    <string name="weibosdk_demo_obtain_token_via_mobile">手机短信注册登录</string>
    <string name="weibosdk_demo_obtain_token_via_signature">Web 授权</string>
    <string name="weibosdk_demo_obtain_token_via_quick_sso">通过微博客户端快速授权</string>
    <string name="weibosdk_demo_obtain_token_via_code">通过 Code 获取 Token</string>
    <string name="weibosdk_demo_obtain_token_logout">用户登出</string>
    <string name="weibosdk_demo_token_info">Token 信息:</string>
    <string name="weibosdk_demo_token_has_existed">Token 仍在有效期内,无需再次登录。</string>
    <string name="weibosdk_demo_obtain_token_hint"><b>请注意:</b>\n<li>SSO 登录需要微博客户端的支持,目前仅 3.0.0 及以上微博客户端版本支持 SSO;如果未安装,将自动转为 Oauth2.0 Web 授权认证(即第一种认证方式)</li>\n<li>如果您通过方式一和方式二获取不到 Token,而是获取到 code,那说明您的包名和签名存在问题,请到开放平台注册包名和签名。详情请查看 FAQ 文档</li></string>
    <string name="weibosdk_demo_obtain_token_via_sso_hint">使用 SSO 登录前,请检查手机上是否已经安装新浪微博客户端,目前仅 3.0.0 及以上微博客户端版本支持 SSO;如果未安装,将自动转为 Oauth2.0 进行认证。</string>
    <string name="weibosdk_demo_obtain_token_via_code_hint"><b>请注意:</b>基于以下几点原因,您可能不想使用前面的两种授权方式:\n<li>出于安全性的考虑,您不信任目前使用应用的包名和签名来获取 Token 的方式</li>\n<li>您不想安装微博客户端</li>\n您可以自行通过 Code 来获取 Token。通过这种方式需要使用到 APP_SECRET,请务必妥善保管好自己的 APP_SECRET,<b>不要直接暴露在程序中,泄露有风险</b>。\n<b>更多细节请查看:</b><a href="http://open.weibo.com/wiki/%E6%8E%88%E6%9D%83%E6%9C%BA%E5%88%B6%E8%AF%B4%E6%98%8E#Web.E5.BA.94.E7.94.A8.E7.9A.84.E9.AA.8C.E8.AF.81.E6.8E.88.E6.9D.83">验证授权步骤</a></string>
    <string name="weibosdk_demo_step_to_obtain_code">第一步:获取 Code</string>
    <string name="weibosdk_demo_step_to_obtain_token">第二步:通过 Code 获取 Token</string>
    <string name="weibosdk_demo_code_text_hint">第一步获取到的 Code:(一次性有效)</string>
    <string name="weibosdk_demo_token_text_hint">第二步获取到的 Token:</string>
    <string name="weibosdk_demo_token_to_string_format">Token:%1$s \nRefresh Token:%2$s \nexpires_in:%3$s</string>
    <string name="weibosdk_demo_token_to_string_format_1">Token:%1$s \n有效期:%2$s</string>
    <string name="weibosdk_demo_toast_auth_success">授权成功</string>
    <string name="weibosdk_demo_toast_auth_failed">授权失败</string>
    <string name="weibosdk_demo_toast_auth_canceled">取消授权</string>
    <string name="weibosdk_demo_toast_obtain_code_success">获取 Code 成功</string>
    <string name="weibosdk_demo_toast_obtain_code_failed">获取 Code 失败</string>
    <string name="weibosdk_demo_toast_obtain_token_success">获取 Token 成功</string>
    <string name="weibosdk_demo_toast_obtain_token_failed">获取 Token 失败</string>


    <string name="weibosdk_demo_game_achievement_add">后台游戏成就对象入库</string>
    <string name="weibosdk_demo_game_achievement_update">后台游戏成就对象更新</string>
    <string name="weibosdk_demo_game_relation_add">用户获得游戏成就关系入库</string>
    <string name="weibosdk_demo_game_relation_update">用户获得游戏成就关系更新</string>


    <string name="weibosdk_demo_game_score_add">得分关系入库</string>
    <string name="weibosdk_demo_game_read_player_score">读取玩家游戏分数</string>
    <string name="weibosdk_demo_game_read_player_friend_score">读取玩家好友的游戏分数 </string>
    <string name="weibosdk_demo_game_read_achievement_user_gain">读取玩家在某个游戏下的成就 </string>
    <string name="weibosdk_demo_game_invatation_friend_list">邀请好友列表 </string>
    <string name="weibosdk_demo_game_invatation_one_friend">邀请好友  单个h5页面 </string>
    <string name="weibosdk_demo_game_result_msg">接口请求结果 </string>


    <!-- 分享微博入口界面 -->
    <string name="weibosdk_demo_is_support_sdk">当前微博客户端是否支持 SDK</string>
    <string name="weibosdk_demo_register_app_to_weibo">注册应用到微博</string>
    <string name="weibosdk_demo_share_to_weibo">分享到微博(仅客户端)</string>
    <string name="weibosdk_demo_share_to_weibo_all_in_one">分享到微博(ALL IN ONE)</string>
    <string name="weibosdk_demo_register_app_to_weibo_hint"><li>如何查看是否注册成功?打开微博客户端->点击发搏器->点击右下角的+号->点击添加应用,看看能否看到该 DEMO 应用。</li>\n<li>当您的应用成功的注册到微博后,您可以通过从微博客户端唤起您的应用,实现分享(即微博附件栏集成分享)。</li>\n<li>该附件栏集成分享权限需要合作申请。<b>详情请见:</b><a href="http://open.weibo.com/wiki/%E7%A7%BB%E5%8A%A8%E5%AE%A2%E6%88%B7%E7%AB%AF%E6%8E%A5%E5%85%A5">2、微博原生分享 --> b) 集成分享</a></li>\n<b>请注意:</b>目前该 DEMO 应用已申请过权限,默认情况下,第三方应用没有对应权限。</string>
    <string name="weibosdk_demo_obtain_client_abstract_info_hint">当前微博客户端信息如下:</string>
    <string name="weibosdk_demo_is_installed_weibo">1. 是否安装了微博客户端?</string>
    <string name="weibosdk_demo_support_api_level">2. 当前微博客户端支持的 SDK 版本号:</string>
    <string name="weibosdk_demo_support_api_level_hint"><b>请注意:</b>\n<li>目前第三方分享微博需要客户端的支持,请确保已安装微博客户端。如果不想使用微博客户端进行分享,请参照:<a href="http://open.weibo.com/wiki/2/statuses/upload">OpenAPI</a></li>\n<li>SupportApi >= 10351时,微博客户端支持同时分享多条数据,即同时可以分享文本、图片以及其它媒体资源(网页、音乐、视频、声音)中的一种;</li>\n<li>SupportApi &lt; 10351,微博客户端只支持分享单条数据,即只能分享文本、图片、网页、音乐、视频中的一种,不支持声音(Voice)消息;</li>\n<li>SupportApi = -1,微博客户端不支持 SDK 分享或微博客户端未安装或微博客户端是非官方版本。</li></string>
    <string name="weibosdk_demo_not_support_api_hint">微博客户端不支持 SDK 分享或微博客户端未安装或微博客户端是非官方版本。</string>
    <string name="weibosdk_demo_has_installed_weibo">\t已安装</string>
    <string name="weibosdk_demo_has_not_installed_weibo">\t未安装</string>
    <string name="weibosdk_demo_cancel_download_weibo">\t取消下载</string>
    <string name="weibosdk_demo_toast_register_app_to_weibo">已注册,请打开微博客户端查看是否注册成功。</string>


    <!-- 分享微博主界面 -->
    <string name="weibosdk_demo_share_to_weibo_title">从本应用->微博->本应用</string>
    <string name="weibosdk_demo_share_to_weibo_title_all_in_one">分享微博ALL IN ONE</string>
    <string name="weibosdk_demo_share_from_weibo_title">从微博->本应用->微博</string>
    <string name="weibosdk_demo_share_default_text">欢迎使用新浪微博 SDK</string>
    <string name="weibosdk_demo_share_to">分  享</string>
    <string name="weibosdk_demo_share_text_title">分享文字</string>
    <string name="weibosdk_demo_share_image_title">分享图片</string>
    <string name="weibosdk_demo_share_webpage_title">分享网页</string>
    <string name="weibosdk_demo_share_music_title">分享音乐</string>
    <string name="weibosdk_demo_share_video_title">分享视频</string>
    <string name="weibosdk_demo_share_voice_title">分享声音</string>


    <!-- 分享所用的测试数据 -->
    <string name="weibosdk_demo_share_webpage_desc">网页描述:XXX</string>
    <string name="weibosdk_demo_share_music_desc">音乐描述:XXX</string>
    <string name="weibosdk_demo_share_video_desc">视频描述:XXX</string>
    <string name="weibosdk_demo_share_voice_desc">声音描述:XXX</string>
    <string name="weibosdk_demo_app_url">https://github.com/mobileresearch/weibo_android_sdk/blob/master/WeiboSDKDemo.apk</string>
    <string name="weibosdk_demo_test_webpage_url">http://news.sina.com.cn/c/2013-10-22/021928494669.shtml</string>
    <string name="weibosdk_demo_test_music_url">http://music.sina.com.cn/yueku/i/2850305.html</string>
    <string name="weibosdk_demo_test_video_url">http://video.sina.com.cn/p/sports/cba/v/2013-10-22/144463050817.html</string>
    <!-- NOTE: Voice 的 URL 与 Music 一样 -->
    <string name="weibosdk_demo_test_voice_url">http://music.sina.com.cn/yueku/i/2850305.html</string>


    <!-- 分享示例模板 -->
    <string name="weibosdk_demo_share_text_template">我正在使用微博客户端发博器分享文字</string>
    <string name="weibosdk_demo_share_webpage_template">【%1$s】(分享自 WeiboSDKDemo %2$s)</string>
    <string name="weibosdk_demo_share_music_template">我正在听 %1$s(分享自 WeiboSDKDemo %2$s)</string>
    <string name="weibosdk_demo_share_video_template">我正在看 %1$s(分享自 WeiboSDKDemo %2$s)</string>
    <string name="weibosdk_demo_share_voice_template">我分享了 %1$s(分享自 WeiboSDKDemo %2$s)</string>
    <string name="weibosdk_demo_share_webpage_demo">XXX 新闻</string>
    <string name="weibosdk_demo_share_music_demo">XXX 音乐</string>
    <string name="weibosdk_demo_share_video_demo">XXX 视频</string>
    <string name="weibosdk_demo_share_voice_demo">XXX 声音</string>


    <!-- 分享成功失败的 Toast -->
    <string name="weibosdk_demo_toast_share_success">分享成功</string>
    <string name="weibosdk_demo_toast_share_failed">分享失败</string>
    <string name="weibosdk_demo_toast_share_canceled">取消分享</string>
    <string name="weibosdk_demo_toast_share_response_args_success">收到微博发起的请求成功</string>
    <string name="weibosdk_demo_toast_share_response_args_failed">收到客户端请求消息失败</string>


    <!-- 微博支付 -->
    <string name="weibosdk_demo_weibo_pay_get_order_uri">http://180.149.139.199:8081/v2/pay/paydemo</string>
    <string name="weibosdk_demo_weibo_pay_get_order">获取订单</string>
    <string name="weibosdk_demo_weibo_pay">微博支付</string>
    <string name="weibosdk_demo_support_weibo_pay"> 当前微博客户端是否支持支付?</string>


    <!-- 登录/注销按钮 -->
    <string name="weibosdk_demo_login_hint"><b>一键登录按钮:</b>\n(有以下三种样式,第一种为默认效果)</string>
    <string name="weibosdk_demo_login_with_text_hint"><b>登录/注销按钮:</b>\n(有以下两种样式,第一种为默认效果,可修改)</string>
    <string name="weibosdk_demo_logout_hint"><b>注销按钮:</b>\n(注意:该按钮不再进行封装,第三方可直接调用 LogoutAPI,<b>一个 token 不能重复注销多次</b>)</string>
    <string name="weibosdk_demo_logout">注销</string>
    <string name="weibosdk_demo_logout_success">已注销</string>
    <string name="weibosdk_demo_logout_failed">注销失败</string>
    <string name="weibosdk_demo_logout_failed_1">注销失败,请检查 Token 是否正确(一个 token 不能重复注销多次)</string>


    <!-- OpenAPI -->
    <string name="weibosdk_demo_openapi_revoke_auth_success">授权回收成功</string>
    <string name="weibosdk_demo_openapi_revoke_auth_failed">授权回收失败</string>
    <string name="weibosdk_demo_openapi_invite_uid_hint">请输入被邀请人的uid</string>
    <string name="weibosdk_demo_openapi_invite">邀请</string>
    <string name="weibosdk_demo_openapi_invite_success">发送邀请成功</string>
    <string name="weibosdk_demo_openapi_invite_failed">发送邀请失败</string>
    <string name="weibosdk_demo_access_token_is_empty">Access Token 不存在,请先登录</string>


    <!-- scheme 调用 -->
    <string name="goto_profile">查看某人主页面</string>
    <string name="goto_home_message">进入微博主页消息页面</string>
    <string name="goto_hot_weibo">进入热门微博</string>
    <string name="goto_hot_topic">进入热门话题</string>
    <string name="goto_send_weibo">进入发微薄页面</string>




    <!-- 其它 -->
    <string name="weibosdk_demo_launch_post_weibo">发送微博</string>
    <string name="weibosdk_demo_launch_nearby_people">周边的人</string>
    <string name="weibosdk_demo_launch_nearby_weibo">周边的微博</string>
    <string name="weibosdk_demo_launch_user_info">个人资料</string>
    <string name="weibosdk_demo_launch_page_info">位置(page)介绍面</string>
    <string name="weibosdk_demo_launch_page_product_list">图书(page)产品列表</string>
    <string name="weibosdk_demo_launch_page_user_list">位置用户列表</string>
    <string name="weibosdk_demo_launch_page_weibo_list">位置微博列表</string>
    <string name="weibosdk_demo_launch_page_photo_list">位置图片列表</string>
    <string name="weibosdk_demo_launch_page_detail_info">位置详细资料页</string>
    <string name="weibosdk_demo_launch_user_trends">话题列表</string>
    <string name="weibosdk_demo_launch_weibo_browser">内置浏览器打开</string>
    <string name="weibosdk_demo_launch_weibo_map">地图页面</string>
    <string name="weibosdk_demo_launch_near_photo_list">xy周边热图</string>
    <string name="weibosdk_demo_launch_poi_photo_list">poi周边热图</string>
    <string name="weibosdk_demo_launch_poi_page">POI页面</string>
    <string name="weibosdk_demo_launch_mblog_detail">查看微博正文</string>
    <string name="weibosdk_demo_launch_qrcode">扫描二维码界面</string>




</resources>













Gemini Mac原生App:深度集成macOS的AI工作流引擎 AI助手不再只是对话窗口,而是嵌入操作系统底层的智能协作者。理解‘原生应用’的本质,需从系统级API调用、跨应用上下文感知和本地数据管道三大原理切入——它通过NSRunningApplication实时识别当前软件,借助NSPasteboard自动聚合剪贴板与文档元数据,并依托设备密钥加密实现隐私优先的本地化处理。这种技术价值在于将AI从‘任务响应者’升级为‘状态预判者’,显著压缩窗口切换与上下文重建时间,在开发者调试、设计师协作、运营文案生成等高频场景中形成真正可落地的工作流闭环。 阅读详情

相关推荐

新浪微博第三方认证接口开发文档以及实例

新浪微博第三方认证接口 开发文档里面有小的案例 可以参考

android迅雷包名,迅雷(com.xunlei.downloadprovider) - 7.21.1.7474 - 应用 - 酷安

权限信息· com.xiaomi.permission.AUTH_SERVICE· 查找设备上的帐户· android.permission.ACCESS_DOWNLOAD_MANAGER· 访问USB存储设备的文件系统· com.android.browser.permission.READ_HISTORY_BOOKMARKS· 完全的网络访问权限· 防止手机休眠· 查看WLAN连接· 读取手机...

weixin_28951059的博客 5万+

新浪微博第三方客户端(个人简单版)

个人开发的新浪微博客户端,比较简单,结构和性能也不是很好,有需要的可以加载。

新浪微博三方登录

三方登录 一,新浪微博三方登录 1,在用户登录时,可以使用第三方的程序登录,例如qq,微信,新浪微博等方式,可以提高登录的效率。这里使用的是微博的第三方登录。 2,首先需要先到微博开放平台,申请一个开发者的应用。 在登录后,选择网站那接口,申请应用,直接输入应用名称即可。 3,应用里添加授权设置 点击应用信息,点击高级信息,在点击右上角的编辑, 添加授权回调页(也就是授权成功后跳转的页面),和取消授权回调页(也就是在授权时,取消后跳转的页面) 4,到文档页获取授权认证 跳转页面后,找到接口文档,在接口文档中

weixin_49314397的博客 2826

ADS SerDes仿真实战:深入解析Tx_Diff均衡器(EQ)参数对眼图质量的影响

本文以ADS仿真平台为基础,深入解析了SerDes设计中Tx_Diff均衡器(EQ)参数对信号完整性的核心影响。通过实战演示,详细对比了去加重(De-emphasis)与FIR抽头系数两种调节模式,揭示了它们如何有效对抗信道损耗与码间干扰,从而显著改善眼图的高度、宽度与抖动性能,为高速串行链路设计提供关键调优思路。

weixin_29230901的博客 225

【数学模型】灰色关联分析

数学模型-灰色关联分析

suic009的博客 1万+

以微博为例进行Oauth2进行第三方授权登录

以微博为例进行Oauth2进行第三方授权登录

xushuai2333333的博客 1844

无人机散热系统设计:从材料选择到智能调控的全面解析

本文全面解析无人机散热系统设计,从材料选择到智能调控,探讨了导热界面材料、轻量化散热结构和智能调控算法的应用。通过实战案例,展示了如何在极端环境下优化散热性能,提升无人机的工作效率和可靠性。

weixin_42567279的博客 429

调用新浪微博第三方登陆授权流程

微博登陆流程 第一步拿到code参数, 第二步拿到token令牌 第三步,调用资源服务器的接口, 并获取资源 就可以拿到用户的信息了, 如获取用户名的信息里存到数据库里的或者存到session里,就可以用了, 用户登陆成功后,返回json格式的数据,可以官方的文档里看一下具体返回都是什么数据 把返回来的json格式的数组,转换成数组,再取里面的需要要

Haima的博客 4579

PyTorch版Unet训练后别只看loss:手把手教你计算并可视化多类别语义分割的mIoU(附完整代码)

本文详细介绍了在PyTorch中使用Unet模型进行多类别语义分割后,如何计算和可视化mIoU(mean Intersection over Union)以全面评估模型性能。通过完整的代码示例和实用技巧,帮助开发者从loss优化转向更精准的区域分割评估,特别适用于医学图像分析等关键场景。

weixin_30906185的博客 435

【异常】Claude Code CLI 模型调用异常 There‘s an issue with the selected model (claude-sonnet-4-6). It may not

摘要: Claude Code CLI v2.1.45版本存在适配缺陷,导致调用claude-sonnet-4-6模型时触发"模型不存在"的误报错误(跨Windows/Linux平台)。该问题为版本回归类异常,非模型或账户权限问题。解决方案包括:1) 校验模型名称格式为claude-sonnet-4-6;2) 降级至v2.1.34或等待官方修复;3) 检查API配置有效性;4) 通过CLI交互界面手动选择模型;5) 临时切换同系列可用模型。官方已确认该bug并将发布修复版本。

奶爸的编程之路,也就一周冷个三天 6378

精品店如何利用QClaw+Skills做GEO运营:ima知识库搭建×内容创作×自媒体平台分发策略

第一,礼品推荐是精品店GEO的杀手级内容——”送什么礼物有品位”是精品店目标用户最关心的问题,也是豆包最愿意引用的内容类型。第二,小红书是精品店的第一优先级平台——拾光超过60%的精准流量来自小红书,其内容调性与精品店的定位高度吻合。

253

【ESP32接入国产大模型之Deepseek】

🥳🥳🥳现在,我们在本教程中,您学习了如何使用ESP32接入语言大模型之Deepseek。🛹🛹🛹从而实现对外部世界进行感知,充分认识这个有机与无机的环境,后期会持续分享esp32跑freertos实用案列🥳🥳🥳科学地合理地进行创作和发挥效益,然后为人类社会发展贡献一点微薄之力。🤣🤣🤣如果你有任何问题,可以通过q group(945348278)加入鹏鹏小分队,期待与你思维的碰撞😘😘😘鸣谢B站UP星汇极客ESP32对接DeepSeek API,实现AI大模型交互功能。

vor234的博客 1万+

连享会-Python爬虫与文本分析专题 (2019.5.17-19)

连享会-Python爬虫与文本分析专题研讨班 文章目录连享会-Python爬虫与文本分析专题研讨班1. 课程概况2. 嘉宾简介3. 授课内容3.1 课程介绍为什么要学爬虫和文本分析?为什么要学机器学习算法?为什么要学 Python 语言?我们将学到什么?3.2 课程大纲第 1 讲 Python 基础(3小时)第 2 讲 Python 进阶(3小时)第 3 讲 Python 实现爬虫(3小时)第 ...

Stata连享会 3433

【62】OpenCV C++实战篇——【项目实战】OpenCV C++ 精准定位“十字刻度尺”中心坐标,过滤图片中的干扰,精准获取十字交点坐标

本文针对工业相机拍摄的2000万像素图像中十字刻度尺的精确定位问题进行了研究。面对图像较暗、存在红黄干扰、记号笔涂抹及细节模糊等难点,提出了一种基于霍夫变换的解决方案。通过灰度化、反色、二值化预处理后,对比分析了多尺度霍夫直线(HoughLines)和渐进概率霍夫线段(HoughLinesP)两种方法的定位效果。实验结果表明,HoughLinesP由于具有最小线段长度和间隙约束,在直线贴合度和交点定位精度上表现更优,其返回的线段端点坐标也更便于后续处理。该研究为工业视觉中微小目标的精确定位提供了实用参考。

程序员,他们想的是什么?他们想的永远都是技术,他们崇尚的也永远都是技术。 975

飞牛fnNAS免费内网穿透之zerotier篇

本文介绍了如何通过ZeroTier实现飞牛NAS的远程文件共享。首先,用户需要在ZeroTier官网注册账号并创建虚拟局域网。接着,分别在Windows和飞牛NAS上安装ZeroTier客户端,并通过SSH登录飞牛NAS进行配置。安装完成后,用户可以在ZeroTier页面中授权设备加入虚拟局域网。最后,通过Windows的“网上邻居”功能访问飞牛NAS的共享文件夹,实现跨局域网的文件共享。这种方法不仅适用于文件共享,还可以用于打印机共享和远程桌面连接。

dgnankai的专栏 2465

AI舆情监测系统:多模态技术与实时分析实践

舆情监测系统通过结合自然语言处理(NLP)和计算机视觉(CV)技术,实现对全网文本、图像、视频内容的多模态分析。这类系统通常采用微服务架构,集成分布式爬虫、情感分析、实体识别等模块,其核心技术价值在于将传统人工数小时完成的舆情分析缩短至分钟级。在工程实现上,ALBERT+BiLSTM混合架构能有效平衡模型精度与推理速度,而动态基线技术可智能调整预警阈值。典型应用包括品牌声誉管理、危机预警等场景,如某案例中系统15分钟内完成全网事件追踪,大幅提升企业应对效率。随着多模态融合和实时计算技术的发展,舆情系统正成为

weixin_42535720的博客 261

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

带读《Snowflake》数仓论文

点击蓝色“有关SQL”关注我哟加个“星标”,天天与6000人一起快乐成长《Snowflake Elastic Data Warehouse》被称为近些年最重要的分布式数据库论文,我也是最...

wujiandao的专栏 1245

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

又一个开源便斩获 7k star 的新模型「GitHub 热点速览」

作者:HelloGitHub-小鱼干Star 并不能代表什么,但是绝对能表示一个项目的受欢迎程度。就像刚开源一周就有 7k+ star 的新模型,输入文本 / 图像就能获得 3D 对象。除了这个新模型,本周还有一款新的 Web 3D 渲染引擎 Orillusion,向量数据库新晋成员 qdrant。还有老牌魔兽世界为它站台的游戏解决方案 azerothcore-wotlk,和记录所有你 shell...

HelloGitHub 的博客 681

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

学就完事了!万星项目带你做 3D 游戏——GitHub 热点速览 v.21.18

作者:HelloGitHub-小鱼干新手开始学习的时候,都会遇到一个问题:如何开始学 xx?See,这周的 GitHub 热榜项目们就是带你来学习新技术的,在这个五一假期学习下 3D 游戏...

HelloGitHub 的博客 561

小红书视频文案提取有哪些工具?2026 年这几款工具的实际表现对比

做小红书内容运营的时候,经常会卡在两个问题:看到别人的爆款文案想快速学习,但手工逐字摘录太慢;或者想把小红书上的优质视频转成可编辑的文本做素材库。这些场景下,找一个趁手的视频转文字工具能省不少时间。截至 2026 年,市面上做这块的方案大致分三类:本地软件、在线网站和微信小程序,其中小程序这类因为无需下载、即用即走的特性,用的人增长最快。下面我会重点拆解一款叫提词匠的微信小程序,然后对比讲几个其他方案,帮你找到最适合自己的选择。

asyncs的博客 313

Grok4视频深度解析:从多模态理解到可发布内容生成

视频内容理解是AI信息处理的核心能力之一,其本质是融合语音、画面与文本的多模态对齐与结构化建模。传统方法依赖字幕OCR和大模型泛化总结,易产生事实偏差与细节丢失;而以Grok4为代表的新型架构,通过声纹情感分析、关键帧语义识别与三角验证机制,实现对视频的‘现场级’重建。这种能力不仅提升信息提取精度,更支撑知识图谱构建与事实锚定,为内容创作提供高保真原始素材。在职场学习、知识管理、自媒体生产等高频场景中,它正成为连接海量音视频资源与可交付成果的关键枢纽——尤其适用于需要强事实性、高时效性与个性化表达的中文内容

weixin_30321709的博客 463

用ChatGPT做科技事实核查:消费电子参数辨伪实战指南

在消费电子领域,OLED屏幕参数、芯片能效比、影像模组性能等技术指标常被营销话术扭曲。理解这些概念需回归基础原理——如峰值亮度与持续亮度的物理差异、MTF50衡量解析力的本质、ΔE色准的人眼感知阈值。其技术价值在于支撑真实用户体验,而非制造参数焦虑;典型应用场景包括手机横评、媒体选题验证、供应链分析及消费者购机决策。本文聚焦如何将ChatGPT作为结构化质疑工具,结合信源可信度分级(L1-L4)、四层穿透法与数据陷阱识别,实现零代码、免付费的事实核查闭环,尤其适用于OLED技术对比与A/B测试数据验证。

weixin_33875839的博客 426

龙芯解码:现代物理七讲·中文思维重构

本文《通心译:现代物理学七讲》是一份创新性的物理学科普文档,通过中英双语对照和独特的"通心译"原则,用中国传统文化思维重新诠释现代物理学核心概念。文档包含七个关键章节:规范对称性(杨振宁理论)、对称性破缺、量子场论、量子纠缠、测不准原理、熵与时间箭头、相对论,每章均采用"现象描述-科学解释-文化关联"的三段式结构,并配有"龙魂中文版"的文化解读。文档采用CC BY-NC-SA 4.0协议开放共享,强调知识传播的"非镜像共鸣"原则,旨在打破西方术语体系对物理学的垄断,建立基于中文思维的科学认知框架。全文不使用

UID9622的博客 338
上一篇: 2.6 Android 代码的严格检查
下一篇: ActiveAndroid 简单方便的ORM(对象关系映射)
千雅爸爸
博客等级 码龄18年 292粉丝 639原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值