/wiki/User:10.7.18.77 登录/创建账户 

Android接入教程

本教程将讲解如何在Android设备上构建应用并接入人人网。通过下面简单的步骤,我们向你展示了接入人人网的几个关键步骤。

从零开始,按照本教程一步一步地进行,最后你将得到一个可以在Android模拟器中运行的应用。本教程基于Renren API Android SDK来实现。

注意:使用Renren API Android SDK来进行Android应用接入并不是必需的。实际上,这个SDK是将人人网开放平台技术架构的各种接口(如用作验证和授权的OAuth 2.0,提供数据的底层Rest API,以及带有可视化界面的Widget API)做了封装,以便于第三方调用。你也可以直接调用人人网开放平台技术架构的各种接口。

目录

[编辑] 准备工作

在创建你的应用前,你需要做一些简单的准备。

[编辑] 开发环境

你需要完成Android开发环境的搭建,如果你不熟悉这一步,可以在互联网上得到更详细的帮助

本教程基于Android2.2完成,不同版本可能会存在细微差别。

[编辑] 下载Renren API Android SDK

本教程需要Renren API Android SDK完成,所以在开始本教程前请先下载Renren API Android SDK最新版:Media:Renren_Android_SDK_v3.0_beta.zip

你也可以到人人网开源项目去下载Renren API Android SDK的最新版本:可以下载zip格式的压缩包并解压到选定的目录,也可以在官方代码库使用Hg获取最新的Renren API Android SDK代码。


[编辑] 在开放平台申请和配置移动客户端应用

任何应用为了接入开放平台,都需要在开放平台申请一个应用,并做出相应的配置。

申请应用并配置基本属性的方法和步骤请参照申请应用并配置基本属性中的内容。 完成这一步后你便可以得到你的应用ID、API Key和Secret Key,这三个值将在下面的步骤中用到。


[编辑] 创建你的Android应用

[编辑] 建立目标工程

在Eclipse中,点击菜单File>New 创建一个新的Android工程,名为RenrenSDKDemo。 创建完成后可以得到下图这样的结果:

[编辑] 将SDK加入目标工程

在Eclipse中,点击菜单File>Import,选择Existing Projects into Workspace, 选择之前解压Renren API Android SDK得到的renren_android_connect文件夹,勾选Copy Projects into workspace 选项,将Renren API Android SDK导入。

在之前创建的RenrenSDKDemo工程上右键,点击Property,在Android标签内将Renren API Android SDK加入目标工程Library。如下图所示:


编辑RenrenSDKDemo中的AndroidManifest.xml文件,添加如下Activity和权限的声明。

  • 在<application>节点下添加如下代码:
<!-- 辅助完成Renren授权的Activity ,必须在AndroidManifest.xml中声明 --> <activity android:name="com.renren.api.connect.android.AuthorizationHelper$BlockActivity" android:theme="@android:style/Theme.Dialog"> </activity>


  • 在<manifest>节点下添加如下代码,为应用添加网络访问权限:
<!-- renren sdk 需要的网络权限 ,必须在AndroidManifest.xml中声明 --> <uses-permission android:name="android.permission.INTERNET" />

这样就完成了Renren API Android SDK的添加。


[编辑] 在应用中加入人人网授权功能

帐号登录是最典型的一种接入方式,这种方式允许用户以人人网的账号登陆你的应用。下面用简单的步骤演示了如何在Android应用中加入登陆功能。

[编辑] 添加登陆相关控件

我们需要一个简单的登陆界面,允许用户通过登陆按钮登陆。

这里用到的素材可以在人人帐号登录标识图片下载到。

我们这里用到了四张图片:Android登陆按钮蓝色版中,常态按钮和按下按钮的4张png图片。将图片改名,复制到res/drawable-mdpi文件夹中,并建立两个selecter文件,作为登陆和退出按钮的背景。

  • btn_login.xml文件:
<?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:drawable="@drawable/btn_login_pressed" android:state_focused="true" android:state_pressed="true"/> <item android:drawable="@drawable/btn_login_pressed" android:state_focused="false" android:state_pressed="true"/> <item android:drawable="@drawable/btn_login_normal" android:state_focused="false" android:state_pressed="false"/> </selector>
  • btn_logout.xml文件:
<?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:drawable="@drawable/btn_logout_pressed" android:state_focused="true" android:state_pressed="true"/> <item android:drawable="@drawable/btn_logout_pressed" android:state_focused="false" android:state_pressed="true"/> <item android:drawable="@drawable/btn_logout_normal" android:state_focused="false" android:state_pressed="false"/> </selector>

添加完成后的目录下图所示:

  • 在res/values/strings.xml中添加字符串:
<string name="auth_string">请登录</string> <string name="auth_success">登陆成功</string> <string name="auth_failed">登陆失败</string>
  • 修改res/main.xml文件,将下面代码复制到根节点里面:
<TextView android:id="@+id/loginText" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/auth_string" android:layout_margin="5dip"/> <Button android:id="@+id/loginBtn" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="" android:background="@drawable/btn_login"/> <Button android:id="@+id/logoutBtn" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="" android:background="@drawable/btn_logout"/>

修改完成后main.xml界面布局如下图所示:


[编辑] 添加登陆的代码逻辑

首先在RenrenSDKDemoActivity.java中添加相关实例域:

  • (注意,这里为了方便仅仅将Secret Key声明为静态字符串。在你的应用中至少需要进行代码混淆或加密,以保护你的Secret Key)
//你的应用ID private static final String APP_ID = "168538"; //应用的API Key private static final String API_KEY = "9cce3e007bd5464799440370253bb025"; //应用的Secret Key private static final String SECRET_KEY = "41fb11eed3364ebc84814daba56c3455"; private Renren renren; private Handler handler; private Button loginBtn; private Button logoutBtn; private TextView loginText;


  • 在Activity创建时完成初始化,代码如下:
public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); init(); //登录的Listener final RenrenAuthListener listener = new RenrenAuthListener() { //登录成功 public void onComplete(Bundle values) { showLoginBtn(false); loginText.setText(R.string.auth_success); handler.post(new Runnable() { @Override public void run() { Toast.makeText(RenrenSDKDemoActivity.this, RenrenSDKDemoActivity.this.getString(R.string.auth_success), Toast.LENGTH_SHORT).show(); } }); } //登录失败 @Override public void onRenrenAuthError(RenrenAuthError renrenAuthError) { loginText.setText(R.string.auth_failed); handler.post(new Runnable() { @Override public void run() { Toast.makeText(RenrenSDKDemoActivity.this, RenrenSDKDemoActivity.this.getString(R.string.auth_failed), Toast.LENGTH_SHORT).show(); } }); } @Override public void onCancelLogin() { } @Override public void onCancelAuth(Bundle values) { } }; //登录按钮的事件 loginBtn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { renren.authorize(RenrenSDKDemoActivity.this, listener); } }); //退出按钮的事件 logoutBtn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { renren.logout(getApplicationContext()); showLoginBtn(true); loginText.setText(R.string.auth_string); } }); } //初始化按钮和Renren实例 private void init(){ renren = new Renren(API_KEY, SECRET_KEY, APP_ID, RenrenSDKDemoActivity.this); handler = new Handler(); loginBtn = (Button) findViewById(R.id.loginBtn); logoutBtn = (Button) findViewById(R.id.logoutBtn); loginText = (TextView) findViewById(R.id.loginText); showLoginBtn(true); } //显示登录/退出按钮 private void showLoginBtn(boolean flag){ if(flag){ loginBtn.setVisibility(View.VISIBLE); logoutBtn.setVisibility(View.GONE); } else { loginBtn.setVisibility(View.GONE); logoutBtn.setVisibility(View.VISIBLE); } }

至此,你可以尝试在Android模拟器中运行这个应用了。


[编辑] 授权效果图

  • 登陆过程:
  • 授权过程:


[编辑] 在应用中加入获取人人网好友的功能

获取好友列表是一种常见的社交功能。这段教程能帮助你实现获得登陆用户好友列表的功能,这里用到的API接口是friends.getFriends

[编辑] 添加好友列表的相关控件

首先,添加相关控件:一个Button和一个ListView,用来显示好友列表。

  • 修改res/main.xml文件,将下面代码复制到根节点里面:
<Button android:id="@+id/showFriendsBtn" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="获取好友" /> <ListView android:id="@+id/friendList" android:layout_width="match_parent" android:layout_height="wrap_content" > </ListView>
  • 修改完成后main.xml布局如下图所示:


[编辑] 添加好友列表的处理代码

  • 修改RenrenSDKDemoActivity.java,添加显示等待框的函数:
private ProgressDialog progressDialog; /** * 显示等待框 * @param title 标题 * @param message 信息 */ protected void showProgress(String title, String message) { progressDialog = ProgressDialog.show(this, title, message); } /** * 取消等待框 */ protected void dismissProgress() { if (progressDialog != null) { try { progressDialog.dismiss(); } catch (Exception e) { } } }


  • 修改RenrenSDKDemoActivity.java,添加触发按钮及事件:
private Button showFriendsBtn; private ListView friendListView; public void onCreate(Bundle savedInstanceState) { ... showFriendsBtn = (Button) findViewById(R.id.showFriendsBtn); friendListView = (ListView) findViewById(R.id.friendList); //为"显示好友列表"按钮添加事件 showFriendsBtn.setOnClickListener( new OnClickListener() { @Override public void onClick(View v) { if (renren != null) { //创建异步获取数据的AsyncRenren实例 AsyncRenren asyncRenren = new AsyncRenren(renren); showProgress("请等待","获取数据中"); //创建一个FriendsGetFriendsRequestParam用来获取好友数据 FriendsGetFriendsRequestParam param = new FriendsGetFriendsRequestParam(); AbstractRequestListener<FriendsGetFriendsResponseBean> listener = new AbstractRequestListener<FriendsGetFriendsResponseBean>() { //好友数据获取完成,可以在FriendsGetFriendsResponseBean中取得结果 @Override public void onComplete(final FriendsGetFriendsResponseBean bean) { runOnUiThread(new Runnable() { @Override public void run() { dismissProgress(); showFriendList(bean); } }); } //获取数据错误 @Override public void onRenrenError(final RenrenError renrenError) { runOnUiThread(new Runnable() { @Override public void run() { dismissProgress(); } }); } //获取数据失败 @Override public void onFault(final Throwable fault) { runOnUiThread(new Runnable() { @Override public void run() { dismissProgress(); } }); } }; //开始获取数据 asyncRenren.getFriends(param, listener); } } //切换登陆/退出界面 private void showLoginBtn(boolean flag){ if(flag){ loginBtn.setVisibility(View.VISIBLE); logoutBtn.setVisibility(View.GONE); showFriendsBtn.setVisibility(View.GONE); friendListView.setVisibility(View.GONE); } else { loginBtn.setVisibility(View.GONE); logoutBtn.setVisibility(View.VISIBLE); showFriendsBtn.setVisibility(View.VISIBLE); friendListView.setVisibility(View.VISIBLE); } } });

至此,你可以尝试在Android模拟器中运行这个应用了。

[编辑] 获取好友列表的效果图

  • 点击"获取好友",得到下图结果:

[编辑] 将你的Android应用提交审核

在开发和测试完你的Android应用之后,应该提交给人人网进行审核。你可以在本网页最上方"我的应用"中进行相关操作。审核标准可以在这里查看。

在你的应用被审核通过之前,有些与人人网相关的功能会受到一定的限制,如登录人数的限制等等。等到你的应用被审核通过后,所有限制会取消,并且从审核通过第二天开始你的应用会出现在人人网的应用列表页。

注意:提交审核时,请确保在之前填写的“客户端下载URL”所指定的地址能够下载到你的应用,这样人人网的审核人员才能够进行审核。

[编辑] 如果应用还暂时没有下载地址怎么办?

如果是新开发的应用,很可能在你提交审核的时候还没有将应用提交到应用市场或发布到网络,这时你可能没有办法提供一个有效的“客户端下载URL”供用户下载,因此我们的审核人员也就无法进行审核。

在这种情况下,请联系人人网开放平台的审核团队:zhengqin.guo#renren-inc.com (请将#换成@)


[编辑] 集成更多功能

Renren API Android SDK中提供了更多功能,如果你希望获得更详细的资料,可以查看和运行Renren API Android SDK中的Demo程序,如下图所示。

即使在你的应用被审核通过并上线以后,你仍然可以(而且应该)不断地对应用进行改进,来保证持续地提升用户体验。

如果你想在改进的过程中集成更多人人网开放平台提供的功能,那么可以参考人人网开放平台技术架构,人人网开放平台提供的所有接口和SDK都是基于它来实现的。